Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在编辑器以Unity模式进入播放模式之前,是否可以更改要加载的场景?_C#_Unity3d - Fatal编程技术网

C# 在编辑器以Unity模式进入播放模式之前,是否可以更改要加载的场景?

C# 在编辑器以Unity模式进入播放模式之前,是否可以更改要加载的场景?,c#,unity3d,C#,Unity3d,我把游戏中所有的经理放在一个叫Init的空场景中。必须从此场景运行编辑器,游戏才能正常运行。所以我想编写一个编辑器脚本,首先加载Init场景,然后加载level场景 我的编辑器脚本: [InitializeOnLoad] public class LevelFix { static LevelFix() { EditorApplication.playModeStateChanged += OnPlayModeStateChanged; }

我把游戏中所有的经理放在一个叫Init的空场景中。必须从此场景运行编辑器,游戏才能正常运行。所以我想编写一个编辑器脚本,首先加载Init场景,然后加载level场景

我的编辑器脚本:

[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;
        } 
    }    
} 

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

是的,Unity提供了一种非常简单的方法,可以在进入播放模式时加载特定场景,方法如下:

这个问题是关于,而不是关于
 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);
    }
}
[InitializeOnLoad]
public class SetStartScene {
    static SetStartScene() {
        EditorSceneManager.playModeStartScene = AssetDatabase.LoadAssetAtPath<SceneAsset>(scenePath);
    }
}