I need to add drag functionality to a GLB robot model. However, it seems that PointerDragBehavior only works on a single Mesh. I’ve tried adding a parent Mesh or a parent TransformNode to all the meshes, but it doesn’t work. I also tried adding the behavior to the original TransformNode of the model, but that didn’t work either. I saw some posts suggesting adding a parent BoundingBox, but that was ineffective as well. Below is my code:
public attachBehaviors1(assetContainer: AssetContainer) {
`Preformatted text`const pointerDragBehavior = new PointerDragBehavior({dragPlaneNormal: new Vector3(0,1,0)});
pointerDragBehavior.moveAttached = false;
pointerDragBehavior.useObjectOrientationForDragging = false;
pointerDragBehavior.onDragStartObservable.add((event)=>{})
pointerDragBehavior.onDragObservable.add((event)=>{
pointerDragBehavior.attachedNode.position.x += event.delta.x;
pointerDragBehavior.attachedNode.position.z += event.delta.z;
})
pointerDragBehavior.onDragEndObservable.add((event)=>{})
const armMesh = assetContainer.meshes[2];
const rootMesh = assetContainer.meshes[0];
const armTransformNode = assetContainer.transformNodes[1];
const tempRootMesh = new Mesh("tempMesh", this.scene);
const tempRootTransformNode = new TransformNode("tempTransformNode", this.scene);
assetContainer.meshes.forEach(mesh => {
tempRootTransformNode.addChild(mesh);
// tempMesh.addChild(mesh)
})
armMesh.addBehavior(pointerDragBehavior); // works
rootMesh.addBehavior(pointerDragBehavior); // fails
armTransformNode.addBehavior(pointerDragBehavior); // fails
tempRootMesh.addBehavior(pointerDragBehavior); // fails
tempRootTransformNode.addBehavior(pointerDragBehavior); // fails
}