物理引擎的碰撞分组,适用2D和3D

本文介绍了如何在2D和3D物理引擎中设置碰撞组,讲解了通过位运算来理解碰撞组的碰撞关系,包括设置碰撞组、指定可碰撞组以及指定不可碰撞的组,并提供了2D和3D物理引擎的处理方式和示例。
摘要由CSDN通过智能技术生成

我们在运用物理碰撞的业务逻辑时,尤其是复杂的碰撞需求时,就需要设置碰撞组,以及指定碰撞组可以与哪些碰撞组进行碰撞。而这些,需要用到位运算的知识,有一些开发者对此不太理解。为了降低开发者上手的门槛,今天就来讲一讲,如何通过位运算来理解碰撞组的碰撞关系。

设置碰撞组

2D物理的碰撞组是设置刚体的category(碰撞类别)属性。

3D物理的碰撞组是设置碰撞器的collisionGroup(所属碰撞组)属性。

无论是2D还是3D,设置碰撞组的共同规则就是采用2的N次幂作为碰撞分组的值。

所以,设置碰撞组,比较容易理解,只要是2的N次幂值,都可以用于设置碰撞组,成为区分不同碰撞组的ID。

指定可碰撞的组

2D物理通过设置刚体的mask(掩码)属性来指定可与哪些组进行碰撞。

3D物理通过设置碰撞器的canCollideWith(能碰撞的组)属性来指定可与哪些组进行碰撞。

指定碰撞组,通常有三种情况:指定单个要碰撞的组,指定多个要碰撞的组,指定不可碰撞的组。

所以,我们设置指定碰撞组的值,从这三种情况分别介绍如何进行设置。

指定单个要碰撞的组

指定单个要碰撞的组最容易理解,就是你想和哪个组碰撞,就指定哪个组的ID。

例如你的组ID是2,想与碰撞组值为8的碰撞,那mask(2D)或canCollideWith(3D)的值设置为8即可。

这样,碰撞组2就只会与碰撞组8发生物理碰撞。

指定多个要碰撞的组

如果我们想与多个碰撞组发生碰撞,那就需要运用到 按位或的运算。

3D物理处理起来比较简单,由于通常是在代码里设置值,所以,我们可以直接使用 按位或的运算表达式即可。

例如,我想与8、32、128这几个碰撞组发生碰撞。

那么,直接在代码里用 8|32|128 表示即可。如下面的代码示例所示:

  1. //指定xxx碰撞器可以与其发生碰撞的碰撞组

  2. xxx.canCollideWith = 8 | 32 | 128;

而2D物理,开发者需要直接在IDE的刚体mask属性里填写按位或运算结果,比如刚才的8|32|128的 按位或运算结果是168。mask属性值里要输入168,才会与8、32、128这几个碰撞组发生碰撞。

所以,我们可以借助第三方工具来进行按位或运算,例如Chrome的调试工具,下图就是在Chrome中进行按位或运算。

为了便于直观计算,mask值可以理解为要碰撞的类别category十进制数值的求和。

但要理解,实质是二进制的按位或位运算。

既然讲到按位或运算,这里再啰嗦几句,展开说一下按位或运算的基础。位运算底子扎实可跳过此处,阅读下个部分。

按位或<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值