【问题标题】:Is it possible to change the scene to load before the editor entered play mode in Unity?是否可以在编辑器在 Unity 中进入播放模式之前更改要加载的场景?
【发布时间】:2020-12-08 11:59:27
【问题描述】:

我将游戏中的所有经理放在一个名为 Init 的空场景中。必须从该场景运行编辑器才能使游戏正常运行。所以想写一个编辑器脚本,先加载Init场景,再加载关卡场景。

我的编辑器脚本:

[InitializeOnLoad]
public class LevelFix
{   
    static LevelFix()
    {
        EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
    }
    private static void OnPlayModeStateChanged(PlayModeStateChange state)
    {  
        switch (state)
        {
            case PlayModeStateChange.ExitingEditMode:
                bool initCheck = true;
                int sceneCount = SceneManager.sceneCount;
                Scene lastLevel = SceneManager.GetActiveScene();                

                for (int i = 0; i < sceneCount; i++) 
                {
                    Scene scene = SceneManager.GetSceneAt(i);
                    if (scene.name.Contains("Level"))
                    {                        
                        initCheck = false;
                    }                    
                }
                  
                if (!initCheck)
                {                    
                    PlayerPrefs.SetString("LastLevel", lastLevel.name);
                }
                
                break;

            case PlayModeStateChange.EnteredPlayMode:                
                SceneManager.LoadScene(0); //Init Scene
                break;
        } 
    }    
} 

负责要加载的关卡的初始化管理器(位于初始化场景中):

 public class InitManager : MonoBehaviour
{
    private IEnumerator Start()
    {
        yield return SceneManager.LoadSceneAsync(PlayerPrefs.GetString("LastLevel", "Level01"), LoadSceneMode.Additive);
        SceneManager.SetActiveScene(SceneManager.GetSceneByName(PlayerPrefs.GetString("LastLevel", "Level01")));             
        Destroy(gameObject);
    }
}

上面代码的问题是,无论我运行哪个级别,首先打开该级别,然后打开 Init。这种情况会导致一些错误。有什么办法可以设置在编辑器进入播放模式之前加载场景?

【问题讨论】:

标签: c# unity3d


【解决方案1】:

是的,当使用EditorSceneManager.playModeStartScene 进入播放模式时,Unity 提供了一种非常简单的方式来加载特定场景:

[InitializeOnLoad]
public class SetStartScene {
    static SetStartScene() {
        EditorSceneManager.playModeStartScene = AssetDatabase.LoadAssetAtPath<SceneAsset>(scenePath);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多