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

Unity3D项目中arthursButtonsDescription数组赋值异常问题求助

问题根因

你这里的问题核心是引用类型赋值逻辑错误:
Equipment是继承自MonoBehaviour的类,属于引用类型,你在SaveLoadStarter.LoadClick()方法里只调用了一次gameObject.AddComponent<Equipment>(),全程只创建了1个Equipment实例,后续两次修改itemToEquip的name和equipSlot属性、存入arthursButtonsDescription数组的都是同一个实例的引用,自然你改第二次属性的时候,数组里两个位置指向的同一个对象的属性都会同步变化。

修复方案

你需要在第二次赋值前重新创建一个新的Equipment实例,修改代码如下:

public class SaveLoadStarter : MonoBehaviour
{
    public void LoadClick()
    {
        // 第一个装备实例:头
        Equipment itemToEquip = gameObject.AddComponent<Equipment>();
        itemToEquip.name = "0";
        itemToEquip.equipSlot = EquipmentSlot.Head;
        Debug.Log("iTE0: " + itemToEquip.name);
        EquipmentManager.instance.Equip(itemToEquip);

        // 新增:创建第二个装备实例:盾
        Equipment itemToEquip2 = gameObject.AddComponent<Equipment>();
        itemToEquip2.name = "4";
        itemToEquip2.equipSlot = EquipmentSlot.Shield;
        Debug.Log("iTE4: " + itemToEquip2.name);
        EquipmentManager.instance.Equip(itemToEquip2);
    }
}

额外优化建议

  • 不要反复动态AddComponent创建装备数据,如果你只需要存装备属性不需要挂载到物体上执行逻辑,建议把Equipment改成普通的可序列化类(去掉继承MonoBehaviour),这样创建实例用new Equipment()即可,性能更好也更符合数据类的使用规范。
  • EquipmentManager.Equip()方法里不要每次调用都执行FindObjectOfType找ArthurInventory,建议在Awake里只找一次缓存即可,减少不必要的性能消耗。

内容的提问来源于stack exchange,提问作者Mr. Koala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:03