Unity:在编辑器重新启动时,需要将单例脚本重新附加到游戏对象以避免空错误?

Unity: Singleton script needs to be re-attached to gameobject on Editor relaunch to avoid null error?

提问人:maddogedge 提问时间:1/6/2023 更新时间:1/6/2023 访问量:84

问:

我的单例类脚本有问题,我想得到你的帮助。

脚本最终可以正常工作,但每次启动 Unity 编辑器时,我都需要删除脚本并将其重新附加到我的游戏对象,以避免 null 异常错误:

NullReferenceException: Object reference not set to an instance of an object

有什么想法为什么吗?我以为我没有正确初始化,但不知道从那里去哪里。

下面是一个作为组件附加的简化单例代码:

 using UnityEngine;
 
 public class Conductor : MonoBehaviour
 {
 
     public static Conductor Timing { get; private set; }
 
     [SerializeField] private double bpm;          // beats per minute
 
     private void Awake()
     {
         if (Timing != null && Timing != this)
             Destroy(this);
         else
             Timing = this;
     }
 
     public double Bpm
     {
         get { return bpm; }
         set
         {
             bpm = value;
         }
     }
 }

我在另一个脚本中调用代码,如下所示,例如

Conductor.Timing.Bpm;

提前致谢!

最好的,罗伯

C# unity-game-engine 单例 nullreferenceexception

评论

0赞 derHugo 1/6/2023
另一个脚本..是编辑器脚本吗?否则,如果这是在运行时,我不明白为什么它不应该工作.如果其他脚本在此脚本之前执行,则执行顺序问题除外......Awake
0赞 maddogedge 1/10/2023
嗨,原因是与编辑器中未启动的实例有关。我不确定我是否足够理解解决方案以再次解释它,但下面的方法确实如此。感谢您的帮助。

答:

0赞 maddogedge 1/6/2023 #1

我在发布问题 1 分钟后找到了答案,哈哈:

[执行始终]

在班级的顶部似乎解决了它。我还把有问题的脚本放在脚本执行顺序的默认执行时间之前