In Havok, it appears that the
PhysicsShape that you set on a
PhysicsBody is not the same object if you read it back. That’s a bit confusing itself, but even more so is that
isTrigger on the returned object is wrong. I wasted a good hour on that today, since I was making decisions on how to initialize objects based on whether they were a trigger or not.
Here’s an illustrative PG. The console output at this point in time is:
trigger shapes are not-equal
Is this working as intended? Cheers!
Ok, I found another curious thing, that may be related (or maybe not).
I get collision callbacks between my character and a trigger. The TRIGGER_ENTERED always fires, but the COLLISION_STARTED sometimes also fires when I update the character’s position (with disabledPreStep off, of course). I updated the playground to make this behavior apparent, too. Just click the mouse to update the sphere’s position randomly.
getShape indeed returns a new object every time it is called: https://github.com/BabylonJS/Babylon.js/blob/1d039a781a1d7a0b2c361817ce1cfcea88174274/packages/dev/core/src/Physics/v2/Plugins/havokPlugin.ts#L666, but they refer to the same underlying Havok object, so if you compare their
_pluginData property (it’s a array with one member), it is the same: PhysicsShape identity 2 | Babylon.js Playground (babylonjs.com)
About the collision event firing, I’m not sure about why this behavior is happening, let me tag @eoin to check
Got it. So, since the newly instantiated getShape object doesn’t expose the correct value of
isTrigger, should that getter property be removed? Otherwise it’s going to confuse a lot more people than just me.
The collision event thing is a bug, nice catch! Will get it fixed in the next plugin version.