Was ist der effizienteste und schnellste Weg, um einen Vector3 in einen Vector2 umzuwandeln?
Casting:
Vector2 vector2 = (Vector2)vector3;
Initialisieren eines neuen Vektors2:
Vector2 vector2 = new Vector2(vector3.x, vector3.y);
Oder gibt es eine andere Methode, die ich nicht kenne?
unity
c#
performance
S. Tarık Çetin
quelle
quelle
Antworten:
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Wenn Sie viele Konvertierungen vornehmen müssen, müssen Sie möglicherweise die Art und Weise ändern, wie Sie Ihre Vektoren verwenden. Machen Sie zwei Tests und messen Sie sie, um festzustellen, welcher für Sie funktioniert.
UPDATE MIT TESTS: Da Sie gefragt haben, welches das schnellste ist, habe ich einen Test erstellt, in dem jeweils 10000000 Conversions in Unity ausgeführt werden. In diesem Fall scheint die Initialisierungsversion am schnellsten zu sein. ABER du solltest immer die verwenden, die zu deinem eigenen Kontext passt, also rate ich dir, deine eigenen Tests in deinem Spiel durchzuführen.
quelle
y
ist. Wenn Sie aVector3
in a konvertierenVector2
, möchten Sie fast immerx
undz
nichtx
undy
.Sowohl Vector2 als auch Vector3 sind eine Struktur in der Unity-Engine. Bei der Erstellung einer Struktur aus der anderen wird lediglich ein Speicher auf dem Stapel zugewiesen (es sei denn, das Ziel ist ein Attribut eines Klassenobjekts , mit dem dieser erste Schritt übersprungen werden kann.) und das Kopieren der beiden Komponentenwerte. Beide von Ihnen angegebenen Mechanismen sollten genau zu diesem IL-Code kompiliert werden.
Wenn bei einer Konvertierung dieses Typs ein Leistungsproblem auftritt , liegt wahrscheinlich ein Boxproblem vor , bei dem die Struktur in ein Klassenobjekt und dann von einem Klassenobjekt konvertiert wird. In diesem Fall sollten Sie untersuchen, ob, wann und wie das Boxen in leistungskritischen Teilen Ihres Codes vermieden werden kann.
quelle
Nach meinem Test ist es am besten, den Wert manuell selbst zuzuweisen.
Dies ist mein Ergebnis, das ich von Mattias ausgehe.
Bitte beachten Sie, dass ich es mit Unity Version 5.6.5 teste
quelle