2016-08-10 3 views
0

Ich verwende eventTrigger, um das Ereignis auszulösen, wenn der Zeiger ein Bild eingibt. Grundsätzlich habe ich eine image innerhalb der canvas. Am image fügte ich EventTrigger Komponente, Ereignistyp Pointer Enter hinzufügen, dann Link zu einer Funktion von meinem Skript:Unity3d EventTrigger - auf Zeiger Bild eingeben

public void PointerEnter(){ 
    Debug.Log ("pointer enter"); 
} 

Dies funktioniert gut. Was aber, wenn ich Daten an das Skript weitergeben möchte? Zum Beispiel der Name der image. Im normalen Unity3draycast Szenario können wir dies tun:

if (Physics.Raycast (ray0, out hit)) { 
       Debug.Log (hit.collider.gameObject.name);//<-- get the name 
      } 

Aber wie das tun, wenn wir EventTrigger benutzen?

+0

haben Sie so etwas wie EventSystem.current.currentSelectedGameObject.name – mgear

+0

'versucht EventSystem.current.currentSelectedGameObject.name' zu ​​bekommen' Null Reference'. – sooon

Antwort

0

Gerät IPointerEnterHandler dann überschreiben die OnPointerEnter() Funktion, die PointerEventData Daten als Parameter bereitstellt. Nimm den Namen des GameObject aus diesen Informationen.

Bringen Sie die einfachMouseEnterScript Skript auf Ihren Canvas und es sollten alle Maus auf jedem UI eingeben erkennen.

using UnityEngine.EventSystems; 

public class MouseEnterScript: MonoBehaviour, IPointerEnterHandler 
{ 
    public void OnPointerEnter(PointerEventData eventData) 
    { 
     Debug.Log("Name: " + eventData.pointerCurrentRaycast.gameObject.name); 
     Debug.Log("Tag: " + eventData.pointerCurrentRaycast.gameObject.tag); 
     Debug.Log("GameObject: " + eventData.pointerCurrentRaycast.gameObject); 
    } 
} 
+0

es funktioniert, aber ich habe 4 Bilder nebeneinander, dann funktioniert es nur auf das erste eingegebene Bild, aber rief 'OnPointerEnter' nicht erneut, bis ich von allen Bildern aus, dann erneut eingeben. – sooon

+0

Ich verstehe Ihr aktuelles Problem nicht. Solange die Bilder unterschiedliche GameObjects sind, sollte die Maus an jedem GameObject/Iimage eindringen. Zu Ihrer Information wird 'OnPointerEnter' nur einmal bei jedem Bild aufgerufen. Wenn Sie es zum nächsten Bild verschieben, wird 'OnPointerEnter' erneut aber einmal aufgerufen. Es wird nicht wiederholt aufgerufen. Sie können einen Wert beim ersten Aufruf auf true setzen und dann den Namen des angeklickten Bildes abrufen. Legen Sie den Wert bei der Freigabe auf false fest. http://pastebin.com/CrZLQmTK – Programmer