分组和掩码

在 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 属性,并提供设置面板,请留意更新公告


回到 物理使用 说明文档。