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

Unity中如何向非静态类传递GameObject并解决字段初始化报错

问题修复方案

错误原因

报错是两个问题叠加导致的:

  1. Unity 不允许在类的字段定义阶段,直接用另一个非静态成员变量作为参数初始化其他字段。你写的字段初始化逻辑执行时机在 Awake、Start 等生命周期函数之前,此时 Inspector 中挂载的 item 还未完成赋值,无法被读取。
  2. 你当前的 Item 类中,ItemName 和 ShownObj 是构造函数内的局部变量,构造执行结束后就会被回收,无法作为类属性对外访问。

修复步骤

  • 第一步:修正 Item 类的字段定义,把需要对外访问的属性提到类层级
public class Item
{
    // 公共类字段,可对外访问
    public string ItemName;
    public GameObject ShownObj;

    public Item(string name, GameObject obj)
    {
        ItemName = name;
        ShownObj = obj;
    }
}
  • 第二步:把 Item 实例的初始化逻辑移到 Unity 生命周期函数中执行,此时 Inspector 赋值的 item 已经完成加载
public GameObject item;
// 仅声明字段,不直接初始化
public Item testItem;

private void Awake()
{
    // 在生命周期函数内完成实例初始化
    testItem = new Item("test item", item);
}

可选规避方案

如果需要在编辑阶段直接在 Inspector 配置 Item 属性,可以给 Item 类加上序列化特性,不需要手动写代码初始化:

// 加序列化特性后该类可在 Inspector 面板显示配置项
[System.Serializable]
public class Item
{
    public string ItemName;
    public GameObject ShownObj;
}

调用代码仅需声明字段即可,可直接在 Inspector 面板赋值:

public Item testItem;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:15:07