在 Unity3D 中,我有一个带有一些功能的 GameManager。
如果当前场景的数量等于场景的最大数量,我试图让我的游戏经理加载 MainMenu 场景。这是我的 GameManager 类中的函数。
作为参考,当我调用
Respawn()
函数时,如果玩家的生命小于或等于0,主菜单将加载,但是当我调用LoadNextLevel()
函数时,即使Debug.Log
注意到它正在加载主菜单菜单它仍然加载回当前级别。
老实说,我不确定这里发生了什么,我也不确定如何进一步调试。我没有收到任何错误消息或任何表明我的游戏正在加载最后一关的信息
public void LoadLevel(int levelId)
{
SceneManager.LoadScene(levelId);
}
private void LoadMainMenu()
{
LoadLevel(0);
PlayerLives = PlayerDefaultLives;
GameManager.Instance.GameOver = false;
}
public void Respawn()
{
GameManager.Instance.PlayerLives--;
if (_instance.PlayerLives > 0)
{
GameManager.Instance.GameOver = false;
LoadLevel(SceneManager.GetActiveScene().buildIndex);
}
else
{
GameManager.Instance.PlayerLives = PlayerDefaultLives;
LoadMainMenu();
}
}
public void LoadNextLevel()
{
int currentLevel = SceneManager.GetActiveScene().buildIndex;
if (currentLevel == TotalScenes)
{
GameManager.Instance.GameOver = true;
Debug.Log("Loading main menu");
LoadMainMenu();
}
else if (currentLevel < TotalScenes)
{
Debug.Log("Loading next level");
LoadLevel(currentLevel + 1);
}
else
{
Debug.LogError("Tried to load a unavailable scene");
}
}
这种平等有问题
if (currentLevel == TotalScenes)
如果您的构建设置中有
x
场景,那么最后一个场景的索引将为 x-1
(因为场景索引从 0 开始),因此当前场景索引永远不会等于构建设置场景计数。
您可以像这样修复逻辑:
public void LoadNextLevel()
{
int nextLevelIndex = SceneManager.GetActiveScene().buildIndex + 1;
if (nextLevelIndex < SceneManager.sceneCountInBuildSettings)
{
// Load next scene logic
}
else
{
// Load main menu logic
}
}