我正在使用 Singleton 设计模式为 GameManager 编写脚本,但不知何故,当我运行我的游戏时,我得到了空引用异常。由于我经常改变我的场景,我制作了一个脚本,我不会破坏 GameManager 和一些不同的对象,而是使用 DontDestroyOnLoad,这很可能是异常的原因。
我正在为 GameManager 使用这个脚本,它附加到场景中的空游戏对象。
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine;
public class GameManager : MonoBehaviour {
private static GameManager instance;
public static GameManager Instance {
get {
if (instance == null) {
Debug.Log("Game Manager not found");
}
return instance;
}
}
[SerializeField] private List<GameObject> objectsNotToDestroy;
[SerializeField] private float dayAndNightTime;
private PlayerMovement player;
public float CurrentTime { get; set; }
public float DayTime { get; private set; }
private void Awake() {
if (instance != null) {
Debug.Log("Not null");
objectsNotToDestroy.ForEach(Destroy);
}
else {
Debug.Log("Here");
instance = this;
DontDestroyOnLoad(gameObject);
objectsNotToDestroy.ForEach(DontDestroyOnLoad);
}
PlayerMovement playerMovement = objectsNotToDestroy[1].GetComponent<PlayerMovement>();
if (playerMovement != null) {
player = playerMovement;
}
else {
Debug.LogError("PlayerMovement script not found on object in objectsNotToDestroy list.");
}
DayTime = dayAndNightTime;
}
public void Load(int buildIndex) {
CurrentTime += Time.time;
SceneManager.LoadSceneAsync(buildIndex);
player.Running(false);
}
}
当我运行我的游戏时,“GameManager not found”和“Here”都被输出,这让我得出结论,不破坏我的 GameManager 脚本附加到的 gameObject 是造成问题的原因。我尝试了一些东西,比如包括/排除我的 GameManager 脚本附加到的游戏对象,但我尝试的任何东西都不起作用,我有点困惑为什么。
要为您的单身人士获得可预测的行为,请尝试以下操作: