I’m surprised at not seeing any report on this. Not really sure if its wai or my understanding is borked. The typical use case is for equipping a character with multiple meshes (weapons, items etc) and allow the character to switch between different objects in hand on the fly. sphere is attached to a particular bone, animation runs, sphere is then detached from bone but should still remain parented to dude. For item switch, its a sequence of multiple attaches/detaches.
Dude has no child named “sphere1”, so
let sphere2 = dude.getChildMeshes(true).find(child => child.name === "sphere1") returns
sphere2.attachToBone(skeleton.bones, dude) fails.
If you do
sphere.attachToBone(skeleton.bones, dude) instead if works.
This is entirely my fault, it was late and I didn’t sanitise/explain the PG properly.
Repro again: https://playground.babylonjs.com/#11BH6Z#673
The problem here is that detachFromBone should not cause my sphere to lose its parent, ie, dude. console will throw undefined for the 2nd call. wai ?
When you attach a mesh to a bone, the parent of this mesh is updated so that it is now the bone you attach it to. When you detach the mesh from the bone, its parent is reset to null. We could probably save the current parent when you call
attachToBone and set it back when you call
detachFromBone (with a flag to stay backward compatible) but I’m not sure it’s a general enough use case and you can simply set the parent to the node you want after you have called
detachFromBone. What do you think @Deltakosh?
Yes, I can do that. But I think this is worthy of discussion as I have no idea what the general use case is as it is. If parenting has no impact on
attachToBone, I’d expect it not to have an impact either when
detachFromBone runs. User multi triggering an animation (eg:item switch) means additional calls to finding and reparenting meshes, a minor hassle for a single mesh. But a nightmare when multiple agents are animating. Adding an option to
detachFromBone to prevent parenting resets is another alternative.
I love the alternative option
Here’s the PR:
I found this but I guess I was late Repro: https://playground.babylonjs.com/#NRNBMM#169
detachFromBone used to null a parent in a way outside of its intended func.
That won’t change with the PR, we don’t check you did call
attachToBone before calling
detachFromBone, you are responsible for the proper order of operations (it’s a bug on the user side to call
detachFromBone without having called
Tested, fix works and marking as solved. Thanks !