unity3d Unity -如果场景不可用,如何捕获错误

4bbkushb  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(93)

我目前正在开发一款游戏,它有一个生成的LevelController脚本,可以在所有敌人被击败后进入下一关,并在最后一关完成后返回Level 1。
由于游戏对象和脚本上的代码不断变化,我希望避免在脚本中硬编码最大级别计数或在每个场景的单个游戏对象上设置变量。

  • 我目前有三个场景(通过“文件-〉构建设置”菜单添加),只是为了测试它们之间的转换功能。级别的数量可能会随着我提出新想法而变化,其中的代码和对象可能会发生重大变化。*
    如果找不到场景,是否有简单的方法捕获错误?
    示例代码(不捕获错误)-参见LoadScene方法...
public void LoadScene()
   {
        string nextLevelName = "Level" + _nextLevelIndex;
        try
        {
            
            SceneManager.LoadScene(nextLevelName);
            // Debug.Log($"Loaded {nextLevelName}.");
        }
        catch (Exception e)
        {
            Debug.Log(e);
            _nextLevelIndex = 1; // reset to first Scene after final stage complete
            nextLevelName = "Level" + _nextLevelIndex;
            SceneManager.LoadScene(nextLevelName);
        }
    }```
efzxgjgh

efzxgjgh1#

使用SceneManager.sceneCountInBuildSettings它有助于获得场景的数量。我对你的代码做了一些修改,看看它是否有效。更新了sceneCountInBuildSettings

public void LoadScene()
    {
        int maxBuildIndex = SceneManager.sceneCountInBuildSettings - 1;
        string nextLevelName = "Level" + _nextLevelIndex;

        Scene nextScene = SceneManager.GetSceneByBuildIndex(_nextLevelIndex);

      
        if (nextScene.name == null || _nextLevelIndex > maxBuildIndex)
        {
            _nextLevelIndex = 1; // reset to first Scene after final stage complete
            nextLevelName = "Level" + _nextLevelIndex;
        }

        try
        {
            SceneManager.LoadScene(nextLevelName);
            // Debug.Log($"Loaded {nextLevelName}.");
            _nextLevelIndex++; // Increment the next level index for the next scene transition
        }
        catch (Exception e)
        {
            Debug.Log(e);
        }

相关问题