首页 > 解决方案 > 初始化对象在 OnAwake 和 OnEnable() 之间变为空

问题描述

我有一个奇怪的问题,我不明白导致null参考。

当我尝试在其中初始化一个对象OnAwake()然后在其中使用它时,OnEnable()现在是null.

NULLREFRENCEEXCEPTION:对象引用未设置为对象 tempMovement.onEnable() 的实例

这是代码:

(tempMovement.cs)

public class tempMovement : MonoBehaviour
{
   
    temp testing1;

    void onAwake()
    {
        testing1 = new temp();
        testing1.printx();  <-- this works
    }
    private void OnEnable()
    {
        testing1.printx(); <-- doesn't work
    }
}

(温度.cs)

public class temp 
{

    int x = 5;

    public void printx()
    {
        Debug.LogError(x);
    }
    public temp()
    {
        Debug.LogError("temp init");
    }

}

标签: c#unity3d

解决方案


好吧,我想这与您的 MonoBehavior 对象尚未创建这一事实有关。看一下顺序:事件函数的执行顺序

Awake:这个函数总是在任何 Start 函数之前调用,并且在一个 prefab 被实例化之后。(如果游戏对象在启动期间处于非活动状态,则在激活之前不会调用 Awake。)

OnEnable:(仅在对象处于活动状态时调用):在对象启用后立即调用此函数。这会在创建 MonoBehaviour 实例时发生,例如在加载关卡或实例化带有脚本组件的 GameObject 时。

我会将 OnEnable 中的代码放入 Start 方法中

void Start() { testing1.printx(); }


推荐阅读