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

如何无需重复编写代码对Unity数组元素调用同一函数?

当然有更简洁的方案!

你现在的写法重复代码太多,不仅写起来麻烦,后续维护也容易出错,下面给你几种Unity中常用的优化方式:

方案1:使用for循环处理批量元素

先单独处理特殊的索引0,再通过循环遍历剩下的元素统一设置状态:

public GameObject[] LockPIButton;

// 在需要执行逻辑的位置调用
LockPIButton[0].SetActive(false);
for (int i = 1; i < LockPIButton.Length; i++)
{
    LockPIButton[i].SetActive(true);
}

方案2:先统一设置再调整特殊项

如果特殊项只有少数几个,这种写法会更直观:

public GameObject[] LockPIButton;

// 先把所有按钮设为true
foreach (var button in LockPIButton)
{
    button.SetActive(true);
}
// 再单独修改需要特殊处理的按钮
LockPIButton[0].SetActive(false);

方案3:封装成可复用方法

如果这类操作在项目中多次出现,把逻辑封装成方法可以大幅提升复用性和可维护性:

public GameObject[] LockPIButton;

/// <summary>
/// 设置按钮激活状态,排除指定索引的按钮
/// </summary>
/// <param name="excludeIndex">需要特殊处理的按钮索引</param>
/// <param name="defaultState">其他按钮的默认激活状态</param>
private void SetButtonActivation(int excludeIndex, bool defaultState)
{
    foreach (var button in LockPIButton)
    {
        button.SetActive(defaultState);
    }
    // 加个索引合法性判断,避免数组越界
    if (excludeIndex >= 0 && excludeIndex < LockPIButton.Length)
    {
        LockPIButton[excludeIndex].SetActive(!defaultState);
    }
}

// 调用时只需一行代码
SetButtonActivation(0, true);

可选方案:用LINQ简化代码(需引用System.Linq)

如果项目允许使用LINQ,可以用更简洁的链式调用完成,但注意小量数据场景下使用,避免不必要的性能开销:

using System.Linq; // 记得在文件顶部添加引用

public GameObject[] LockPIButton;

// 执行逻辑
LockPIButton[0].SetActive(false);
LockPIButton.Skip(1).ToList().ForEach(btn => btn.SetActive(true));

小提醒:一定要确保数组中的每个GameObject都已在Inspector中正确赋值,否则会触发空引用异常哦!

内容的提问来源于stack exchange,提问作者Reagaemane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:07:47