日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定制自己的Unity场景编辑工具界面(一)

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定制自己的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()//設置本地大小到(111){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);}}

參考以上腳本,舉例設置位置,方向,大小各一個??梢宰约捍钆涑龈m合自己的操作,使用它的優點是,它的操作可以直接忽略子物體會引起的變化。

快速切換對象激活關閉

[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场景编辑工具界面(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。