定制自己的Unity场景编辑工具界面(一)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                定制自己的Unity场景编辑工具界面(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                Unity場景編輯工具界面(一)
我的界面工具命名為CustomAssist,下面簡稱CA; 
 CA添加以下功能
- Transform相對變換位置、方向、大小
- 快速切換對象激活關閉
- 快速編組對象
- 快速命名子節點
- 計算三角面和頂點
主界面
界面里有一部分功能并沒有完善,但我還是貼出了最新的界面,公開給大家是想告訴大家,每個人的工具界面都不一樣,都有自己整理的工具,所以這里我將分享目錄中所列的幾個工具,簡單實用。界面源碼參考:
public class UnityCustomAssist : EditorWindow{[MenuItem("GenerateTools/Unity Custom Assist/Unity Custom Assist Window")]private static void ShowWindow(){var window =(UnityCustomAssist)GetWindow(typeof (UnityCustomAssist), false, "CustomAssist");window.Show();}private void OnGUI(){EditorGUILayout.LabelField("ReadMe");//這里可以使用EditorGUI或者GUI函數來定義界面按鈕,標簽等。} }Transform相對變換位置、方向、大小
public static void SetPositionToZero() //設置對象位置為父節點位置 {if (Selection.gameObjects.Length != 1) return;var go = Selection.gameObjects[0];var childs = SaveChilds(go.transform);Undo.RecordObject(go.transform, "localPosition " + go.transform.name);go.transform.localPosition = Vector3.zero;ResetChilds(go.transform, childs);} public static void SetLocalRotationToFirstChild() //設置對象方向為第一個子節點的方向 {if (Selection.gameObjects.Length != 1) return;var go = Selection.gameObjects[0];var childs = SaveChilds(go.transform);if (childs.Length == 0)return;Undo.RecordObject(go.transform, "localRotation " + go.transform.name);go.transform.localRotation = childs[0].localRotation;ResetChilds(go.transform, childs);}public static void SetLocalScaleOne()//設置本地大小到(1,1,1){if (Selection.gameObjects.Length != 1) return;var go = Selection.gameObjects[0];var childs = SaveChilds(go.transform);Undo.RecordObject(go.transform, "localScale " + go.transform.name);go.transform.localScale = Vector3.one;ResetChilds(go.transform, childs);}private static Transform[] SaveChilds(Transform goTrans){var childs = new Transform[goTrans.childCount];for (var i = 0; i < childs.Length; i++){childs[i] = goTrans.GetChild(i);}for (var i = 0; i < childs.Length; i++){Undo.RecordObject(childs[i], "localPosition " + childs[i].transform.name);childs[i].SetParent(goTrans.parent);}return childs;}private static void ResetChilds(Transform go, Transform[] childs){for (var i = 0; i < childs.Length; i++){Undo.RecordObject(childs[i], "localPosition " + childs[i].transform.name);childs[i].SetParent(go);}}參考以上腳本,舉例設置位置,方向,大小各一個。可以自己搭配出更適合自己的操作,使用它的優點是,它的操作可以直接忽略子物體會引起的變化。
快速切換對象激活關閉
[MenuItem("GenerateTools/FastKey/Batch/Enable\\Disable Multi GameObj %1")]static void SelectEnableODisable(){GameObject[] gobj = Selection.gameObjects;bool enable = !gobj[0].activeSelf;foreach (GameObject go in gobj){Undo.RecordObject(go, go.name + "setactive");go.transform.gameObject.SetActive(enable);}}快捷鍵Ctrl+1,可以快速的激活或關閉選中對象。使用鼠標點擊屬性面板左上角來切換會比較麻煩。
快速編組對象
public static void AddGroup(){GameObject[] gop = Selection.gameObjects;GameObject go = gop[0];GameObject empty = new GameObject();empty.transform.parent = go.transform.parent;empty.transform.localPosition = Vector3.zero;Undo.RegisterCreatedObjectUndo(empty, empty.name + "creat");for (int i = 0; i < gop.Length; i++){Undo.SetTransformParent(gop[i].transform, gop[i].transform.parent, gop[i].transform.name + "addg");gop[i].transform.SetParent(empty.transform);}empty.name = "Group " + go.name;Selection.activeGameObject = empty;Debug.Log("new Group:" + empty.name);}快捷鍵Ctrl+4,為多選的幾個對象添加父節點并編組,等價于新建一個空物體,并將多個對象拖進來。
快速命名子節點
public static void ReName(){GameObject go =Selection.gameObjects[0];string goName = go.name;for (int i = 0; i < go.transform.childCount; i++){Undo.RecordObject(go.transform.GetChild(i).gameObject, go.transform.GetChild(i).gameObject.name);go.transform.GetChild(i).gameObject.name = goName + " " + i;}}快速命名選中對象的所有子節點名字,對于強迫癥嚴重的程序可以使用改方法進行快速命名。
計算三角面和頂點
public static void ComputingTriangle(){GameObject go = Selection.gameObjects[0];Component[] filters;int tris = 0;int verts = 0;filters = go.GetComponentsInChildren<MeshFilter>();foreach (MeshFilter f in filters){tris += f.sharedMesh.triangles.Length / 3;verts += f.sharedMesh.vertexCount;}Debug.LogError("對象:" + go.name+ "\ntris:" + tris+ " verts:" + verts+"\n");}計算三角面和頂點,這個工具可以查看場景中所有對象的點面的數量,也可以查看指定對象包含的點面,便于對場景的控制。
- Unity場景編輯工具界面一- 主界面
- Transform相對變換位置方向大小
- 快速切換對象激活關閉
- 快速編組對象
- 快速命名子節點
- 計算三角面和頂點
 
 
總結
以上是生活随笔為你收集整理的定制自己的Unity场景编辑工具界面(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Vue基础之组件
- 下一篇: 【原创】MVC+ZTree实现权限树的功
