首页 > 代码库 > Unity编辑器扩展chapter1

Unity编辑器扩展chapter1

Unity编辑器扩展chapter1

  unity通过提供EditorScript API 的方式为我们提供了方便强大的编辑器扩展途径。学好这一部分可以使我们学会编写一些工具来提高效率,甚至可以自制一些小的插件应用的项目工程中去,达到复用的目的。今天首先创建一个新场景生成的菜单项,生成的场景已经绑定好需要的游戏对象及脚本。

Tips:1.官方API

   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<GameObject>();
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<Level>();
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 MenuItems
10     {
11         [MenuItem("Tools/LevelCreator/NewLevelScene %q") ]
12         private static void NewLevel()
13         {
14             EditorUtil.NewLevel();
15         }
16     }
17 }

效果:

技术分享

Unity编辑器扩展chapter1