2016-07-04 7 views
1

Dieses Skript zeigt nur dann eine Nachricht auf der Konsole an, wenn sich das Spielobjekt "hit" nicht in einer Arbeitsfläche befindet. Wenn die Maustaste auf einer Schaltfläche innerhalb einer Zeichenfläche freigegeben wird, debuggt das Skript nichts. Wie kann ich das beheben?RaycastHit Probleme mit Leinwand?

RaycastHit hit; 

void Update() 
{ 
    if(Input.GetMouseButtonUp(0)) 
    { 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
     //RayHit hit; 
     if(Physics.Raycast(ray, out hit)) 
     { 
      // do what you want 
      Debug.Log(hit.collider.gameObject.tag); 
     } 
    } 
} 
+0

Meinst du Leinwand wie für UI? Wenn Sie es falsch gemacht haben, lesen Sie bitte [Anleitung zur Benutzeroberfläche in Unity] (https://unity3d.com/learn/tutorials/topics/user-interface-ui). – Logman

Antwort

1

Sie können wie folgt verwenden, um auf welches UI-Objekt geklickt wird.

if (Input.GetMouseButtonDown(0)) 
    { 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 


     if (EventSystem.current.IsPointerOverGameObject()) 
     { 
      Debug.Log(EventSystem.current.currentSelectedGameObject.GetComponent<Text>().name); 

     } 

EventSystem.current.currentSelectedGameObject.GetComponent().

Objekt geklickt wird wieder einen Namen geben und

EventSystem.current.IsPointerOverGameObject()

überprüft, ob ein UI-Objekt angeklickt ist oder nicht.