所以我正在进行我的第一个fps游戏,现在我正处于开始菜单到第一个场景的时候。当这个新场景加载时,在我的暂停游戏脚本中,我设置了pauseMenu.SetActive(false)(它是一个Canvas,暂停游戏脚本没有附加到它但是附加到游戏管理器对象)我设置了一个bool说isPaused为假(在清醒功能之前)。
现在感觉很棒,我想我已经做到了,没有任何事情发生过,它很容易!但是......当我按下Escape(暂停游戏)时,我得到一个NullReferenceException,因为它再也找不到暂停菜单了!在我开始切换场景之前,那个位工作得非常好,所以我的问题是,在打破脚本执行的场景之间切换时有什么需要知道的吗?我的拍摄不起作用,但我的SwitchWeapon / Movement / MouseLook / ItemPickUp脚本不起作用。 在开始菜单场景和实际级别场景之间切换时是否有黑洞?帮助:)
这是我在PauseGame脚本上的代码
GameObject pauseMenu;
bool isPaused = false;
void Awake()
{
if (Application.loadedLevelName != "Start_Menu")
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
pauseMenu = GameObject.Find("Canvas_Pause_Menu");
pauseMenu.SetActive(false);
Debug.Log(isPaused + " " + pauseMenu);
}
}
void Update()
{
// Here I use Application.loadedLevelName because I haven't found
// a SceneManager function in the Unity docs to check here)
if (Application.loadedLevelName != "Start_Menu")
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (!isPaused)
{
pauseMenu.SetActive(true);
Time.timeScale = 0f;
Cursor.visible = true;
isPaused = !isPaused;
}
else if (isPaused)
{
pauseMenu.SetActive(false);
Time.timeScale = 1f;
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
isPaused = !isPaused;
}
}
}
}
答案 0 :(得分:0)
pauseMenu
在新场景之后变为空。
您有两种选择:
公开pauseMenu
并在编辑器中将暂停菜单Canvas
拖到其中,然后从唤醒功能中删除pauseMenu = GameObject.Find("Canvas_Pause_Menu");
。您必须删除pauseMenu = GameObject.Find("Canvas_Pause_Menu");
。
public GameObject pauseMenu;
bool isPaused = false;
void Awake()
{
if (Application.loadedLevelName != "Start_Menu")
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
pauseMenu.SetActive(false);
Debug.Log(isPaused + " " + pauseMenu);
}
}
或者将Awake()
函数中的代码放入Start()
函数。
GameObject pauseMenu;
bool isPaused = false;
void Start()
{
if (Application.loadedLevelName != "Start_Menu")
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
pauseMenu = GameObject.Find("Canvas_Pause_Menu");
pauseMenu.SetActive(false);
Debug.Log(isPaused + " " + pauseMenu);
}
}
其中一个可以解决您的问题。第一个应该是第二个失败。