如何一次性判断数组中所有Button是否均处于激活状态?
问题分析
你的原有代码存在两处核心逻辑错误,导致无法得到正确结果:
- 判断时机错误:每遍历一个按钮就直接输出状态,只要碰到第一个可交互按钮就会多次输出「至少一个激活」,碰到第一个不可交互按钮就错误判定所有按钮都未激活,和「判断全部按钮是否激活」的需求不符
- 状态标记缺失:没有用独立变量存储全局判断结果,
break仅能终止循环,无法输出正确的全局状态
修复方案
方案1:原生for循环实现(性能最优,无额外依赖)
先定义全局状态标记,遍历完成后再统一输出结果:
public Button[] bts; public void StateButton() { // 初始假设所有按钮都激活 bool allInteractable = true; for (int i = 0; i < bts.Length; ++i) { // 只要找到一个未激活按钮,修改标记后终止循环 if (!bts[i].interactable) { allInteractable = false; break; } } // 遍历完成后统一输出 if (allInteractable) { Debug.Log("所有按钮都处于激活状态"); } else { Debug.Log("存在未激活的按钮"); } }
方案2:Linq一次性判断(写法最简洁)
引入System.Linq命名空间后,可直接调用All方法实现一次性判断,内部已做提前终止遍历的优化:
using System.Linq; // 需提前引入该命名空间 public Button[] bts; public void StateButton() { // 一次性判断所有按钮是否都满足interactable为true的条件 bool allInteractable = bts.All(button => button.interactable); if (allInteractable) { Debug.Log("所有按钮都处于激活状态"); } else { Debug.Log("存在未激活的按钮"); } }
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

