【问题标题】:Unity ArgumentException: The Object you want to instantiate is nullUnity ArgumentException:您要实例化的对象为空
【发布时间】:2023-04-04 23:29:01
【问题描述】:

过去三天我一直在处理这个问题。我正在尝试实例化一个 Unity 预制件。我收到以下错误:

ArgumentException: The Object you want to instantiate is null.

我已经更改了 GameObject(Sphere),但我得到了同样的错误。这是我的代码。

public class SEMCell : MonoBehaviour, IAbstractCell{
    SCE[] arrayOfSCEs;
    public SCE scePrefab;
    void IAbstractCell.setMecaModel(AbstractCellMechanicsModel model){
        this.arrayOfSCEs = new SCE[10];
        SCE sce;
        for (int i = 0; i < 10; i++) {
        sce = Instantiate(scePrefab);
        this.arrayOfSCEs[i] = sce;
    }
}

我还将我的 GameObject 链接到 prefab 属性。有人对修复有线索吗?提前致谢。

【问题讨论】:

  • 发布SCE脚本和IAbstractCell接口。还请告诉我们您从哪里拨打setMecaModel; @HimBromBeere scePrefab 是一个公共变量,如屏幕截图所示,它是从编辑器设置/初始化的。
  • 这可能只是一个复制/粘贴问题,但您缺少一个右花括号。

标签: c# unity3d


【解决方案1】:

您的预制件的类型应为 GameObject 而不是 SCE

public SCE scePrefab; 更改为public GameObject scePrefab;

sce = Instantiate(scePrefab);sce = Instantiate(scePrefab).GetComponent&lt;SCE&gt;();

【讨论】:

  • 嗨,Aj_。我按照你说的试过了,但我得到了同样的错误信息。感谢您的建议。
  • 我知道这很明显,但是您是否在编辑器中重新分配了对象?预制件是否还附有SCE 脚​​本?
  • 是的。预制件附有一个 SCE 脚本。
  • 这很有趣。贴一张预制件的截图,同时贴出 SCE 类中的代码。
【解决方案2】:

您发布的代码很好。处理IAbstractCell 的方法是将scePrefab 字段设置为null。

尝试将您的 SCE 字段设为私有并序列化:

[SerializeField] private SCE scePrefab;

这将向您显示编译器错误,您在其他代码中无意中将 scePrefab 设置为 null。否则,您可能会在SEMCell 内的任何位置将其设置为空,例如AwaitStart。尝试在您的代码中搜索scePrefab = null

【讨论】:

    【解决方案3】:

    您发布的代码很好。两种可能:

    处理IAbstractCell 的方法是将scePrefab 字段设置为空。

    尝试将您的 SCE 字段设为私有并序列化:

    [SerializeField] private SCE scePrefab;
    

    这将向您显示编译器错误,您在其他代码中无意中将 scePrefab 设置为 null。否则,您可能会在SEMCell 内的任何位置将其设置为空,例如AwaitStart。尝试在您的代码中搜索scePrefab = null

    或者,您正在销毁附加 SCE 脚本的对象。将该对象设为预制件,然后将预制件拖放到编辑器的插槽中。

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多