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

如何重构按钮函数?用单一函数替代多组仅数组来源不同的按钮方法

代码重构:合并重复的按钮选择函数

针对你这种多个按钮函数仅获取不同数组的情况,有三种简单的重构方案,都能只用一个函数实现需求:

方案1:通过索引传递(适合有序的数组)

先把Manager里分散的数组统一放到一个集合里,再通过索引来获取对应数组:

修改Manager代码

public class Manager : MonoBehaviour
{
    public static Manager singleton;
    
    // 把arrayOne到arrayTen统一存到List中
    public List<GameObject[]> allArrays = new List<GameObject[]>();

    void Awake()
    {
        singleton = this;
        // 按顺序添加所有数组
        allArrays.Add(arrayOne);
        allArrays.Add(arrayTwo);
        allArrays.Add(arrayThree);
        // ... 一直加到arrayTen
    }

    // 保留原来的数组变量,兼容旧逻辑
    public GameObject[] arrayOne;
    public GameObject[] arrayTwo;
    // ...
    public GameObject[] arrayTen;
}

重构按钮函数

public void OnSelect(int arrayIndex)
{
    // 先做边界校验,避免索引越界
    if (arrayIndex < 0 || arrayIndex >= Manager.singleton.allArrays.Count)
    {
        Debug.LogError("无效的数组索引");
        return;
    }

    GameObject[] typeor = Manager.singleton.allArrays[arrayIndex];
    dosomething();
}

之后在Unity Inspector里给每个按钮绑定OnSelect函数,传入对应的索引(比如第一个按钮传0对应arrayOne,第二个传1对应arrayTwo,以此类推)。

方案2:通过字符串标识传递(可读性更强)

如果觉得索引不够直观,可以用字典存数组,通过字符串key来获取:

修改Manager代码

public class Manager : MonoBehaviour
{
    public static Manager singleton;
    
    public Dictionary<string, GameObject[]> arrayDict = new Dictionary<string, GameObject[]>();

    void Awake()
    {
        singleton = this;
        // 给每个数组设置唯一标识
        arrayDict.Add("One", arrayOne);
        arrayDict.Add("Two", arrayTwo);
        // ... 一直加到"Ten"对应arrayTen
    }

    public GameObject[] arrayOne;
    public GameObject[] arrayTwo;
    // ...
    public GameObject[] arrayTen;
}

重构按钮函数

public void OnSelect(string arrayKey)
{
    // 尝试获取数组,避免找不到key报错
    if (!Manager.singleton.arrayDict.TryGetValue(arrayKey, out GameObject[] typeor))
    {
        Debug.LogError($"找不到标识为{arrayKey}的数组");
        return;
    }

    dosomething();
}

绑定按钮时传入对应的字符串(比如第一个按钮传"One")即可。

方案3:直接传递数组引用(最快捷)

这种方式不需要修改Manager的任何代码,直接把数组作为参数传给函数:

重构按钮函数

public void OnSelect(GameObject[] targetArray)
{
    if (targetArray == null)
    {
        Debug.LogError("目标数组为空");
        return;
    }

    GameObject[] typeor = targetArray;
    dosomething();
}

之后在Unity Inspector里给每个按钮绑定OnSelect函数,直接把Manager.singleton的arrayOne、arrayTwo等数组变量拖到参数输入框里就行,一步到位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:05:21