Unity C#:同一脚本挂载多GameObject时bool值修改无效问题解决
问题原因分析
你遇到的核心问题是脚本被挂载在所有按钮上,这意味着每个按钮 GameObject 都持有一个独立的 input_second_num 变量实例:
- 点击操作按钮时,仅修改了该操作按钮自身脚本里的
input_second_num为 true; - 数字按钮上的脚本,它们的
input_second_num仍然是初始的 false,所以输入数字时依然走第一个数字的逻辑。
解决方案
解决思路是让所有按钮共享同一个状态变量,以下是两种常用实现方式:
方式1:使用单例模式统一管理
创建一个全局计算器管理类,集中维护输入状态和计算逻辑,所有按钮的点击事件都调用这个单例类的方法:
public class CalculatorManager : MonoBehaviour { public static CalculatorManager Instance; public Text calculate_label; private bool input_second_num; private long first_num; private long second_num; void Awake() { Instance = this; } public void InputNumber(string btnNumber) { if (calculate_label.text.Length < 15 && !input_second_num) { calculate_label.text += btnNumber; first_num = long.Parse(calculate_label.text); } else if (calculate_label.text.Length < 15 && input_second_num) { calculate_label.text += btnNumber; second_num = long.Parse(calculate_label.text); } } public void Action() { input_second_num = true; calculate_label.text = ""; } }
之后修改按钮的点击事件绑定:
- 数字按钮点击时调用
CalculatorManager.Instance.InputNumber(按钮对应的数字字符串); - 操作按钮点击时调用
CalculatorManager.Instance.Action()。
方式2:将状态变量设为静态
如果不想新增管理类,可以把原脚本里的 input_second_num 改为静态变量,让所有按钮实例共享同一个状态:
private static bool input_second_num; // 改为静态变量 public void Input(){ // 原有逻辑保持不变 } public void Action() { input_second_num = true; calculate_label.text = ""; }
注意:这种方式需要确保所有按钮引用的 calculate_label 是同一个UI文本组件,否则会出现操作按钮清空的文本和数字按钮输入的文本不一致的问题。
内容的提问来源于stack exchange,提问作者Hayk
相关产品推荐
相关产品推荐

