- Home /
Can you make a gizmo that changes behavior when clicked?
I'm making some waypoints with gizmos, and I'd like to make the simple gizmos that show the waypoints in the editor work in such a way that if you click on one, it changes from displaying a wire sphere to a wire cube, stays that way, and then if you click on it again, it will turn back to a sphere. So like a gizmo that toggles its shape each time you click on it (not to be confused with a gizmo that changes shape when selected; I know that can be done with OnDrawGizmosSelected).
Can this be done, or is there not enough input recognition in the editor to support such dynamic waypoints?
Answer by AlanChatham · May 24, 2011 at 06:14 AM
So, I figured out a kinda cludgey solution. It's not ideal (an ideal solution would have something where you could test for a mouse click, since now you have to select something else and then re-select the gizmo), but it works! In case someone else needs it, here's the code, with comments:
using UnityEngine; public class MovePoint : MonoBehaviour {
public bool isStop = false;
public int clickedCounter = 0;
private void OnDrawGizmos(){
// Semi-transparent color
Gizmos.color=new Color(1f,0,1f,.5f);
if (isStop == true){
Gizmos.DrawCube(transform.position, new Vector3(.5f,.5f,.5f));
}
else{
Gizmos.DrawSphere(transform.position,.25f);
}
// If the clickedCounter is above 0, try to bring it down to zero
// If it's currently selected, the OnDrawGizmosSelected function
// will pull it back up
if (clickedCounter > 0){
clickedCounter--;
}
}
void OnDrawGizmosSelected(){
// If clickedCounter is zero,
// it means we just clicked on it; otherwise this function
// will have pulled the value up
if (clickedCounter == 0)
isStop = !isStop;
// And set the counter to some value, so next cycle,
// it won't be zero if it was selected last time
clickedCounter = 5;
// Finally, draw a bright box to highlight the selected gizmo
Gizmos.color = Color.cyan;
Gizmos.DrawWireCube(transform.position, new (.6f,.6f,.6f) );
}
public
bool GetIsStop(){
return isStop;
}
void SetIsStop(bool x){
isStop = x;
}
}
Your answer
Follow this Question
Related Questions
Manually Update/Redraw Scene View? 7 Answers
Gizmo Debug in Release Version 1 Answer
gizmo.drawline question : point a to b 2 Answers
How to Disable Transform Axis Gizmo Arrows 1 Answer
Transform tools appear far out from object and do not work. 1 Answer