You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
5.9 KiB
217 lines
5.9 KiB
4 years ago
|
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<Renderer>() != 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<Renderer>();
|
||
|
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<Renderer>() != 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<Renderer>();
|
||
|
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<Renderer>() != 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<Renderer>();
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|