EventSystem.current.IsPointerOverGameObject()
überprüft, ob die Maus über ein beliebiges UI-Element geklickt wurde. Wie kann ich überprüfen, ob die Maus auf ein UI-Element mit einem spezifischen Namen oder Tag geklickt hat?Prüfen, ob die Maus auf ein UI-Element mit einem bestimmten Namen oder Tag geklickt hat?
Mit dem folgenden Skript wird ein GameObject auf Input.GetMouseButtonUp(0)
verschoben. Wenn ich auf ein UI-Element wie "Text" klicke, wird die Move-Funktion nicht ausgelöst, wodurch das GameObject nicht bewegt wird. Das ist gut. Das Problem hierbei ist, ich kann nicht welche UI-Elemente in Betracht gezogen werden. Was ich zum Beispiel möchte: Wenn der Benutzer auf ein UI-Element mit dem Tag "Bewegungsskript nicht blockieren" klickt, beginnt die Bewegung. Klickt der Benutzer jedoch auf ein UI-Element mit dem Tag "Blockbewegungsskript", wird die Bewegung nicht aufgerufen.
Schau, mein Bildschirm ist voll von "unsichtbaren" UI-Elementen (Farbe A = 0). Sie sind unsichtbar, sodass ich sie aktivieren und deaktivieren kann, wenn ich möchte. Das Problem: Wenn ich den Bildschirm berühre oder klicke, wird mein Moving Code nicht aufgerufen, weil ich auf ein unsichtbares UI-Element geklickt habe. Deshalb möchte ich überprüfen, ob die Maus über bestimmte UI-Elemente (die sichtbaren) geklickt wurde. Hier werden die sichtbaren UI-Elemente button1
und genannt.
Was die Tasten tun, wenn darauf geklickt:
using UnityEngine;
using UnityEngine.UI;
public class ButtonChecker: MonoBehaviour
{
public Button button1;
public Button button2;
void OnEnable()
{
//Register Button Events
button1.onClick.AddListener(() => buttonCallBack(button1));
button2.onClick.AddListener(() => buttonCallBack(button2));
}
private void buttonCallBack(Button buttonPressed)
{
if (buttonPressed == button1)
{
Application.LoadLevel ("Example Scene 1");w
}
if (buttonPressed == button2)
{
Application.LoadLevel ("Example Scene 2");
}
}
void OnDisable()
{
//Un-Register Button Events
button1.onClick.RemoveAllListeners();
button2.onClick.RemoveAllListeners();
}
}
Bewegungscode (während der Überprüfung, ob Klick auf UI-Elemente):
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class MovementCode : MonoBehaviour {
bool validInput = true;
void Update()
{
validateInput();
if (Input.GetMouseButtonUp (0) && validInput)
{
transform.position += new Vector3 (0.08f, 0, 0);
}
if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Ended && validInput)
{
transform.position += new Vector3 (0.08f, 0, 0);
}
}
void validateInput()
{
if (Input.GetMouseButtonDown(0))
{
if (EventSystem.current.IsPointerOverGameObject())
validInput = false;
else
validInput = true;
}
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
validInput = false;
else
validInput = true;
}
}
}
Ich habe Ihr Problem überhaupt nicht verstanden, und das ist, weil Sie Dinge verwirren. Was Sie versuchen zu tun ist leicht gelöst, wenn Sie die Schaltfläche UI verwenden. Und denken Sie daran, dass Sie Ebenen verwenden können, um mit der Maus zu kollidieren oder nicht (beim Klicken), damit Sie den größten Teil des Klicks lösen. – matiaslauriti
@ P0lT10n Einfache Version: Wie kann ich überprüfen, ob die Maus auf ein UI-Element mit einem bestimmten Tag geklickt hat? – Dake
Dies ist für die Einheit 4.6, aber das "Denken" ist das gleiche: [Siehe dies] (https://unity3d.com/es/learn/tutorials/topics/user-interface-ui/ui-events-and-event- Auslöser) – matiaslauriti