GUI Click and Hide

I need to let GUI appear when i click a game object but when i click anything else it should disappear, but every time i click on the GUI it disappears and doesn’t register my click.

if (Physics.Raycast(ray, hit)) {
		
		if (hit.collider.name == "fruit" && Input.GetMouseButtonDown(0)) {
			justClicked = hit.collider.name;
			Debug.Log("hit");
			clicked = true; 
			xGui = Camera.main.WorldToScreenPoint (hit.collider.transform.position);;
					
		}
		else if (hit.collider.name != "fruit" && Input.GetMouseButtonDown(0)) {
			clicked = false; 		
		}
	}
	
	

}

function OnGUI () {

	if (clicked == true) {
		if(GUI.Button(Rect(xGui.x, xGui.y, 100, 100), "Do something")) {
			Debug.Log("Clicked");
		}
	}

}

For some weird reason if I don’t move the GUI with xGui it registers the click.
Thanks in advance :slight_smile:
Bernard

Your problem is that when you place your GUI.Button, it is over another game object (without a fruit label). So when you click to activate the button, your Physics.Raycast() code is executed first bringing the button down. You can fix it with something like:

#pragma strict
 
var clicked = false;
var justClicked : String;
var xGui : Vector3;
 
function Update() {
 
    var hit : RaycastHit;
    var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    if (Physics.Raycast(ray, hit)) {
       if (!clicked && hit.collider.name == "fruit" && Input.GetMouseButtonDown(0)) {
         justClicked = hit.collider.name;
         Debug.Log("hit");
         clicked = true; 
         xGui = Camera.main.WorldToScreenPoint (hit.collider.transform.position);;
 
       }
       else if (hit.collider.name != "fruit" && Input.GetMouseButtonDown(0)) {
         clicked = false;        
       }
    }
    else if (Input.GetMouseButtonDown(0)) {
    	clicked = false;
    }
}
 
function OnGUI () {
    if (clicked) {
       if(GUI.Button(Rect(xGui.x, xGui.y, 100, 100), "Do something")) {
         clicked = false;
         Debug.Log("Clicked");
       }
    }
}