Unity3D、C#在Unity 中控制组件排列、对齐的脚本

本文介绍如何使用Unity3D和C#脚本在Unity环境中进行组件的排列和对齐操作,适用于游戏场景或UI布局的调整。
摘要由CSDN通过智能技术生成

Unity3D、C#在Unity 中控制组件排列、对齐的脚本

      

using System.Linq;
using System.Collections;
using UnityEngine;
using UnityEditor;

/// <summary>
/// 在unity中控制组件排列、对齐的脚本
/// </summary>
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);
            // MathUtil.setPositionX(gameObject.transform.localPosition, x);
        }
    }

    [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);
            // MathUtil.setPositionX(gameObject.transform.localPosition, x);
        }
    }

    [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);
            //MathUtil.setPositionY(gameObject.transform.localPosition, y);
        }
    }

    [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);
            //MathUtil.setPositionY(gameObject.transform.localPosition, y);
        }
    }


    [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);
            //MathUtil.setPositionX(position, firstX + i * distance);
        }
    }



    [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);
            //MathUtil.setPositionY(position, firstY + i * distance);
        }
    }
}

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五殿下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值