Unity中是用int32來表示32個Layer層。int32表示二進(jìn)制一共有32位(0—31)曲初。
在Unity中可編輯的Layer如下圖所示:
在Unity中每個GameObject都有Layer屬性降宅,默認(rèn)的Layer都是Default。在Unity中可編輯的Layer共有24個(8—31層),官方已使用的是0—7層氓轰,默認(rèn)不可編輯!
LayerMask實際上是一個位碼操作浸卦,在Unity3D中一共有32個Layer層署鸡,并且不可增加。
位運算符###
按位運算符:~限嫌、|靴庆、&、^
怒医。位運算符主要用來對二進(jìn)制位進(jìn)行操作炉抒。
邏輯運算符:&&、||稚叹、端礼!禽笑。
邏輯運算符把語句連接成更復(fù)雜的復(fù)雜語句。
按位運算符:左移運算符<<
蛤奥,左移表示乘以2佳镜,左移多少位表示乘以2的幾次冪。
舉個栗子:
var temp = 14 << 2;
表示十進(jìn)制數(shù)14轉(zhuǎn)化為二進(jìn)制后向左移動2位凡桥。
temp最后計算的值為 14乘以2的平方蟀伸,temp = 56;
同理缅刽,右移運算符>>
啊掏,移動多少位表示除以2的幾次冪。
具體可以轉(zhuǎn)到博客:按位運算符.
上面是個基礎(chǔ)知識的補(bǔ)充衰猛。
在Unity中是用LayerMask###
Layers
官方給出的描述是:Layers are most commonly used by Cameras to render only a part of the scene, and by Lights to illuminate only parts of the scene. But they can also be used by raycasting to selectively ignore colliders or to create collisions迟蜜。
翻譯下就是:Layers通常被攝像機(jī)用來渲染部分場景,和燈光照射部分場景使用啡省。但是它們也可以用來做射線檢測時忽略一些collder或Collision使用娜睛。
在代碼中使用時如何開啟某個Layers?
LayerMask mask = 1 << 你需要開啟的Layers層卦睹。
LayerMask mask = 0 << 你需要關(guān)閉的Layers層畦戒。
舉幾個個栗子:
LayerMask mask = 1 << 2; 表示開啟Layer2。
LayerMask mask = 0 << 5;表示關(guān)閉Layer5结序。
LayerMask mask = 1<<2|1<<8;表示開啟Layer2和Layer8障斋。
LayerMask mask = 0<<3|0<<7;表示關(guān)閉Layer3和Layer7。
上面也可以寫成:
LayerMask mask = ~(1<<3|1<<7);表示關(guān)閉Layer3和Layer7徐鹤。
LayerMask mask = 1<<2|0<<4;表示開啟Layer2并且同時關(guān)閉Layer4.
代碼:
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
LayerMask mask = ~(1<<3|1<<7);
void Update() {
if (Physics.Raycast(transform.position, transform.forward, 100, mask.value))
Debug.Log("Hit something");
}
}