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



我把游戏中的所有经理都放在一个名为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;
} 
}    
} 

负责加载级别的Init Manager(位于Init场景中(:

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。这种情况会导致一些错误。有没有办法在编辑器进入播放模式之前设置要加载的场景?

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

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

最新更新