using System.Collections.Generic; using UnityEngine; using UnityEditor; public class SceneTool : EditorWindow { [MenuItem("Tool/ChangePivot")] //绘制窗口 static void tranPoint() { SceneTool win = (SceneTool)EditorWindow.GetWindow(typeof(SceneTool), false, "Tool", false); win.Show(); } void OnGUI() { //设置字体类型 GUIStyle style1 = new GUIStyle(); //字体大小为15 style1.fontSize = 15; //字体颜色为灰白色 style1.normal.textColor = new Color(0.7f, 0.7f, 0.7f); GUIStyle style2 = new GUIStyle(); style2.fontSize = 13; style2.normal.textColor = new Color(0.7f, 0.7f, 0.7f); //垂直绘制 GUILayout.BeginHorizontal(); { //lab的绘制 EditorGUILayout.LabelField("▼TransformPoint", style1); //控制坐标位置的按钮绘制 if (GUI.Button(new Rect(60, 40, 70, 25), "Top")) { if (Selection.activeGameObject) TopPoint(); } if (GUI.Button(new Rect(60, 70, 70, 25), "Center")) { if (Selection.activeGameObject) CenterPoint(); } if (GUI.Button(new Rect(60, 100, 70, 25), "Button")) { if (Selection.activeGameObject) Buttom(); } } } //坐标放在物体中心 void CenterPoint() { Transform parent = Selection.activeGameObject.transform; if (parent.GetComponent() != null) { GameObject parent02 = new GameObject("A"); parent02.transform.position = parent.position; parent02.transform.SetParent(parent.parent); parent.SetParent(parent02.transform); Selection.activeGameObject = parent02; parent = parent02.transform; } Vector3 position = parent.position; Vector3 scale = parent.localScale; //Vector3 rotate = parent.localEulerAngles; parent.position = Vector3.zero; parent.localScale = Vector3.one; //parent.localEulerAngles = Vector3.zero; Renderer[] m_renderer = parent.GetComponentsInChildren(); Vector3 center = Vector3.zero; foreach (Renderer child in m_renderer) { center += child.bounds.center; } center /= m_renderer.Length; Bounds m_bounds = new Bounds(center, Vector3.zero); foreach (Renderer b in m_renderer) { m_bounds.Encapsulate(b.bounds); } foreach (Transform t in parent) { t.position = t.position - m_bounds.center; } parent.position = position + m_bounds.center; parent.localScale = scale; //parent.localEulerAngles = rotate; } //坐标放在物体中心的最顶端 void TopPoint() { Transform parent = Selection.activeGameObject.transform; if (parent.GetComponent() != null) { GameObject parent02 = new GameObject("A"); parent02.transform.position = parent.position; parent02.transform.SetParent(parent.parent); parent.SetParent(parent02.transform); Selection.activeGameObject = parent02; parent = parent02.transform; } Vector3 position = parent.position; Vector3 scale = parent.localScale; //Vector3 rotate = parent.localEulerAngles; parent.position = Vector3.zero; parent.localScale = Vector3.one; //parent.localEulerAngles = Vector3.zero; Renderer[] m_renderer = parent.GetComponentsInChildren(); Vector3 center = Vector3.zero; foreach (Renderer child in m_renderer) { center += child.bounds.center; } center /= m_renderer.Length; Bounds m_bounds = new Bounds(center, Vector3.zero); foreach (Renderer b in m_renderer) { m_bounds.Encapsulate(b.bounds); } Vector3 V = m_bounds.center + new Vector3(0, m_bounds.size.y / 2, 0); foreach (Transform t in parent) { t.position -= V; } parent.position = position + V; parent.localScale = scale; //parent.localEulerAngles = rotate; } //坐标放在物体中心的最底端 void Buttom() { Transform parent = Selection.activeGameObject.transform; if (parent.GetComponent() != null) { GameObject parent02 = new GameObject("A"); parent02.transform.position = parent.position; parent02.transform.SetParent(parent.parent); parent.SetParent(parent02.transform); Selection.activeGameObject = parent02; parent = parent02.transform; } Vector3 position = parent.position; Vector3 scale = parent.localScale; //Vector3 rotate = parent.localEulerAngles; parent.position = Vector3.zero; parent.localScale = Vector3.one; //parent.localEulerAngles = Vector3.zero; Renderer[] m_renderer = parent.GetComponentsInChildren(); Vector3 center = Vector3.zero; foreach (Renderer child in m_renderer) { center += child.bounds.center; } center /= m_renderer.Length; Bounds m_bounds = new Bounds(center, Vector3.zero); foreach (Renderer b in m_renderer) { m_bounds.Encapsulate(b.bounds); } Vector3 V = m_bounds.center - new Vector3(0, m_bounds.size.y / 2, 0); foreach (Transform t in parent) { t.position -= V; } parent.position = position + V; parent.localScale = scale; //parent.localEulerAngles = rotate; } }