Vector3 v3 = Vector3.one;
Vector2 v2 = v3;
Vector3s могут быть неявно преобразованы в Vector2 (z отбрасывается).
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Если вам нужно сделать много конверсий, вам, возможно, придется изменить способ использования векторов. Сделайте два теста и рассчитайте, какой из них вам подходит.
ОБНОВЛЕНИЕ С ТЕСТАМИ:
Так как вы спросили, какой из них самый быстрый, я создал тест, в котором 10000000 конверсий каждого в Unity. Похоже, что Инициализирующая версия является самой быстрой в этом случае. НО, вы всегда должны использовать тот, который соответствует вашему собственному контексту, поэтому я советую вам запускать собственные тесты в своей игре.
TestConvertByOperation 10000000 экземпляров: 0.2714049s
TestConvertByCasting 10000000 экземпляров: 0.286027s
TestConvertByInitializing 10000000 экземпляров: 0,1458781 с
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;
}
}