Vector3 v3 = Vector3.one;
Vector2 v2 = v3;
Vector3s można niejawnie przekonwertować na Vector2 (z jest odrzucane).
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.
TestConvertByOperation 10000000 wystąpień: 0,2714049s
TestConvertByCasting 10000000 instancji: 0,286027s
TestConvertByInitializing 10000000 instancji: 0,1458781s
using UnityEngine;
public class TestVector3Conversion : MonoBehaviour
{
readonly int iterations = 10000000;
Vector3 testVector = new Vector3(3f, 14f, 42f);
void Start()
{
Debug.Log(string.Format("TestConvertByOperation {0} instances: {1}s", iterations, TestConvertByOperation()));
Debug.Log(string.Format("TestConvertByCasting {0} instances: {1}s", iterations, TestConvertByCasting()));
Debug.Log(string.Format("TestConvertByInitializing {0} instances: {1}s", iterations, TestConvertByInitializing()));
}
float TestConvertByOperation()
{
var timeStart = Time.realtimeSinceStartup;
for (int i = 0; i < iterations; i++)
{
Vector2 v2 = testVector;
}
return Time.realtimeSinceStartup - timeStart;
}
float TestConvertByCasting()
{
var timeStart = Time.realtimeSinceStartup;
for (int i = 0; i < iterations; i++)
{
Vector2 v2 = (Vector2)testVector;
}
return Time.realtimeSinceStartup - timeStart;
}
float TestConvertByInitializing()
{
var timeStart = Time.realtimeSinceStartup;
for (int i = 0; i < iterations; i++)
{
Vector2 v2 = new Vector2(testVector.x, testVector.y);
}
return Time.realtimeSinceStartup - timeStart;
}
}