2016-07-23 18 views
1

Ich mache ein Benutzer interaktives Auswahlsystem mit Einheit wo gibt es Schaltflächen für verschiedene Produkte und der Produktname soll in einer systematischen Reihenfolge untereinander angezeigt werden, wenn der Benutzer klickt auf dem Produkt. Ich habe die OnGUI() -Funktion für die Anzeige des Produktnamens verwendet. Aber bei meiner Ausgabe werden alle Namen super übereinander gedruckt.verschiedene Texte auf verschiedenen Tastenklicks in Einheit anzeigen

Ich gebunden erhöhen die Y-Positionen der GUI.label mit statischen Variable i (zunächst auf 0 definiert). Ich habe versucht, den Wert von i bei jedem Klick zu erhöhen und es an die Y-Position der GUI.label hinzuzufügen. Wenn ich jetzt auf die zweite Schaltfläche klicke, werden sowohl die erste Schaltfläche als auch die zweite Schaltfläche auf die neuen Koordinaten verschoben.

using UnityEngine; 
using UnityEngine.EventSystems;// 1 
using UnityEngine.UI; 

``public class Example : MonoBehaviour, IPointerClickHandler // 2 

// ... And many more available! 
{ 
    SpriteRenderer sprite; 
    Color target = Color.red; 
    int a=200,b=100; 

    public GUIText textObject; 
    public bool showGUI; 
    public int s=0; 



    public static int i=0; 



    void Awake() 
    { 
     sprite = GetComponent<SpriteRenderer>(); 
    } 

    void test() 
    { 
     i = i + 20; 

     OnGUI(); 
    } 

    void Update() 
    { 
     if (sprite) 
      sprite.color = Vector4.MoveTowards(sprite.color, target, Time.deltaTime * 10); 
    } 

    public void OnPointerClick(PointerEventData eventData) // 3 
    { 
     showGUI = true; 
     Debug.Log(gameObject.name); 
     target = Color.blue; 
     PlayerPrefs.SetString ("Display", gameObject.name); 
     s = 1; 
     test(); 


    } 

    void OnGUI() 
    { 

     if (s == 1) { 

      GUI.color = Color.red; 
      GUIStyle myStyle = new GUIStyle (GUI.skin.GetStyle ("label")); 
      myStyle.fontSize = 20; 

      GUI.Label (new Rect (a, b, 100f, 10f), ""); 

      if (showGUI) { 

       //GUI.Box (new Rect (a,b+i, 300f, 100f), ""); 
       GUI.Label (new Rect (a, b + i, 300f, 100f), gameObject.name, myStyle); 

       s = 0; 
      } 


     } 


    } 



} 

Antwort

2

Sie not die OnGUI()-Funktion verwenden. Es ist als ein Werkzeug für Programmierer gedacht und nicht als eine Benutzeroberfläche, die in Ihrem Spiel ausgeführt wird. . Hier ist ein einfacher Button- und Button-Klick-Detektor in Unity.

Angenommen, Sie müssen zwei Tasten, das folgende Beispiel zeigt, wie das tun:

Erstellen Sie zunächst zwei Buttons:

Gameobject ->UI ->Knopf. Geben Sie den UnityEngine.UI; Namespace mit using UnityEngine.UI; ein.

Deklarieren Sie die Buttons Variablen:

public Button button1; 
public Button button2; 

eine Callback-Funktion erstellen, die aufgerufen wird, wenn das jeder Button geklickt wird:

private void buttonCallBack(Button buttonPressed) 
{ 
    if (buttonPressed == button1) 
    { 
     //Your code for button 1 
    } 

    if (buttonPressed == button2) 
    { 
     //Your code for button 2 
    } 
} 

Schließen Sie den Buttons zu dieser Callback-Funktion (Register-Taste Ereignisse) wenn Skript aktiviert ist.

void OnEnable() 
{ 
    //Register Button Events 
    button1.onClick.AddListener(() => buttonCallBack(button1)); 
    button2.onClick.AddListener(() => buttonCallBack(button2)); 
} 

Trennen Sie die Buttons zu von dieser Callback-Funktion (Un-register Button-Ereignisse), wenn Script deaktiviert ist.

void OnDisable() 
{ 
    //Un-Register Button Events 
    button1.onClick.RemoveAllListeners(); 
    button2.onClick.RemoveAllListeners(); 
} 

Um den Text zu ändern, um den Knopf angebracht:

button1.GetComponentInChildren<Text>().text = "Hello1"; 
button2.GetComponentInChildren<Text>().text = "Hello2"; 

Sie GetComponentInChildren verwenden, da die erstellt Text ein Kind jeder Taste gemacht werden soll. Ich glaube nicht, dass ich das leichter verstehen kann. Here ist ein Lernprogramm für Unity UI.

+0

vielen dank! Werde das sicherlich ausprobieren –