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();
}));