標籤:ora chap immediate collect eve reference idt 遊戲 game
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 MenuItems10 {11 [MenuItem("Tools/LevelCreator/NewLevelScene %q") ]12 private static void NewLevel()13 {14 EditorUtil.NewLevel();15 }16 }17 }
效果:
Unity編輯器擴充chapter1