我已经阅读了这篇文章,在第 2 部分中)使用 Leosori 答案的层,他使用位移来获取位掩码。我想解释一下位移的工作原理(我也没有在手册上找到答案)。
在示例中,显示了如何仅在第 8 层上进行转换:
int layerMask = 1 << 8;
// This would cast rays only against colliders in layer 8.
那么,如何使用位移同时获取第 9 层和第 10 层的位掩码呢?
在我的项目中,我的播放器上有一些光线投射,以便能够知道他是否看到了一些特定的对象(第 10 层)。如果物体在墙后面(第 9 层),玩家应该看不到它。我想在两个图层上进行光线投射并测试hit.collider.gameObject.tag
是否为"查找对象"。我知道还有其他解决方案可以做到这一点,但我想了解位移的工作原理。
操作单个位主要使用&
、|
、~
和<</>>
运算符来完成。
示例(带字节):
// single value
byte a = 1; // 00000001
// shift "a" 3 bits left
byte b = a << 3; // 00001000
// combine a and b with bitwise or (|)
byte c = a | b; // 00001001
因此,在您的情况下,要设置位 9 和位 10,请执行以下操作:
int layerMask = ( 1 << 9 ) | ( 1 << 10 );
请注意,我们使用的是|
而不是||
,这是合乎逻辑的 or。