Ich machte und leere Spielobjekt, das ich für einen Behälter für meine Sprites verwenden, die meine Tasten sind. Ich möchte wissen, welches Sprite ich gerade mit einem Skript auf meinem Container angeklickt habe, damit ich später weitere Schaltflächen hinzufügen kann und den Code nicht ändern muss.Einheit | Welches Kind Sprite habe ich geklickt?
-1
A
Antwort
0
Viele Wege können das tun. meine Lösung:
i erstellen Button
Script, um die OnMouseDown
Handhabung, aber ich hinzufügen, es nicht auf dem Kind, weil ich es mit dem Container-Code hinzufügen.
dann in ButtonContainer
Skript bekommen alle Kind und fügen Sie BoxCollider2D und Button zum Thema und wichtiger Teil ist das Hinzufügen Ihrer Listener (DoSomthing-Methode).
Fertig. :)
- ein Skript Buttons erstellen:
using UnityEngine;
using UnityEngine.Events;
public class Button : MonoBehaviour
{
private SpriteRenderer sr;
public MouseDownEvent mouseDown = new MouseDownEvent();
void Awake(){
sr = GetComponent<SpriteRenderer>();
}
void OnMouseDown(){
mouseDown.Invoke(sr);
}
}
[System.Serializable]
public class MouseDownEvent : UnityEvent<SpriteRenderer> { }
2.Create ein Skript für ButtonCountainer
using UnityEngine;
public class ButtonContainer : MonoBehaviour
{
private void Awake()
{
// get all child
var childs = GetComponentsInChildren<Transform>();
// add button class to them
for (int i = 0; i < childs.Length; i++) {
// child element
var go = childs[i].gameObject;
// add boxcolliser2d. (child must have collider to invoke the OnMouseDown Message)
go.AddComponent<BoxCollider2D>();
// add button script to them
var b = go.AddComponent<Button>();
// do everything you want with this event
b.mouseDown.AddListener(DoSomthing);
}
}
// every time this gameObject invoke sr = sprite renderer of the that gameObject
private void DoSomthing(SpriteRenderer sr)
{
Debug.Log(sr.name);
}
}
- erstellen und Gameobject fügen Sie ButtonCountainer hinzu.
- jetzt Sprites als Kind hinzufügen.
- Ende. wir essen zu Mittag.
Verwandte Themen
- 1. Ein Sprite in Einheit skalieren
- 2. Einheit Vernetzung ändern gameobject Sprite
- 3. Einheit - Netz von Sprite Eckpunkten
- 4. Einheit C# Animation Eigenschaft ändern sprite
- 5. Einheit Korrekt Sprite/Textur Breite Höhe
- 6. Sprite Textur nicht die Einheit zu wiederholen
- 7. Wie kann ich feststellen, auf welches Kontrollkästchen geklickt wurde?
- 8. , wie zu wissen, welches Bild geklickt wurde
- 9. Auf welches Segment einer Polylinie wurde geklickt?
- 10. Woher weiß ich, welches Objekt ich vom Stapel genommen habe?
- 11. Wie kann ich feststellen, welches iOS SDK ich habe?
- 12. wenn ich Ereignis geklickt habe, möchte ich die Textfarbe ändern
- 13. AS3 zieht größer Sprite als ich gesetzt habe (Padding/Marge?)
- 14. Reattach modifizierte Einheit mit verschachtelten Kind Einheiten
- 15. Warum habe ich einen Fehler, nachdem ich oft auf meine Bildschaltfläche geklickt habe
- 16. , welches Layout ich habe für den Screenshot unten verwenden
- 17. Ist das MVC? Welches Designmuster habe ich benutzt?
- 18. Elternteil erhalten, wenn darauf geklickt Kind Highcharts
- 19. Ich habe 200 Fehler in Xcode-Projekt in Einheit gemacht
- 20. OneSignal - kann die Aktivität nicht öffnen, nachdem ich geklickt habe
- 21. EditText erscheint nur, wenn ich auf ImageButton geklickt habe
- 22. Laravel alle Beiträge löschen, außer dass ich geklickt habe
- 23. Inhalt erscheint nur auf der Seite, wenn ich geklickt habe
- 24. Meine RecyclerView-Elemente verwechseln die Position, als ich geklickt habe?
- 25. Seite friert ein, nachdem ich auf einen Linkbutton geklickt habe
- 26. Einheit: 2D Schatten Sprite auf ein 3D-Spiel
- 27. App stürzt ab, nachdem ich das Gerät gedreht habe und auf das Menü geklickt habe
- 28. Ich habe drei Tabellen erstellt, die Eltern, Kind enthält, markiert
- 29. Ich habe drei Tabellen, die Eltern, Kind, Marken enthält
- 30. Wie erkennt man, auf welches einheitliche Raster geklickt wurde?
Verwenden Sie die Unity-Benutzeroberfläche oder möchten Sie OnMouseDown-Nachrichten verwenden? – High
OnMouseDown-Nachrichten –
Wenn dies eine Benutzeroberfläche ist, empfiehlt es sich, stattdessen uGUI zu verwenden. Was Sie tun, ist für eine Benutzeroberfläche nicht korrekt. Siehe https://docs.unity3d.com/Manual/UISystem.html –