1:首先 了解js运算符
如下图
二进制为 0001
,表示在第 0
组(从 0
开始)
二进制为 11
,表示在第 0
,1
组(从 0
开始)
二进制为 111
,表示在第 0
,1
,2组(从 0
开始)
2:碰撞原理
只要以下条件为真就会进行碰撞检测 否则就穿透不碰撞
(GroupA & MaskB) && (GroupB & MaskA)
1:产生碰撞效果代码如下:
ColliderStr?.setGroup(1 << 0) //添加分组 默认分组0
ColliderStr?.setMask(1 << 0) //添加掩码 layer=0
this.SphereRB?.setGroup(1 << 0) //添加分组 默认分组0
this.SphereRB?.setMask(1 << 0) //添加掩码 layer=0
// (GroupA & MaskB) && (GroupB & MaskA) true
// 0001&0001=>1 && 0001&0001=>1 1&&1 true
产生碰撞⚪被弹开
2:穿透不发生碰撞
ColliderStr?.setGroup(1 << 0) //添加分组 默认分组0 GroupA
ColliderStr?.setMask(1 << 0) //添加掩码 layer=0 MaskA
this.SphereRB?.setGroup(1 << 0) //添加分组 默认分组0 GroupB
this.SphereRB?.setMask(1 << 1) //添加掩码 layer=1 MaskB
// (GroupA & MaskB) && (GroupB & MaskA) true or false
// 0001&0010=>0 && 0001&0001=>1 0&&1 =>false
正方体穿过圆体 不发生碰撞
3:注意观察 (1 << 0) + (1 << 1) 和 分组的关系 相信你很快就能理解,
ColliderStr?.setGroup((1 << 0) + (1 << 1)) //添加分组 默认分组0 ,1 GroupA
ColliderStr?.setMask((1 << 0) + (1 << 1)) //添加掩码 layer=0 layer=1 MaskA
ColliderStr?.setGroup((1 << 0) + (1 << 1)) //添加分组 默认分组0 ,1 GroupA
ColliderStr?.setMask((1 << 0) + (1 << 1)) //添加掩码 layer=0 layer=1, layer=2 MaskA
// 0001<<0 = 0001 0001<<2 = 0100 0001+0010 = 0011 默认分组 0 , 1