仅在具有位移的两层上进行光线投射以获得位掩码



我已经阅读了这篇文章,在第 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。

最新更新