ArcRotateCamera's Radius affects the Rotation/Position of attachToBone Meshes

attachToBone is implemented like this in TransformNode:

public attachToBone(bone: Bone, affectedTransformNode: TransformNode): TransformNode {
    this._transformToBoneReferal = affectedTransformNode;
    this.parent = bone;

    if (bone.getWorldMatrix().determinant() < 0) {
        this.scalingDeterminant *= -1;
    }
    return this;
}

If I comment out the this.scalingDeterminant *= -1; it does make work your use case.

Indeed, if calling this.skeleton.bones[boneIndex].getWorldMatrix().determinant() in your PG attachToBone method, we can see it returns a negative value when the mesh is visible when you attach the AK47 to the bone. When the mesh is not visible yet, the bone matrices are all 0 so the determinant is 0 and thus scalingDeterminant is not multiplied by -1.

As scalingDeterminant is a public property, you can reset it to 1 and make the PG work:

https://playground.babylonjs.com/#N3RH3R#30

However, I’m not sure it’s the right way to fix the problem…

I can’t help more, I don’t know anything about animation code, but maybe it can help someone more knowledgeable about this.

1 Like