Vector3 v3 = Vector3.one;
Vector2 v2 = v3;
Vector3 có thể được chuyển đổi hoàn toàn thành Vector2 (z bị loại bỏ).
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Nếu bạn phải thực hiện nhiều chuyển đổi, bạn có thể phải thay đổi cách bạn sử dụng các vectơ của mình. Thực hiện hai bài kiểm tra và thời gian để xem cái nào phù hợp với bạn.
CẬP NHẬT VỚI KIỂM TRA:
Vì bạn đã hỏi ai là người nhanh nhất tôi đã tạo một bài kiểm tra chạy 10000000 chuyển đổi của mỗi bài trong Unity. Có vẻ như phiên bản Khởi tạo là nhanh nhất trong trường hợp này. NHƯNG, bạn nên luôn luôn sử dụng một trong những phù hợp với bối cảnh của riêng bạn, vì vậy tôi khuyên bạn nên chạy thử nghiệm của riêng bạn trong trò chơi của bạn.
TestConvertByOperation 10000000 phiên bản: 0.2714049s
TestConvertByCasting 10000000 phiên bản: 0.286027s
TestConvertByInitializing 10000000 phiên bản: 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;
}
}