2016-07-23 1 views
0

Ich kann feststellen, ob die Maus irgendein UI-Element durch EventSystem.current.IsPointerOverGameObject() schwebt. Wie kann ich wissen, welche GameObjest es genau ist?Wie bekomme ich ein UI-Element, über welchen Zeiger es in Unity3D geht?

Ich habe versucht:

if (EventSystem.current.IsPointerOverGameObject()) 
     foreach (GameObject go in new PointerEventData(EventSystem.current).hovered) 
      print(go.name); 

Aber in jedem Moment ist new PointerEventData(EventSystem.current).hovered leer ob ich schweben oder nicht.

kann ich erforderliche Informationen mit print(EventSystem.current); sehen:

<b>Selected:</b> 


<b>Pointer Input Module of type: </b>UnityEngine.EventSystems.StandaloneInputModule 
<B>Pointer:</b> -1 
<b>Position</b>: (746.0, 535.0) 
<b>delta</b>: (60.0, -44.0) 
<b>eligibleForClick</b>: False 
<b>pointerEnter</b>: cursorInfoText (UnityEngine.GameObject) 
<b>pointerPress</b>: 
<b>lastPointerPress</b>: 
<b>pointerDrag</b>: 
<b>Use Drag Threshold</b>: True 
<b>Current Rayast:</b> 
Name: cursorInfoText (UnityEngine.GameObject) 
module: Name: Canvas (UnityEngine.GameObject) 
eventCamera: 
sortOrderPriority: 0 
renderOrderPriority: 0 
module camera: null 
distance: 0 
index: 0 
depth: 1 
worldNormal: (0.0, 0.0, 0.0) 
worldPosition: (0.0, 0.0, 0.0) 
screenPosition: (746.0, 535.0) 
module.sortOrderPriority: 0 
module.renderOrderPriority: 0 
sortingLayer: 0 
sortingOrder: 0 
<b>Press Rayast:</b> 


<B>Pointer:</b> -2 
<b>Position</b>: (746.0, 535.0) 
<b>delta</b>: (60.0, -44.0) 
<b>eligibleForClick</b>: False 
<b>pointerEnter</b>: cursorInfoText (UnityEngine.GameObject) 
<b>pointerPress</b>: 
<b>lastPointerPress</b>: 
<b>pointerDrag</b>: 
<b>Use Drag Threshold</b>: True 
<b>Current Rayast:</b> 
Name: cursorInfoText (UnityEngine.GameObject) 
module: Name: Canvas (UnityEngine.GameObject) 
eventCamera: 
sortOrderPriority: 0 
renderOrderPriority: 0 
module camera: null 
distance: 0 
index: 0 
depth: 1 
worldNormal: (0.0, 0.0, 0.0) 
worldPosition: (0.0, 0.0, 0.0) 
screenPosition: (746.0, 535.0) 
module.sortOrderPriority: 0 
module.renderOrderPriority: 0 
sortingLayer: 0 
sortingOrder: 0 
<b>Press Rayast:</b> 


<B>Pointer:</b> -3 
<b>Position</b>: (746.0, 535.0) 
<b>delta</b>: (60.0, -44.0) 
<b>eligibleForClick</b>: False 
<b>pointerEnter</b>: cursorInfoText (UnityEngine.GameObject) 
<b>pointerPress</b>: 
<b>lastPointerPress</b>: 
<b>pointerDrag</b>: 
<b>Use Drag Threshold</b>: True 
<b>Current Rayast:</b> 
Name: cursorInfoText (UnityEngine.GameObject) 
module: Name: Canvas (UnityEngine.GameObject) 
eventCamera: 
sortOrderPriority: 0 
renderOrderPriority: 0 
module camera: null 
distance: 0 
index: 0 
depth: 1 
worldNormal: (0.0, 0.0, 0.0) 
worldPosition: (0.0, 0.0, 0.0) 
screenPosition: (746.0, 535.0) 
module.sortOrderPriority: 0 
module.renderOrderPriority: 0 
sortingLayer: 0 
sortingOrder: 0 
<b>Press Rayast:</b> 

Durch die Art und Weise, warum gibt es 3 Zeiger (-1, -2, -3) und was bedeutet das? Ich habe irgendwo in der Dokumentation gelesen, pointer -1 ist die linke Maustaste, aber ich klicke nichts, also ist das komisch.

Ich kann <b>pointerEnter</b>: cursorInfoText (UnityEngine.GameObject) und Name: cursorInfoText (UnityEngine.GameObject) sehen, was ich brauche. Aber wie extrahiere ich diese Informationen? Ich habe versucht, print(new PointerEventData(EventSystem.current).pointerEnter);, aber es ist Null ist egal ich gebe oder schweben. Und ich sehe keine anderen geeigneten Methoden oder Eigenschaften in Dokumenten, obwohl ich sehen kann, dass Informationen gespeichert werden. Was habe ich verpasst?

Mein Ziel ist es zu erkennen, ob die Maus mit einigen Bedingungen schwebt UI-Element (ignorieren kleine Anzahl von UI-Elementen (wahrscheinlich von Tag) und nicht den Rest ignorieren (die meisten Elemente)), so muss ich GameObject bekommen selbst. Und wenn die Maus nicht über das UI-Element schwebt (mit Ausnahme einiger weniger), hat das Skript nichts mit UI-Dingen zu tun. Aber nicht ignorieren, wenn es einen dieser wenigen und einen der anderen zur gleichen Zeit schwebt.

Antwort

1

Aber woher weiß ich, welches GameObjest es genau ist?

Sie suchen nach EventSystem.current.currentSelectedGameObject.

So:

if (EventSystem.current.IsPointerOverGameObject()) 
{ 
    Debug.Log("Mouse Over: " + EventSystem.current.currentSelectedGameObject.name); 
} 

prüfen nach Tag:

if (EventSystem.current.IsPointerOverGameObject() && EventSystem.current.currentSelectedGameObject.CompareTag("yourTagName")) 
{ 

} 

Oder mit IPointerEnterHandler und eventData.pointerCurrentRaycast:

using UnityEngine.EventSystems; 
public class Test : MonoBehaviour, IPointerEnterHandler 
{ 

    public void OnPointerEnter(PointerEventData eventData) 
    { 
     if (eventData.pointerCurrentRaycast.gameObject != null) 
     { 
      Debug.Log("Mouse Over: " + eventData.pointerCurrentRaycast.gameObject.name); 
     } 
    } 
} 
+0

ich vergessen habe zu erwähnen ich habe versucht ' EventSystem.current.currentSelectedGameObject "auch und es ist gebe immer auch 'Null' zurück. Was mache ich falsch? – Necronomicron

+0

@Neconomicron Das ist in Ordnung. Ich habe eine Antwort mit 2 Lösungen gegeben. Warum n nicht die zweite Methode verwenden? Das ist eigentlich der Weg, dies zu tun. Ich spreche über die Antwort mit "IPointerEnterHandler". – Programmer

+0

Ich komme gerade zum Kern der 2. Lösung, aber ich frage mich, warum gibt es 'Null' überall im ersten? – Necronomicron

Verwandte Themen