首页 > 解决方案 > Unity GameObject Array 可以用来模拟 ToggleGroup 的行为吗

问题描述

这个应用程序有面板,其中包含禁用“播放”的按钮集合。目标是利用 GameOject 数组来管理这些按钮,以便一次只能启用一个按钮。在 ToggleGroup 中,可以在任何时候强制只选择一个 Toggle 对象。

尽管在 Unity c# 技能方面有所增长,但我很容易承认在技能方面比中级更初级。因此,非常感谢任何指导。

第一步是测试 ToggleGroups 的使用,但 Toggles 不能接受与按钮关联的 c# 脚本,启用该脚本时,会从 AssetBundle 加载 Prefab。

一旦 ToggleGroups 被取消,我就一直在研究如何使用 GameObjects 数组。几个来源显示了如何以简单的方式创建按钮数组,并在 Start() 时使按钮处于非活动状态。但我不清楚如何在数组中模拟 ToggleGroup 功能。

这是我的“buttonMgtArray”脚本的基础

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class buttonMgtArray : MonoBehaviour
{

    public GameObject[] button;

    // Start is called before the first frame update
    void Start()
    {
        button[0].SetActive(false);
        button[1].SetActive(false);
        button[2].SetActive(false);
    }

}

目前没有错误,因为我正在尝试确定如何在 GameObject Array 的上下文中模拟所需的行为。

为了更好地说明我试图调用的行为,这个屏幕截图可能有助于解释目标。

按钮行为说明

我很高兴地报告@Stanley 有一个非常优雅的解决方案,可以提供切换仿真。关键是将脚本应用于启用隐藏按钮的按钮,即数组引用。这是最终的代码。非常感谢@Stanley

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class buttonMgtArray : MonoBehaviour
{
    public GameObject[] buttonArray;

    public void DisableAllButtonsExcept(int i)
    {
        foreach (GameObject buttonGameObject in buttonArray)
        {
            buttonGameObject.SetActive(false);
        }
        buttonArray[i].SetActive(true);
    }

}

标签: c#arraysunity3dgameobject

解决方案


如果我理解正确,您想使用单选按钮等按钮。我看到没有人回答你的问题,所以我会快速解决。

有更多的方法和更好的方法,但这个确实有效。

public void DisableAllButtonsExcept(int i) {
    foreach(GameObject buttonGameObject in buttonArray) {
        buttonGameObject.SetActive(false);
    }
    buttonArray[i].SetActive(true);
}

运行代码之前


运行代码后

保留 2 号按钮,因为数组从 0 开始

在此处输入图像描述

更改 onClick 事件中的参数以匹配其在数组中的位置


推荐阅读