gpt4 book ai didi

c# - 是否可以在编辑器进入 Unity 播放模式之前将场景更改为加载?

转载 作者:行者123 更新时间:2023-12-05 04:55:48 25 4
gpt4 key购买 nike

我将游戏中的所有管理器放在一个名为 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);
}
}

关于c# - 是否可以在编辑器进入 Unity 播放模式之前将场景更改为加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65198504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com