2017-11-13 1 views
-1

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?

+0

Verwenden Sie die Unity-Benutzeroberfläche oder möchten Sie OnMouseDown-Nachrichten verwenden? – High

+0

OnMouseDown-Nachrichten –

+1

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 –

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. :)

  1. 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); 
    } 
} 
  1. erstellen und Gameobject fügen Sie ButtonCountainer hinzu.
  2. jetzt Sprites als Kind hinzufügen.
  3. Ende. wir essen zu Mittag.
Verwandte Themen