Bit kaydırma özelliğini kullanmak, bir fizik işleminde birden çok katmanı dikkate almanızı sağlar:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
Biraz kayma olmadan, tek bir katmanda ve sadece bir katmanda raycast yapmanıza izin verilir. Bit kaydırma ile, birden fazla belirli katmanda raycast yapabilirsiniz:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
Belirli katmanlar dışında her katmanda da raycast yapabilirsiniz :
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Unity'deki "Katman yöneticisi" ne bakarsanız , katmanlar basit bir boyutlu dizinin endeksleri olarak görülebilir .
EDIT: Ben daha önce hiç görmedim, ama LayerMask
sınıf katman isimleri verilen "hesaplanan" katman maskesi almak için bir yardımcı program işlevi vardır:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
Varsayalım UserLayerA
ve UserLayerB
onuncu ve onbirinci katmanlar. Bunların Kullanıcı Katmanı değerleri 10 ve 11 olacaktır. Katman maskesi değerlerini elde etmek için adları GetMask'a aktarılabilir. Bağımsız değişken, adlarının bir listesi veya adlarını depolayan bir dizeler dizisi olabilir. Bu durumda dönüş değeri 2 ^ 10 + 2 ^ 11 = 3072 olacaktır.
Belgelere bağlantı: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html