Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建操作切换的订单_C#_Unity3d - Fatal编程技术网

C# 如何创建操作切换的订单

C# 如何创建操作切换的订单,c#,unity3d,C#,Unity3d,我正在做一个清单,它必须按照时间顺序 换句话说 检查表必须能够一次单击一个步骤。所有检查表都被禁用(Unity Inferface中的interactialbe:false),并且只有第一个元素处于活动状态(interactiable:on,Unity接口也是)。当我单击第一个切换时,它被禁用,下一个元素被激活(interactiable:false),如下所示: 开始: ->步骤1(活动) ->步骤2(解除激活) ->步骤3(解除激活) 单击(选中)步骤1. ->步骤1(解除激活) ->步骤2

我正在做一个清单,它必须按照时间顺序

换句话说

检查表必须能够一次单击一个步骤。所有检查表都被禁用(Unity Inferface中的interactialbe:false),并且只有第一个元素处于活动状态(interactiable:on,Unity接口也是)。当我单击第一个切换时,它被禁用,下一个元素被激活(interactiable:false),如下所示:

开始: ->步骤1(活动)
->步骤2(解除激活)
->步骤3(解除激活)

单击(选中)步骤1.

->步骤1(解除激活)
->步骤2(活动)
->步骤3(解除激活)

单击(选中)第2步。

->步骤1(解除激活)
->步骤2(停用)
->步骤3(活动)

等等

我找到了像GetComponentChildren、GetComponentnParent、GetComponents、GetComponentsInChildren、GetComponentsInParent这样的函数。我尝试在代码中插入,但没有成功

我认为有两种方式可以实现这一目标:

1-如果单击切换。。。“获取下一个元素->活动元素”

2-创建一个数组以获取my元素中所有切换的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;
        }               
    } 
}
使用UnityEngine;
使用系统集合;
使用UnityEngine.UI;
使用UnityEngine.EventSystems;
公共阶级:单一行为{
公共切换开关;
公开作废开始(){
checklist_toggle=this.GetComponent();
}
公共作废启用禁用(切换检查表\u切换){
if(可交互的检查表切换){
检查表\u toggle.interactiable=false;
}               
} 
}
实际上,它在单击时会激活和取消激活切换。正如我所说,我尝试插入不同的函数,但没有成功


最后,最好的方法是什么?以及如何更新代码以使其生效?

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

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 ) ;
}
private UnityEngine.UI.Toggle[]切换;
void Start()
{
toggles=GetComponentsInChildren();
如果(切换长度>0)
{
对于(int i=0;i
国际单项体育联合会
{
切换[closureIndex]。可交互=false;
if(closureIndex<切换.长度-1)
切换[closureIndex+1]。可交互=真;
}
) ;
}
切换[0]。可交互=真;
}
其他的
LogError(“子项中没有切换组件!”,这是);
}

在每个复选框中添加属性,如neighbrid,即下一个按钮的ID。因此,当单击某个复选框时,访问Neighbrid并激活该neighbor复选框并禁用当前复选框您一次只想选择一个切换?@DanHunex Yes。我仔细地想了想,但我很难将它转化为现实code@Programmer对一次一个,按顺序。1, 2, 3, 4... 就像在这个例子中,我想这就是OP想要解决的问题!这正是我想做的。谢谢!