Guten Morgen liebes Forum,
ich bin gerade dabei ein Lernspiel mit Unity zu programmieren. Dabei soll der Schüler einen Lückentext per Drag and Drop mit entsprechenden Wörtern füllen.
Das Problem ist, dass das Drag and Drop funktioniert, aber die Koordinaten falsch gesetzt werden. Ich erläutere einmal kurz den Aufbau:
Ich habe auf einem Canvas ein leeres GameObjekt, unter welchem alle UI-Elements als Childs enthalten sind. Es gibt normale Text-Elemente, Panels für die Lücken und Panels mit einem Text als Child für die "Lückenfüller". Wenn ich jetzt ein Textbaustein auf eine meiner Panel-Lücken ziehe, wird dieses genau über der Lücke eingefügt und nicht in die Lücke. Wenn ich versuche die Koordinaten der jeweiligen Elemente auszugeben, steht da auch, dass beide dieselben Koordinaten haben. Die Koordinaten die ausgegeben werden stimmen aber auch nicht mit den Koordinaten im Editor überein. Schon wenn ich die Koordinaten der Lücken in der Start Methode ausgeben lasse, sind dort andere Koordinaten, als ich im Editor stehen habe. ganz Merkwürdig
Hier noch der Quelltext von dem Skript:
using UnityEngine;
using UnityEngine.EventSystems;
public class DraggableSlot : MonoBehaviour, IPointerEnterHandler
{
void Start()
{
Debug.Log(gameObject.name + ": " + gameObject.transform.position); //ausgeben der Koordinaten stimmt nicht mit dem Editor überein
}
public void OnPointerEnter(PointerEventData eventData)
{
if(eventData.pointerDrag != null) //Wenn ich etwas über die Lücke ziehe und nicht einfach mit der Maus drüber gehe
{
eventData.pointerDrag.GetComponent<DraggableItem>().stopMoving(); //Sorge dafür, dass das Wort nicht mehr bewegt werden kann
eventData.pointerDrag.transform.position = gameObject.transform.position; //"snappt" das Word auf das Panel
//Die Positionen stimmen im Nachhinein laut den 2 nächsten Zeilen überein.
Debug.Log("Drag: " + eventData.pointerDrag.transform.position);
Debug.Log(gameObject.name + ": " + gameObject.transform.position);
}
}
}
Auch Merkwürdig, dass wenn ich ein Wort zu der Lücke bewege, das Element so verrutscht, dass die obere linke Ecke auf meiner Maus drauf ist.
Die Gleichen Skripte verwende ich ebenfalls vorher, wo ich Bilder auf Panels drauf bewege, das klappt wunderbar. Liegt es an der Kombination von Panel und Text als Child?
Ich hoffe ihr könnt mir weiterhelfen. Viele Grüße
René