Menggunakan bit shifting memungkinkan Anda untuk memperhitungkan banyak lapisan dalam satu operasi fisika:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
Tanpa menggeser sedikit, Anda akan diizinkan untuk raycast dalam satu layer dan hanya satu. Sementara dengan sedikit pergeseran, Anda dapat raycast di beberapa lapisan tertentu:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
Anda juga dapat raycast di setiap lapisan kecuali yang spesifik:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Jika Anda melihat "Manajer layer" di Unity, layer dapat dilihat sebagai indeks array satu dimensi yang sederhana .
EDIT: Saya belum pernah melihatnya sebelumnya, tetapi LayerMask
kelas memiliki fungsi utilitas untuk mendapatkan lapisan "dikomputasi" diberi nama lapisan:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
Misalkan UserLayerA
dan UserLayerB
adalah lapisan kesepuluh dan kesebelas. Ini akan memiliki nilai-nilai Layer Pengguna dari 10 dan 11. Untuk mendapatkan nilai layer mask mereka nama mereka dapat diteruskan ke GetMask. Argumen dapat berupa daftar nama mereka atau array string yang menyimpan nama mereka. Dalam hal ini nilai pengembaliannya adalah 2 ^ 10 + 2 ^ 11 = 3072.
Tautan ke dokumentasi: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html