Qual é a maneira mais eficiente e rápida de converter um Vector3 para um Vector2?
Fundição:
Vector2 vector2 = (Vector2)vector3;
Inicializando um novo Vector2:
Vector2 vector2 = new Vector2(vector3.x, vector3.y);
Ou existe outro método que eu não conheço?
unity
c#
performance
S. Tarık Çetin
fonte
fonte
Respostas:
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Se você precisar fazer muitas conversões, pode ser necessário alterar a maneira como você usa seus vetores. Faça dois testes e cronometre-os para ver qual deles funciona para você.
ATUALIZAÇÃO COM TESTES: Como você perguntou qual é o mais rápido , criei um teste executando 10000000 conversões de cada uma no Unity. Parece que a versão Inicializando é a mais rápida nesse caso. MAS, você deve sempre usar aquele que se adapte ao seu próprio contexto, por isso aconselho a executar seus próprios testes no seu jogo.
fonte
y
acabou. Ao converter aVector3
para aVector2
, você quase sempre desejax
ez
, nãox
ey
.O Vector2 e o Vector3 são uma estrutura no mecanismo do Unity, portanto, a criação de um a partir do outro envolve simplesmente a alocação de um armazenamento na pilha (a menos que o destino seja um atributo de um objeto de classe , o que permitiria ignorar esta primeira etapa) e a cópia dos dois valores de componentes. Os dois mecanismos que você fornece devem ser compilados exatamente nesse código de IL.
Se você estiver enfrentando um problema de desempenho com uma conversão desse tipo, provavelmente terá um problema de boxe , com a estrutura sendo convertida para e a partir de um objeto de classe . Nesse caso, você deve investigar se, quando e como, o boxe pode ser evitado em partes críticas do desempenho do seu código.
fonte
No meu teste, a melhor maneira de fazer isso é atribuir manualmente seu valor.
Este é o meu resultado que estendo de Mattias.
Observe que eu testei com a versão 5.6.5 do Unity
fonte