创建核对表/“与Unity3D一起逐步

时间:2017-05-30 13:44:59

标签: c# unity3d

我正在制作一份清单申请表。

操作非常简单。当我第一次点击切换时,它将被禁用。当我点击第二个Toggle时,它将被禁用,依此类推......

像这样:

Checklist Application

现在,我知道了:

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

public class AtivaBotao : MonoBehaviour{

    public Toggle checklits_toggle;
    public bool playersReady;

    public void Start(){   
        checklits_toggle = GameObject.Find("toggle1").GetComponent<Toggle>();
    }

    public void EnableDisable(){       
        if (checklits_toggle.interactable == true){
            checklits_toggle.interactable = false;
        }       
    }
}

此代码适用于唯一的切换,但我想扩展它。我希望将它缩放为3,10,50,100个Toggles!

我怎么做到的?

我想参考自己的Toggle,例如:“this.GetComponent();”。 因为当我点击Toggle时,代码将理解我只点击它。

我尝试使用“this”但没有成功。

恢复:

- &GT;当我首先点击进入谷歌时,它将被禁用 - &GT;当我点击第二个toogle时,它将被禁用 - &GT;等等...

任何人都可以帮助我吗?我如何更新我的代码才能成功?

----------------------------更新------------------ ------
解决
https://forum.unity3d.com/threads/creating-a-checklist-step-by-step.473398/#post-3088399

1 个答案:

答案 0 :(得分:1)

将包含以下代码的脚本附加到每个切换:

private UnityEngine.UI.Toggle toggle;

void Start()
{
    toggle = GetComponentInChildren<UnityEngine.UI.Toggle>();

    if( toggle != null )
         toggle.onValueChanged.addListener( OnToggleValueChanged ) ;
    else
         Debug.LogError("No toggle component in children!", this ) ;
}

private void OnToggleValueChanged( bool isOn )
{
    if( isOn )
    {
        toggle.onValueChanged.removeListener( OnToggleValueChanged ) ;
        toggle.interactable = false;
    }
}

更有效的方法是将切换设置为公开,然后拖动&amp;通过检查器删除切换组件。但如果你有一百个切换,那将是乏味的。