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

C# Unity 如何在另一个类中调用结构体定义的对象数组

Unity C# 跨类调用结构体数组解决方案

itemList是ClassA的实例成员,你需要先在ClassB中获取到ClassA的实例引用才能访问,以下是Unity开发中3种常用的实现方式:

  • 方式1:Inspector拖拽赋值(新手友好,无需额外查找逻辑)
public class ClassB : MonoBehaviour
{
    // 公开字段会在Unity Inspector中生成赋值槽
    public ClassA classAInstance;

    private void TestGetItemInfo()
    {
        // 增加判空逻辑避免空引用报错
        if(classAInstance != null && classAInstance.itemList != null)
        {
            // 遍历访问所有元素的属性
            foreach (var item in classAInstance.itemList)
            {
                Debug.Log($"物品名称:{item.name},物品价格:{item.price}");
            }
            // 也可以直接访问指定索引的元素,比如第一个元素的obj属性:
            // GameObject targetObj = classAInstance.itemList[0].obj;
        }
    }
}

代码编写完成后,把挂载了ClassA组件的游戏对象,拖到ClassB组件对应的classAInstance赋值槽即可。

  • 方式2:动态查找获取实例(适合对象动态生成的场景)
public class ClassB : MonoBehaviour
{
    private ClassA classAInstance;

    private void Awake()
    {
        // 查找场景中第一个挂载了ClassA组件的对象
        classAInstance = FindObjectOfType<ClassA>();
    }

    // 后续访问itemList的逻辑和方式1完全一致
}
  • 方式3:ClassA设为单例(适合全局唯一的管理类场景)
    先修改ClassA的代码增加单例逻辑:
public class ClassA : MonoBehaviour
{
    // 全局可访问的静态单例实例
    public static ClassA Instance { get; private set; }

    public struct Item
    {
        public string name;
        public int price;
        public GameObject obj;
    }
    public Item[] itemList;

    private void Awake()
    {
        if (Instance != null && Instance != this)
        {
            Destroy(gameObject);
        }
        else
        {
            Instance = this;
        }
    }
}

之后在ClassB中无需提前存储引用,可直接调用:

public class ClassB : MonoBehaviour
{
    private void TestGetItemInfo()
    {
        if (ClassA.Instance != null && ClassA.Instance.itemList != null)
        {
            Debug.Log(ClassA.Instance.itemList[0].name);
        }
    }
}

注意:Item是值类型结构体,如果你需要在ClassB中修改Item的属性,不能直接修改遍历得到的临时变量,必须通过索引直接修改数组内的元素,比如classAInstance.itemList[0].price = 200;,修改临时变量不会同步到原数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:33:02