My personal understanding is this. When there are many types of objects in the scene, collisions need to be detected between each pair, which may consume a lot of performance.
This area of the document is relatively thin. I checked a lot of information and got a rough idea of how to use it, but I personally think it needs to be verified.
In this case we can use collisionMask and collisionGroup together.
collisionGroup:default is -1, collisions can only occur if they are in the same group
collisionMask: default is -1, it can set which group to collide with
1)If the value of MeshA’s collisionMask is the same as the value of MeshB’s collisionGroup, it can definitely collide. But that’s not what I want to explain
2)The values of MeshA’s collisionGroup and MeshB’s collisionGroup are equal, but MeshA.collisionMask !== MeshB.collisionGroup, can this situation collide? The answer I got so far is false, The priority of collisionMask is greater than collisionGroup
3)collisionMask can specify multiple collisionGroups through the mask’s characteristics. Convert to binary bitwise AND,If the same digits are all 1, they can collide, as follows:
- Group A: 0b0001 (1)
- Group B: 0b0010 (2)
- Group C: 0b0100 (4)
- Group D: 0b1000 (8)
box.collisionMask = 0b0110 (6), can Can collide with Group B and Group C
If collisionMask is ob1111 then it can collide with a b c d
If there is no problem with my understanding, I hope my post can help some people