如何创建订单以操作切换

时间:2017-05-31 16:32:05

标签: c# unity3d

我制作一份清单,必须遵循时间顺序。

换句话说,

核对清单必须能够一次点击一步。所有清单都被禁用(Unity Inferface中的interactalbe:false),并且只有第一个元素处于活动状态(可交互:启用,Unity接口)。当我点击第一个Toggle时,它被禁用,下一个元素被激活(interactable:false),如下所示:

开始: - >第1步(主动)
- >第2步(去活动)
- >第3步(去活动)

点击(选中)步骤1 ...

- >第1步(去活动)
- >第2步(主动)
- >第3步(去活动)

点击(选中)第2步...

- >第1步(去活动)
- >第2步(deactive)
- >第3步(主动)

依旧......

我找到了GetComponentInChildren,GetComponentInParent,GetComponents,GetComponentsInChildren,GetComponentsInParent等函数。我尝试在我的代码中插入但没有成功。

我认为有两种方式可以做到:

1 - 如果单击切换按钮..."获取下一个元素 - >活跃元素"

2 - 创建一个数组以获取我的元素中所有切换的ID,并且:如果切换是cliked ...获取ID的ID和ID中的+1。

这是我的代码:

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;
        }               
    } 
}

实际上,它在点击时激活并取消激活切换。我怎么说,我尝试插入不同的功能,但是白色成功。

最后,最好的方法是什么?我如何更新我的代码来实现它呢?

1 个答案:

答案 0 :(得分:2)

创建一个脚本并将其附加到所有切换的父级:

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 ) ;
}