您的位置:首页 > 移动开发 > Unity3D

Unity编辑器扩展chapter1

2017-01-01 23:11 656 查看

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 }


效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: