我制作一份清单,必须遵循时间顺序。
换句话说,
核对清单必须能够一次点击一步。所有清单都被禁用(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;
}
}
}
实际上,它在点击时激活并取消激活切换。我怎么说,我尝试插入不同的功能,但是白色成功。
最后,最好的方法是什么?我如何更新我的代码来实现它呢?
答案 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 ) ;
}