【发布时间】:2019-10-19 15:39:42
【问题描述】:
我遇到了与脚本执行顺序相关的问题,尽管我是一位经验丰富的 Unity 开发人员,但我并不在意这一点。所以我想对此进行解释。
这是我的 MenuContoller 脚本代码:
public class MainMenuController : MonoBehaviour
{
[SerializeField] Text bestScoreText;
[SerializeField] Toggle soundToggle;
private void OnEnable()
{
Init();
}
private void Init()
{
if (GameManager.Instance == null)
Debug.Log("null game manager");
GameManager.Instance.PlayerLives = 0;
bestScoreText.text = DataStorage.RetrieveBestScore().ToString("D5");
SoundManager.Instance.IsSoundEnabled = DataStorage.RetrieveSoundStatus() == GameConstants.STAT_ON ? true : false;
soundToggle.isOn = !SoundManager.Instance.IsSoundEnabled;
}
}
这是我的 GameManager 脚本代码:
public class GameManager : MonoBehaviour
{
private static GameManager instance;
//
private int levelIndex;
private int gameScore;
private int playerLives;
void Awake()
{
instance = this;
}
public static GameManager Instance
{
get
{
return instance;
}
}
}
我在执行期间收到 NullReferenceException:
现在我无法理解 - OnEnable 方法是如何在其他脚本的 Awake 方法之前执行的?
由于这个原因,我得到一个空引用异常。据我了解,所有脚本 Awake 方法都会先执行,然后在 OnEanble 调用项目的所有脚本之后执行。
请向我解释这一点,以便解决我的困惑。
【问题讨论】:
-
在我看来是个 bug,这是什么统一版本?
-
Unity 版本 2018.4.9f1
-
您是否注意到您没有提供 GameManager 脚本。
-
我已经将 GameManager 脚本添加到一个 GameObject...
-
在此处添加 GameManager 代码