c# - 初始化对象在 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");
}
}
解决方案
好吧,我想这与您的 MonoBehavior 对象尚未创建这一事实有关。看一下顺序:事件函数的执行顺序
Awake:这个函数总是在任何 Start 函数之前调用,并且在一个 prefab 被实例化之后。(如果游戏对象在启动期间处于非活动状态,则在激活之前不会调用 Awake。)
OnEnable:(仅在对象处于活动状态时调用):在对象启用后立即调用此函数。这会在创建 MonoBehaviour 实例时发生,例如在加载关卡或实例化带有脚本组件的 GameObject 时。
我会将 OnEnable 中的代码放入 Start 方法中
void Start() { testing1.printx(); }
推荐阅读
- javascript - 使用 vscode.commands.executeCommand 创建一个新的 Flutter 应用项目
- networking - CRC 生成器位是否都相同?
- sql - 计算 SQL 中行组的方差
- docker - Java HiveMQ 客户端每秒从 docker swarm 中的不同端口重新连接
- r - 使用 if 语句将 reactiveValue 的值传递给 observeEvent 以在闪亮中创建条件选项卡
- c++ - 带有向量和容器的 C++ 动态分配
- javascript - 在 Commando 中将消息从控制台发送到服务器通道
- discord.js - 事件通道创建 .setauthor
- javascript - 一种样式不起作用,但另一种样式起作用
- python - 我如何计算最喜欢的类别 - Django Query