Apa cara paling efisien dan tercepat untuk mengubah Vector3 ke Vector2?
Pengecoran:
Vector2 vector2 = (Vector2)vector3;
Menginisialisasi Vector2 baru:
Vector2 vector2 = new Vector2(vector3.x, vector3.y);
Atau ada metode lain yang saya tidak tahu?
unity
c#
performance
S. Tarık Çetin
sumber
sumber
Jawaban:
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.
sumber
y
adalah terserah. Saat mengonversi aVector3
menjadiVector2
, Anda hampir selalu menginginkanx
danz
, tidak,x
dany
.Baik Vector2 dan Vector3 adalah struct di mesin Unity, jadi penciptaan satu dari yang lain hanya melibatkan alokasi penyimpanan di stack (kecuali tujuan adalah atribut dari objek kelas , yang akan memungkinkan melewatkan langkah pertama ini) dan penyalinan kedua nilai komponen. Kedua mekanisme yang Anda berikan harus dikompilasi dengan tepat kode IL ini.
Jika Anda mengalami masalah kinerja dengan konversi jenis ini maka Anda mungkin memiliki masalah tinju , dengan struct yang dikonversi ke dan kemudian dari objek kelas . Dalam hal ini Anda harus menyelidiki apakah, kapan, dan bagaimana, tinju dapat dihindari di bagian-bagian penting dari kode Anda.
sumber
Dari pengujian saya, cara terbaik untuk melakukannya adalah menetapkan nilai sendiri secara manual.
Ini adalah hasil yang saya dapatkan dari Mattias.
Harap dicatat, saya mengujinya dengan versi persatuan 5.6.5
sumber