You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity问询:如何用单函数让按钮修改100个布尔值中的任意一个?

Unity单函数批量修改布尔变量方案

需求背景

需要通过100个按钮分别将bool1至bool100设为true,但不想编写100个独立函数;同时要求按钮OnClick面板中显示变量选择输入框,而非默认的布尔复选框。

当前代码存在的问题:

  • 原函数ChangeBool(bool a)采用值传递,修改a只会改变局部变量,无法影响原布尔变量;
  • 值类型参数在OnClick面板默认显示复选框,无法选择对象上的目标变量。

解决方案一:反射+字符串参数(快速实现)

直接修改脚本,通过反射根据变量名修改对应布尔值,同时让OnClick面板显示字符串输入框:

using UnityEngine;
using System.Reflection;

public class BoolController : MonoBehaviour
{
    public bool bool1 = false;
    public bool bool2 = false;
    // ... 依次定义到bool100

    public void SetBoolToTrue(string targetBoolName)
    {
        // 通过反射获取目标字段
        FieldInfo targetField = GetType().GetField(targetBoolName, BindingFlags.Public | BindingFlags.Instance);
        
        if (targetField != null && targetField.FieldType == typeof(bool))
        {
            targetField.SetValue(this, true);
        }
    }
}

使用步骤:

  1. 将该脚本挂载到目标GameObject(如UI管理器对象);
  2. 给按钮绑定OnClick事件,选择BoolController的SetBoolToTrue方法;
  3. 在参数输入框中直接输入目标变量名(如bool1、bool50)即可。

解决方案二:自定义编辑器扩展(可视化选择变量)

如果担心字符串输入出错,可以添加编辑器脚本,实现批量创建按钮并自动绑定事件(需将脚本放在Editor文件夹下):

using UnityEditor;
using UnityEngine;
using System.Reflection;

[CustomEditor(typeof(BoolController))]
public class BoolControllerEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        BoolController controller = (BoolController)target;
        FieldInfo[] boolFields = controller.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
        
        foreach (var field in boolFields)
        {
            if (field.FieldType == typeof(bool))
            {
                if (GUILayout.Button($"快速创建[{field.Name}]按钮"))
                {
                    GameObject newButton = new GameObject(field.Name);
                    newButton.transform.SetParent(controller.transform);
                    var button = newButton.AddComponent<UnityEngine.UI.Button>();
                    button.onClick.AddListener(() => controller.SetBoolToTrue(field.Name));
                }
            }
        }
    }
}

该方案适合批量创建按钮场景,无需手动输入变量名,直接在Inspector面板点击生成绑定好的按钮。


内容的提问来源于stack exchange,提问作者yang xu goh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:40:25