网上演练贵港万达广场(人员密集)
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.
 
 
 

216 lines
5.9 KiB

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;
}
}