Unity3D、C#在Unity 中控制组件排列、对齐的脚本
using System.Linq;
using System.Collections;
using UnityEngine;
using UnityEditor;
public class AlignTool : Editor
{
[MenuItem("Tool/水平左对齐")]
public static void alignInHorziontalLeft()
{
float x = Mathf.Min(Selection.gameObjects.Select(obj => obj.transform.localPosition.x -
((RectTransform)obj.transform).sizeDelta.x / 2
).ToArray());
foreach (GameObject gameObject in Selection.gameObjects)
{
gameObject.transform.localPosition = new Vector3(x + ((RectTransform)gameObject.transform).sizeDelta.x / 2,
gameObject.transform.localPosition.y);
}
}
[MenuItem("Tool/水平右对齐")]
public static void alignInHorziontalRight()
{
float x = Mathf.Max(Selection.gameObjects.Select(obj => obj.transform.localPosition.x +
((RectTransform)obj.transform).sizeDelta.x / 2).ToArray());
foreach (GameObject gameObject in Selection.gameObjects)
{
gameObject.transform.localPosition = new Vector3(x - ((RectTransform)gameObject.transform).sizeDelta.x / 2, gameObject.transform.localPosition.y);
}
}
[MenuItem("Tool/垂直上对齐")]
public static void alignInVerticalUp()
{
float y = Mathf.Max(Selection.gameObjects.Select(obj => obj.transform.localPosition.y +
((RectTransform)obj.transform).sizeDelta.y / 2).ToArray());
foreach (GameObject gameObject in Selection.gameObjects)
{
gameObject.transform.localPosition = new Vector3(gameObject.transform.localPosition.x, y - ((RectTransform)gameObject.transform).sizeDelta.y / 2);
}
}
[MenuItem("Tool/垂直下对齐")]
public static void alignInVerticalDown()
{
float y = Mathf.Min(Selection.gameObjects.Select(obj => obj.transform.localPosition.y -
((RectTransform)obj.transform).sizeDelta.y / 2).ToArray());
foreach (GameObject gameObject in Selection.gameObjects)
{
gameObject.transform.localPosition = new Vector3(gameObject.transform.localPosition.x, y + ((RectTransform)gameObject.transform).sizeDelta.y / 2);
}
}
[MenuItem("Tool/水平均匀")]
public static void uniformDistributionInHorziontal()
{
int count = Selection.gameObjects.Length;
float firstX = Mathf.Min(Selection.gameObjects.Select(obj => obj.transform.localPosition.x).ToArray());
float lastX = Mathf.Max(Selection.gameObjects.Select(obj => obj.transform.localPosition.x).ToArray());
float distance = (lastX - firstX) / (count - 1);
for (int i = 0; i < count; i++)
{
Vector3 position = Selection.gameObjects[i].transform.localPosition;
Selection.gameObjects[i].transform.localPosition = new Vector3(firstX + i * distance, position.y);
}
}
[MenuItem("Tool/垂直均匀")]
public static void uniformDistributionInVertical()
{
int count = Selection.gameObjects.Length;
float firstY = Mathf.Min(Selection.gameObjects.Select(obj => obj.transform.localPosition.y).ToArray());
float lastY = Mathf.Max(Selection.gameObjects.Select(obj => obj.transform.localPosition.y).ToArray());
float distance = (lastY - firstY) / (count - 1);
for (int i = 0; i < count; i++)
{
Vector3 position = Selection.gameObjects[i].transform.localPosition;
Selection.gameObjects[i].transform.localPosition = new Vector3(position.x, firstY + i * distance);
}
}
}