2017-05-31 5 views
-1

Ich mache eine Checkliste und muss einer chronologischen Reihenfolge folgen.Wie erstelle ich einen Auftrag, um eine Toggle zu bedienen

In anderen Worten muss

Die Checkliste der Lage sein, einen Schritt einer Zeit zu klicken. Alle Checklisten sind deaktiviert (interactalbe: false in Unity Inferface), und nur das erste Element ist aktiv (interaktiv: on, auch Unity Interface). Wenn ich auf dem ersten Toggle klicken, dann ist es deaktiviert und das nächste Element aktiviert ist (interagierbare: false), wie folgt aus:

Start: -> Schritt 1 (aktiv)
-> Schritt 2 (desactive)
-> Schritt 3 (desactive)

Schritt 1 (markiert) ... geklickt wird

-> Schritt 1 (desactive)
-> Schritt 2 (aktiv)
-> Schritt 3 (desactive)

Schritt 2 wird (markiert) angeklickt ...

-> Schritt 1 (desactive)
-> Schritt 2 (deaktiv)
-> Schritt 3 (aktiv)

und so weiter ...

ich fand Funktionen wie GetComponentInChildren, GetComponentInParent, GetComponents, GetComponen tsInChildren, GetComponentsInParent. Ich habe versucht, in meinen Code einzufügen, aber ohne Erfolg.

Ich denke, in zwei Arten gemacht:

1 - Wenn der Knebel geklickt wird ... "erhalten die nächste element-> aktives Element"

2 - Erstellen Sie ein Array-ID zu bekommen, alles schaltet in meinem Element um und: Wenn der Schalter geklickt ist ... Erhalte die ID davon und +1 in der ID.

Hier ist mein Code:

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
using UnityEngine.EventSystems; 

public class AtivaBotao : MonoBehaviour { 
    public Toggle checklist_toggle; 

    public void Start(){ 
     checklist_toggle = this.GetComponent<Toggle>(); 
    } 

    public void EnableDisable(Toggle checklist_toggle){ 
     if (checklist_toggle.interactable){ 
      checklist_toggle.interactable = false; 
     }    
    } 
} 

Eigentlich ist es aktiv und desactive den Knebel, wenn es angeklickt wird. Wie ich schon sagte, habe ich versucht, verschiedene Funktionen einzufügen, aber ohne Erfolg.

Am Ende, was ist die beste Methode? Und wie kann ich meinen Code aktualisieren, um es zu machen?

+0

hinzufügen Eigenschaft in jedem Kästchen, NeighborID, so etwas wie das, was die ID der nächsten Taste ist. Wenn Sie also auf ein Kontrollkästchen klicken, rufen Sie die Nachbarschafts-ID auf und aktivieren Sie dieses Kontrollkästchen, und deaktivieren Sie die aktuelle Option. –

+0

Sie möchten nur jeweils einen Wechsel auswählen? – Programmer

+0

@DanHunex Ja. Exatclly ich dachte, aber ich habe Probleme, es in Code – Zkk

Antwort

2

ein Skript erstellen und an die Eltern aller Ihrer schaltet anhängen:

private UnityEngine.UI.Toggle[] toggles; 

void Start() 
{ 
    toggles = GetComponentsInChildren<UnityEngine.UI.Toggle>(); 

    if(toggles.Length > 0) 
    { 
     for(int i = 0 ; i < toggles.Length ; ++i) 
     { 
      int closureIndex = i ; 
      toggles[closureIndex].interactable = false ; 
      toggles[closureIndex].onValueChanged.addListener((isOn) => 
       if(isOn) 
       { 
        toggles[closureIndex].interactable = false; 
        if(closureIndex < toggles.Length - 1) 
         toggles[closureIndex + 1].interactable = true ; 
       } 
      ) ; 
     } 
     toggles[0].interactable = true ; 
    } 
    else 
     Debug.LogError("No toggle component in children!", this) ; 
} 
+0

Ich denke, das ist, was OP sucht – Programmer

+0

Gelöst! Genau das wollte ich machen. Danke vielmals! – Zkk

Verwandte Themen