Hi guys,
I am playing around with the show/hide meshes and attempt to load with dynamically-created button.
At first, I look at the reference of this playground: https://playground.babylonjs.com/#LGKV0P#1
I successfully bind the buttons with the meshes but for some reason the setEnabled function is unable to show/hide the mesh.
for (tmp_mesh of mesh_reference)
tmp_mesh.setEnabled((tmp_mesh.isEnabled() ? false : true));
if I do tmp_mesh.isEnabled()? true: false, it would show the meshes but can’t hide them if I click it once again.
The playground here :Babylon.js Playground
The playground with setting tmp_mesh.isEnabled()? true:false:Babylon.js Playground
Hey there! What an interesting scenario you have going on.
You have a couple different things going on. Let’s try to walk through them all. Simple answer for your mesh enabled is in the logic.
setEnabled(tmp_mesh.isEnabled()? true: false);
This will return set the enable to true when isEnabled is true and false when isEnabled is false. I don’t think this is the intention.
Instead lets try.
setEnabled(!mesh.isEnabled());
Now for part 2:
Here is a playground I made of what I think is your intention: https://playground.babylonjs.com/#68N544#3
I did a couple of changes from your original design. Let’s take a look.
First I changed the GUI from HTML to Babylon GUI. I was running into a couple of issues with getting mouse clicks not to work for the HTML so I went with the Babylon GUI to be consistent with Babylon and to isolate the debugging. For this I just made 3 simple buttons in a loop ( lines 30-41).
If you want further information about Babylon GUI, I’d recommend checking out our docs.
Next was the loading mesh. I wasn’t quiet following why you were loading them each button click. So instead I loaded them upfront and store them in an array. (lines 21-27)Then when we click the buttons we set enabled to false on all the meshes except the one of the button we just pressed.
button.onPointerClickObservable.add( () => {
for (let j = 0; j < temp; j++) {
meshes[j].setEnabled(i == j);
}
Hope this wasn’t too hard to follow with all of the changes. Let me know if you have any follow up questions.
3 Likes
Thanks for the answer, I’m just curious if I can dynamically create buttons to show/hide the styles for preview purposes in the future project. I guess it would be better to use BabylonJs GUI for my cases:).
Yep of course you can! You can add a button at any time with advancedTexture.addControl(button);