分组和掩码
在 Cocos Creator 3D 中,物理组件提供了设置组和掩码的接口,以下代码示例介绍了所有的接口
注:以下的二进制显示是从右到左的顺序,即“011”中的0代表的是第三位。
分组
设置分组值,以下代码中的 group 的值二进制为 011,分组可看作是存在于分组 0 和分组 1 中。
const group = (1 << 0) + (1 << 1);
Collider.setGroup(group);
获取分组值,此示例中为 3,将 3 转为二进制为 011,可得分组为存在于分组 0 和分组 1 中。
Collider.getGroup();
添加分组值,上述代码基础上,经过以下代码后,分组变为存在于分组 0 和分组 1 和分组 2 中。此时,分组值为 0111(二进制),所以存在于分组 0、1、2 中。
const group = 1 << 2;
Collider.addGroup(group);
减少分组值,上述代码基础上,经过以下代码后,分组变为存在于分组 0 和分组 1 中。此时,分组值为 0011(二进制),所以存在于分组 0、1 中。
const group = 1 << 2;
Collider.removeGroup(group);
上述方法接收参数均为十进制数字,为方便理解,此处用二进制解释,开发者熟悉后也可直接传入十进制数字进行分组操作。
掩码
设置掩码值,以下代码中的 mask 的值二进制为 011,表示检测的分组为分组 0 和分组 1 的。
const mask = (1 << 0) + (1 << 1);
Collider.setMask(mask);
获取掩码值,此示例中为 3,将 3 转为二进制为 011,可得要检测的为分组 0 和分组 1 的内容。
console.log(Collider.getMask());
添加掩码值,上述代码的基础上,经过以下代码后,该掩码表示检测的分组为分组 0 和分组 1 和分组 2 的。此时,掩码值为 0111(二进制),所以检测分组 0、1、2 的内容。
const mask = 1 << 2;
Collider.addMask(mask);
减少掩码值,上述代码的基础上,经过以下代码后,该掩码表示检测的分组为分组 0 或分组 1 的。此时,掩码值为 0011(二进制),所以检测分组 0、1 的内容。
const mask = 1 << 2;
Collider.removeMask(mask);
注:加减符号的优先级高于位移符号。
注:灵活使用分组和掩码可以减少额外检测的消耗。
注:物理系统的分组和掩码后面可能会使用 Node 的 Layer 属性,并提供设置面板,请留意更新公告。
回到 物理使用 说明文档。