Jaki jest najbardziej wydajny i najszybszy sposób na konwersję Vector3 na Vector2?
Odlew:
Vector2 vector2 = (Vector2)vector3;
Inicjowanie nowego Vector2:
Vector2 vector2 = new Vector2(vector3.x, vector3.y);
Czy jest jeszcze inna metoda, której nie znam?
unity
c#
performance
S. Tarık Çetin
źródło
źródło
Odpowiedzi:
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Jeśli musisz dokonać wielu konwersji, być może będziesz musiał zmienić sposób korzystania z wektorów. Wykonaj dwa testy i określ czas, który z nich będzie dla Ciebie odpowiedni.
AKTUALIZACJA Z TESTAMI: Ponieważ zapytałeś, który jest najszybszy , stworzyłem test z 10000000 konwersji każdego w Unity. Wygląda na to, że w tym przypadku najszybsza jest wersja inicjująca. ALE powinieneś zawsze używać tego, który pasuje do twojego kontekstu, więc radzę ci przeprowadzić własne testy w grze.
źródło
y
się skończył. KonwertującVector3
na aVector2
, prawie zawsze chcesz,x
az
niex
iy
.Zarówno Vector2, jak i Vector3 są strukturą w silniku Unity, więc tworzenie jednego z drugiego wymaga po prostu alokacji pamięci na stosie (chyba że miejsce docelowe jest atrybutem obiektu klasy , co pozwoliłoby pominąć ten pierwszy krok) i kopiowanie dwóch wartości składników. Oba podane mechanizmy powinny zostać skompilowane z dokładnie tym kodem IL.
Jeśli napotykasz problem z wydajnością podczas konwersji tego typu, prawdopodobnie masz problem z boksem , przy czym struktura jest konwertowana na obiekt klasy, a następnie z niego . W takim przypadku powinieneś sprawdzić, czy, kiedy i jak można uniknąć boksu w częściach kodu o kluczowym znaczeniu dla wydajności.
źródło
Z mojego testu najlepszym sposobem na to jest samodzielne przypisanie jego wartości.
To mój wynik, który przedłużam od Mattiasa.
Uwaga: testuję to w wersji jedności 5.6.5
źródło