2015-11-25 2 views
1

J'ai un missile dans mon jeu et je veux garder une trace de la distance parcourue pour comparer avec une portée maximale. Comme il est possible de voyager le long d'un chemin incurvé, la comparaison de sa position actuelle par rapport à sa position de départ ne fonctionnera pas pour moi. Je sais que je peux utiliser .magnitude ou Vector3.Distance à chaque fois grâce à la boucle de mise à jour, mais je sais aussi que c'est un gros succès en termes de performances.Distance parcourue sans utiliser .magnitude ou Vector3.Distance()?

J'apprécierais toutes les suggestions.

+0

At-il une vitesse constante? Si c'est le cas, vous pouvez déterminer manuellement le temps nécessaire pour parcourir la distance désirée, puis détruire l'objet après l'heure calculée. – Taelsin

+0

C'est une excellente suggestion, mais malheureusement, elle n'a pas de vitesse constante. Il accélère de 0 à sa vitesse maximale sur une période de temps. – Bakewell

+0

Heureusement, il existe une formule pour cela aussi. Regardez ça sur http://www.dummies.com/how-to/content/how-to-calculate-time-and-distance-from-accelerati.html – Taelsin

Répondre

0

Merci Taelsin. Pour l'instant je vais juste mettre à jour la distance parcourue en utilisant la magnitude tous les x nombre de secondes en utilisant Invoke Repeat. Ce n'est pas exactement performant, mais c'est simple. Une fois que j'aurai un peu plus de temps, je ferai peut-être ce que vous suggérez et j'effectuerai des calculs de physique simples pour calculer le temps nécessaire pour parcourir la distance maximale.

+0

Je ne voudrais pas déranger pour si peu. Malgré le fait que la distance nécessite un calcul, ce n'est rien. Si vraiment vous voulez économiser sur cela, vous pouvez utiliser sqrMagnitude qui élimine le sqrt. Mais la valeur est moins intuitive. Mais honnête, à ce stade, vous ne devriez pas vous en préoccuper et le gérer. Au fait, le fait que vous imprimez seulement à intervalle de temps, pensez-vous que l'attente se passe comme par magie? InvokeRepeating doit créer un nouveau processus, c'est-à-dire effectuer chaque mise à jour de chaque image et tenir compte de l'heure actuelle et du temps écoulé. Tellement pour l'épargne n'est-ce pas? – Everts