c# - 是否可以在编辑器在 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;
}
}
}
负责要加载的关卡的初始化管理器(位于初始化场景中):
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);
}
}
推荐阅读
- python - 给定顶点的多边形面积的Python演算
- python - 如何将 Python 代码嵌入 Excel(Xlwings) 以及每个人如何使用它?
- bash - 根据变量名在 bash 循环中创建新文件
- verilog - SDF Annotation 和 SDF back annotation 有什么区别?
- codeigniter - linkedin iframe 嵌入被阻止的同一个站点
- javascript - 根据 ID 过滤数组
- python - 如何遍历嵌套列表以将值存储在数据框中?
- json - CloudFormation EC2 Windows 脚本
- angularjs - ionic 1 应用程序中的实现动态链接插件无法运行
- javascript - Microsoft.Maps.Pushpin 未出现在适用于手机的 Dynamics 365 应用程序中