好的,所以我正在开发一个有主菜单和10个级别的小项目。我不时编辑不同级别,并想尝试一下,但是我得到一个NullPointerException
因为我的关卡依赖于主菜单中的某些变量才能使关卡工作,这意味着我必须改变我的关卡,然后加载我的主菜单并从那里播放。
在Unity编辑器中是否可以执行某些操作以在您点击“播放”时默认加载特定场景,而不是您正在进行的场景?
我显然可以解决这个问题,比如
public bool goToMenu; //set this to true in my levels through inspector
Start()
{
if (goToMenu)
//then load main menu
}
但如果有一种方法可以设置默认级别加载到播放模式时,它会非常方便。我已经查看了偏好设置,但无法找到任何内容。
谢谢!
答案 0 :(得分:5)
这是Unity中一个众所周知的问题,遗憾的是没有好的解决方案。
简而言之,当你单击“播放”时,它应该跳到你的预加载场景,一般 - 但Unity从未想到这一点。这是有道理的,因为他们从未真正测试过他们的产品。
: - )
你可以这样做..
/*
ONLY FOR USE DURING DEVELOPMENT IN THE EDITOR
ONLY FOR USE DURING DEVELOPMENT IN THE EDITOR
ONLY FOR USE DURING DEVELOPMENT IN THE EDITOR
MUST RUN FIRST USING "SCRIPT EXECUTION ORDER" system
MUST RUN FIRST USING "SCRIPT EXECUTION ORDER" system
MUST RUN FIRST USING "SCRIPT EXECUTION ORDER" system
YOU MUST REMOVE THIS SCRIPT BEFORE BUILDING TO PRODUCTION
YOU MUST REMOVE THIS SCRIPT BEFORE BUILDING TO PRODUCTION
YOU MUST REMOVE THIS SCRIPT BEFORE BUILDING TO PRODUCTION
*/
using UnityEngine;
public class DevPreload:MonoBehaviour {
void Awake() {
GameObject check = GameObject.Find("__app");
// "__app" is one of your DDOL gameobject in preload scene
if (check==null)
SceneManagement.SceneManager.LoadScene("_preload");
}
}
秘诀是使用
系统:只需让该脚本在任何事情之前运行,它就可以做你想要的。
但是 - 脚本执行订单系统是一个非常糟糕的工程创意。所有严肃的团队都禁止使用它。这有点像在编程中使用“全局变量”,可以这么说。如果你这样做,要非常小心。
答案 1 :(得分:5)
我制作了这个简单的脚本,当您按下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
答案 2 :(得分:4)
将wiki中的SceneAutoLoader脚本放入Editor文件夹中。它添加了一个菜单来选择自动加载的场景,然后在点击播放时始终加载该场景。
答案 3 :(得分:0)
最简单的方法是将第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");
}
}
答案 4 :(得分:0)
这是我编写的编辑器脚本,可以完全满足您的需求。 https://github.com/CSaratakij/SceneSelector 进入播放模式时,它具有用于选择特定场景的UI和用于在构建设置中打开第一个场景的选项。 对将来的访问者可能有用。