Unity编辑器扩展chapter1
unity通过提供EditorScript API 的方式为我们提供了方便强大的编辑器扩展途径。学好这一部分可以使我们学会编写一些工具来提高效率,甚至可以自制一些小的插件应用的项目工程中去,达到复用的目的。今天首先创建一个新场景生成的菜单项,生成的场景已经绑定好需要的游戏对象及脚本。
Tips:1.官方
2.编辑器扩展脚本都需放在Editor文件夹下,Editor的层级和数目没有要求
EditorUtil.cs :编辑器扩展类,向外部提供编辑器扩展方法。
1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 using UnityEditor.SceneManagement; 5 6 namespace RunAndJump.LevelCreator //为防止类名冲突,使用namespace时一个好的解决方案 7 { 8 public class EditorUtil 9 {10 11 //创建新场景12 public static void NewScene()13 {14 //该方法后续过时,被下面方法替代:EditorApplication.SaveCurrentSceneIfUserWantsTo();15 EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo();//当前场景有未保存的东西是,弹出对话框提醒是否保存当前场景16 //该方法后续过时,被下面方法替代:EditorApplication.NewScene();17 EditorSceneManager.NewScene(NewSceneSetup.EmptyScene);18 }19 20 21 //清空场景22 public static void CleanScene()23 {24 GameObject[] allObjects = Object.FindObjectsOfType();25 26 foreach (GameObject go in allObjects)27 {28 GameObject.DestroyImmediate(go);29 }30 }31 32 //创建新关卡33 public static void NewLevel()34 {35 NewScene();36 CleanScene();37 38 //可以在创建新关卡时添加上必要的游戏对象39 //add something...40 41 GameObject levelGo = new GameObject("Level");42 levelGo.transform.position=Vector3.zero;43 levelGo.AddComponent ();44 45 }46 }47 }
MenuItems.cs:菜单项控制类,负责在菜单项中调用编辑器方法
1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 5 namespace RunAndJump.LevelCreator 6 { 7 8 //菜单项管理类,用来控制扩展方法在菜单项中显示 9 public class MenuItems10 {11 [MenuItem("Tools/LevelCreator/NewLevelScene %q") ]12 private static void NewLevel()13 {14 EditorUtil.NewLevel();15 }16 }17 }
效果: