Unity GameObject Array 可以用来模拟 ToggleGroup 之类的行为吗
Can a Unity GameObject Array be used to emulate ToggleGroup like behavior
此应用程序的面板包含已禁用的 "Play" 按钮集合。目标是利用 GameOject 数组来管理这些按钮,以便一次只能启用一个按钮。在 ToggleGroup 中,任何时候都可以强制只选择一个 Toggle 对象。
虽然在 Unity c# 技能方面有所提高,但我很乐意承认在技能方面比中级更初级。因此,非常感谢任何指导。
第一步是测试 ToggleGroups 的使用,但是 Toggles 不能接受与按钮关联的 c# 脚本,当启用时,它会从 AssetBundle 加载预制件。
从 table 移除 ToggleGroup 后,我一直在研究游戏对象数组的使用。几个来源展示了如何以简单的方式创建一个按钮数组,并在 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 数组的上下文中模拟所需的行为。
为了更好地说明我试图调用的行为,此屏幕截图可能有助于解释目标。
Button Behavior Explanation
我很高兴地报告@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);
}
}
如果我对你的理解正确的话,你想像使用单选按钮一样使用你的按钮。
我看到还没有人回答你的问题,所以我会尽快解决。
有更多和更好的方法可以做到这一点,但这个确实有效。
public void DisableAllButtonsExcept(int i) {
foreach(GameObject buttonGameObject in buttonArray) {
buttonGameObject.SetActive(false);
}
buttonArray[i].SetActive(true);
}
之前
之后
Button number 2 is kept because arrays start at 0
更改 onClick 事件中的参数以匹配其在数组中的位置
此应用程序的面板包含已禁用的 "Play" 按钮集合。目标是利用 GameOject 数组来管理这些按钮,以便一次只能启用一个按钮。在 ToggleGroup 中,任何时候都可以强制只选择一个 Toggle 对象。
虽然在 Unity c# 技能方面有所提高,但我很乐意承认在技能方面比中级更初级。因此,非常感谢任何指导。
第一步是测试 ToggleGroups 的使用,但是 Toggles 不能接受与按钮关联的 c# 脚本,当启用时,它会从 AssetBundle 加载预制件。
从 table 移除 ToggleGroup 后,我一直在研究游戏对象数组的使用。几个来源展示了如何以简单的方式创建一个按钮数组,并在 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 数组的上下文中模拟所需的行为。
为了更好地说明我试图调用的行为,此屏幕截图可能有助于解释目标。
Button Behavior Explanation
我很高兴地报告@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);
}
}
如果我对你的理解正确的话,你想像使用单选按钮一样使用你的按钮。 我看到还没有人回答你的问题,所以我会尽快解决。
有更多和更好的方法可以做到这一点,但这个确实有效。
public void DisableAllButtonsExcept(int i) {
foreach(GameObject buttonGameObject in buttonArray) {
buttonGameObject.SetActive(false);
}
buttonArray[i].SetActive(true);
}
之前
之后
Button number 2 is kept because arrays start at 0
更改 onClick 事件中的参数以匹配其在数组中的位置