我的一个同事写了一份声明,我不完全理解。不幸的是,他现在不在,所以这里是(用修改后的名字,我们正在统一的游戏)。
private readonly int FRUIT_LAYERS =
(1 << LayerMask.NameToLayer("Apple"))
| (1 << LayerMask.NameToLayer("Banana"));
nametolayer接受一个字符串并返回一个整数。我经常看到左移位运算符与右边的常量整数一起使用,而不是左边的常量整数一起使用,我通过google找到的所有示例都遵循这种方法。在这种情况下,我认为他把苹果和香蕉推到了同一个相对层上(稍后我将使用这个相对层进行过滤)。将来会有更多的“水果”来过滤。有谁能给我解释这些线路上发生了什么?
最佳答案
你的同事基本上是用int
代替bool[32]
来节省空间。您显示的代码块类似于
bool[] FRUIT_LAYERS = new bool[32];
FRUIT_LAYERS[LayerMask.NameToLayer("Apple")] = true;
FRUIT_LAYERS[LayerMask.NameToLayer("Banana")] = true;
您可能需要考虑更像这样的模式:
[Flags]
enum FruitLayers : int
{
Apple = 1 << 0,
Banana = 1 << 1,
Kiwi = 1 << 2,
...
}
private readonly FruitLayers FRUIT_LAYERS = FruitLayers.Apple | FruitLayers.Banana;