Quel est le moyen le plus efficace et le plus rapide pour convertir un Vector3 en Vector2?
Moulage:
Vector2 vector2 = (Vector2)vector3;
Initialisation d'un nouveau Vector2:
Vector2 vector2 = new Vector2(vector3.x, vector3.y);
Ou y a-t-il une autre méthode que je ne connais pas?
unity
c#
performance
S. Tarık Çetin
la source
la source
Réponses:
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Si vous devez effectuer de nombreuses conversions, vous devrez peut-être modifier la façon dont vous utilisez vos vecteurs. Faites deux tests et chronométrez-les pour voir celui qui vous convient.
MISE À JOUR AVEC LES TESTS: Puisque vous avez demandé lequel est le plus rapide, j'ai créé un test exécutant 10000000 conversions de chacun dans Unity. Il semble que la version Initialisation soit la plus rapide dans ce cas. MAIS, vous devez toujours utiliser celui qui convient à votre propre contexte, je vous conseille donc d'exécuter vos propres tests dans votre jeu.
la source
y
est en place. Lors de la conversion de aVector3
en aVector2
, vous voulez presque toujoursx
etz
, pasx
ety
.Les deux Vector2 et Vector3 sont un struct dans le moteur Unity, donc la création d'un de l'autre implique simplement l'attribution d'un stockage sur la pile (sauf si la destination est un attribut d'une classe objet, ce qui permettrait de sauter cette première étape) et la copie des deux valeurs des composants. Les deux mécanismes que vous donnez doivent être compilés exactement pour ce code IL.
Si vous rencontrez un problème de performances avec une conversion de ce type, vous avez probablement un problème de boxe , la structure étant convertie en puis à partir d'un objet de classe . Dans ce cas, vous devez déterminer si, quand et comment la boxe peut être évitée dans les parties critiques de votre code.
la source
D'après mon test, la meilleure façon de le faire est d'attribuer manuellement sa valeur par vous-même.
C'est mon résultat que j'étends de Mattias.
Attention, je le teste avec l'unité version 5.6.5
la source