Vector3 v3 = Vector3.one;
Vector2 v2 = v3;
Vector3s dapat secara implisit dikonversi ke Vector2 (z dibuang).
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Jika Anda harus membuat banyak konversi, Anda mungkin harus mengubah cara Anda menggunakan vektor Anda. Buat dua tes dan beri waktu untuk melihat mana yang cocok untuk Anda.
DIPERBARUI DENGAN UJI:
Karena Anda bertanya yang mana yang tercepat, saya membuat tes yang menjalankan 10.000.000 konversi masing-masing di Unity. Tampaknya versi Inisialisasi tercepat dalam hal ini. TETAPI, Anda harus selalu menggunakan yang sesuai dengan konteks Anda sendiri, jadi saya sarankan Anda untuk menjalankan tes Anda sendiri di game Anda.
Contoh TestConvertByOperation 10000000: 0,2714049s
Contoh dari TestConvertByCasting 10000000: 0.286027s
TestConvertByInitializing 10000000 instance: 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;
}
}