Custom Gizmo can't trigger events

I want to set a mouse hover action for a custom gizmo to change its color and size when hovering, but it doesn’t work. I have tried many methods, but none of them work. I hope kind-hearted people can help me. The code is as follows:

constructor(scene:Scene){
    this.scene = scene;

    const utilLayer = new UtilityLayerRenderer(this.scene);
    const hoverRed = Color3.FromHexString("#bc3132");
    const hoverGreen = Color3.FromHexString("#6ae066");
    const hoverBlue = Color3.FromHexString("#2b519f");


    const positionGizmo = new PositionGizmo(utilLayer);
    positionGizmo.xGizmo.hoverMaterial.diffuseColor = hoverRed;
    positionGizmo.yGizmo.hoverMaterial.diffuseColor = hoverGreen;
    positionGizmo.zGizmo.hoverMaterial.diffuseColor = hoverBlue;
    const createFlatArrow = (scene, width, height) => {
      const arrowBody = MeshBuilder.CreateBox("arrowBody", { width: height, height: width, depth: 0.005 }, scene);
      arrowBody.position.x = 0.5 * height; 

      const arrowHead = MeshBuilder.CreateCylinder("cone", { diameterTop: 0, diameterBottom: width * 2, height: width*6, tessellation: 24 }, scene);
      arrowHead.rotation.z = -Math.PI / 2; 
      arrowHead.position.x = height + (width * 2) / 2; 

      const arrowMesh = Mesh.MergeMeshes([arrowBody, arrowHead], true, true, undefined, false, true);

      const arrowMaterial = new StandardMaterial("arrowMaterial", scene);
      arrowMaterial.emissiveColor = Color3.Red();
      arrowMesh.material = arrowMaterial;
      return arrowMesh;
    };

    const customXArrow = createFlatArrow(utilLayer.utilityLayerScene, hoverGreen, hoverGreen, 0.005, 0.2); 
    
    utilLayer.utilityLayerScene.addMesh(customXArrow);
    customXArrow.isPickable = true;
    positionGizmo.xGizmo.setCustomMesh(customXArrow);

    customXArrow.actionManager = new ActionManager(utilLayer.utilityLayerScene);

    customXArrow.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnPointerOverTrigger, () => {
      console.log("希望能够生效");
      (customXArrow.material as StandardMaterial).emissiveColor = Color3.White();
    }));

    customXArrow.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnPointerOutTrigger, () => {
      (customXArrow.material as StandardMaterial).emissiveColor = Color3.Red();
    }));

Hi @luffyaprk welcome to the forum

Can you please provide a complete PG? it makes our life much more easier :slight_smile:

1 Like

Thank you for your reply. This issue has now been resolved, and I am referring to it https://playground.babylonjs.com/#MT4TYN#1 .It has been implemented since 2018, and it would be great if there were a more elegant solution to this problem