Unity3d - 在播放模式下加载特定场景

Tom*_*Tom 6 c# unity-game-engine scene

好的,所以我正在开发一个有主菜单和10个级别的小项目.我不时编辑不同的级别,并想尝试它们,但是我得到一个,NullPointerException因为我的级别依赖于主菜单中的某些变量才能使级别工作,这意味着我必须改变我的级别,然后加载我的主菜单和那里的游戏.

是否可以在Unity编辑器中执行某些操作,以便在您点击"播放"时默认加载特定场景,而不是您正在使用的场景?

我显然可以解决这个问题

public bool goToMenu; //set this to true in my levels through inspector

Start()
{
    if (goToMenu)
        //then load main menu
}
Run Code Online (Sandbox Code Playgroud)

但如果有一种方法可以设置默认级别加载到播放模式时,它会非常方便.我看过偏好但却找不到任何东西.

谢谢!

Z4u*_*rce 17

最简单的方法是将第 0 个场景设置为默认播放模式场景:

[InitializeOnLoad]
public class EditorInit
{
    static EditorInit()
    {
        var pathOfFirstScene = EditorBuildSettings.scenes[0].path;
        var sceneAsset = AssetDatabase.LoadAssetAtPath<SceneAsset>(pathOfFirstScene);
        EditorSceneManager.playModeStartScene = sceneAsset;
        Debug.Log(pathOfFirstScene + " was set as default play mode scene");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说非常有效,我只是将其放入编辑器文件夹中的脚本中 (3认同)

3Dy*_*ite 7

我编写了这个简单的脚本,当您按Play时,将场景加载到构建设置中索引0处。我希望有人觉得它有用。

它检测何时按下播放按钮并加载场景。然后,一切恢复正常。

哦! 而且在打开Unity和编译脚本后,它会自动执行自身,因此不必担心执行它。只需将其放在Editor文件夹中即可使用。

#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.SceneManagement;

[InitializeOnLoadAttribute]
public static class DefaultSceneLoader
{
    static DefaultSceneLoader(){
        EditorApplication.playModeStateChanged += LoadDefaultScene;
    }

    static void LoadDefaultScene(PlayModeStateChange state){
        if (state == PlayModeStateChange.ExitingEditMode) {
            EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo ();
        }

        if (state == PlayModeStateChange.EnteredPlayMode) {
            EditorSceneManager.LoadScene (0);
        }
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)


jho*_*ing 7

将Wiki中的SceneAutoLoader脚本放入“编辑器”文件夹中。它添加了一个菜单来选择自动加载的场景,然后在您单击“播放”时始终加载该场景。