¿Cuál es la forma más eficiente y rápida de convertir un Vector3 en un Vector2?
Fundición:
Vector2 vector2 = (Vector2)vector3;
Inicializando un nuevo Vector2:
Vector2 vector2 = new Vector2(vector3.x, vector3.y);
¿O hay otro método que no conozco?
unity
c#
performance
S. Tarık Çetin
fuente
fuente
Respuestas:
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Si tiene que hacer muchas conversiones, puede que tenga que cambiar la forma en que usa sus vectores. Haga dos pruebas y cronometralas para ver cuál funciona para usted.
ACTUALIZACIÓN CON PRUEBAS: como usted preguntó cuál es la más rápida , creé una prueba con 10000000 conversiones de cada una en Unity. Parece que la versión de inicialización es más rápida en este caso. PERO, siempre debes usar el que se adapte a tu propio contexto, por lo que te aconsejo que realices tus propias pruebas en tu juego.
fuente
y
está arriba. Al convertir aVector3
a aVector2
, casi siempre quieresx
yz
, nox
yy
.Tanto Vector2 como Vector3 son una estructura en el motor de Unity, por lo que la creación de uno desde el otro simplemente implica la asignación de un almacenamiento en la pila (a menos que el destino sea un atributo de un objeto de clase , lo que permitiría omitir este primer paso) y la copia de los dos valores componentes. Ambos mecanismos que proporcione deben compilarse exactamente con este código IL.
Si se encuentra con un problema de rendimiento con una conversión de este tipo, es probable que tenga un problema de boxeo , con la estructura convertida ay desde un objeto de clase . En ese caso, debe investigar si, cuándo y cómo, podría evitarse el boxeo en partes críticas de su código.
fuente
Desde mi prueba, la mejor manera de hacerlo es asignar manualmente su valor usted mismo.
Este es mi resultado que extiendo de Mattias.
Tenga en cuenta que lo pruebo con la versión 5.6.5 de unity.
fuente