Jump to content
Unity Insider Forum

OliverK

Members
  • Content Count

    2
  • Joined

  • Last visited

Community Reputation

0 Neutral

About OliverK

  • Rank
    Newbie
  1. Hallo zusammen, nach einem halben Tag frustrierender Recherche konnte ich das Problem zwar nicht erklären (was mich immer noch interessieren würde), aber so lösen, dass ich die Events durch einen PointerDownHandler abfange und selbst verarbeite. Dazu nutze ich das interface IPointerDownHandler in der Klasse und schreibe eine Methode, die darauf "hört" was ich wissen will, nämlich ob jemand den Text (als Label getagt) angeklickt hat: public void OnPointerDown(PointerEventData ereignis) { if (ereignis.pointerCurrentRaycast.gameObject.tag == "Label")) { //Tata! } } Falls einer Lust und Laune hat mich trotzdem aufzuschlauen, warum meine erste, oben präsentierte Variante nicht funktioniert - ich würde mich freuen! Oliver
  2. Guten Morgen zusammen. ich versuche mich gerade bei der Umsetzung eines Handels-Spiels mit der Ausgabe von Waren in Listenform in einer World-Space-Gui. Wie in Bild001 zu erkennen, gebe ich jede Ware in Listenform in einem World-Space-Canvas aus, was optisch meiner Erwartung entspricht. Dabei habe ich aus jeder "Zeile" ein Prefab gemacht. Das Instanziieren funktioniert wie folgt: for (int i = 0; i < handelswaren.Count; i++) { if (filter == null || filter.Contains(handelswaren[i].Gruppe)) { GameObject go = Instantiate(warenObjekt); go.transform.SetParent(docker.transform, false); go.transform.localPosition = new Vector3(0, -60 * i, 0); go.GetComponent<Warenzeile>().WareSetzen(handelswaren[i], menge, preis); handelswarenObjekte.Add(go); warenSkripte.Add(go.GetComponent<Warenzeile>()); } } Probleme entstehen durch die Zeile go.transform.localPosition = new Vector3(0, -60 * i, 0); Das führt dazu, dass das OnPointerDown-Event, welches auf diesem Skript dieses Prefabs liegt, nicht mehr an der richtigen Position getriggert wird. Generell funktioniert das Event, aber um die Zeile zu highlighten muss ich in die Zeile darüber klicken. Das kann ich mir nicht erklären. Ändere ich die Methode wie folgt ab: for (int i = 0; i < handelswaren.Count; i++) { if (filter == null || filter.Contains(handelswaren[i].Gruppe)) { GameObject go = Instantiate(warenObjekt); go.transform.SetParent(docker.transform, false); //go.transform.localPosition = new Vector3(0, -60 * i, 0); go.transform.Translate(Vector3.down * 2, Space.Self); go.GetComponent<Warenzeile>().WareSetzen(handelswaren[i], menge, preis); handelswarenObjekte.Add(go); warenSkripte.Add(go.GetComponent<Warenzeile>()); } } Dann funktioniert das OnPointerDown-Event wie erwartet, allerdings wird die Liste nicht mehr dort angezeigt, wo ich sie gerne hätte, sondern irgendwo im "weiten Raum".... (Siehe Bild002). Zur Vollständigkeit: Hier die Methode, die im EventTrigger aufgerufen wird. public void Auswählen() { hervorhebung.alpha = 1; istAusgewählt = true; } Meine beiden Fragen nun: a.) Warum wird die Liste bei der Verwendung von Translate nicht mehr angezeigt, obwohl der Versatz mit Vector3.down * 2 marginal sein sollte und Space.Self die relative Positionierung zum Parent-Element behalten sollte? b.) Warum wird bi der Nutzung von localPosition die Positionierung zwar korrekt dargestellt, das OnPointerDown-Event aber an der falschen Stelle getriggert? Wie kann ich das verhindern und welche der beiden Arten sollte man generell nehmen? Vielen lieben Dank, Oliver
×
×
  • Create New...