You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Unity中经变换的Plane四角Vector3坐标?

Unity 获取变换后Plane四角的世界坐标

核心思路

Unity中Transform.TransformPoint()方法会自动将本地空间坐标转换为世界空间坐标,同时自动应用物体的移动、旋转、缩放变换,这是最便捷的实现方式。

步骤与代码实现

默认Unity Plane的初始状态是:中心在原点,XZ平面上,尺寸为10×10(中心到各边缘的距离为5)。以下是适配任意变换(移动/旋转/非均匀缩放)的代码:

using UnityEngine;

public class PlaneCornerGetter : MonoBehaviour
{
    // 拖拽你的Plane对象到这里
    public Transform targetPlane;
    // 存储四个角的世界坐标
    private Vector3[] worldSpaceCorners = new Vector3[4];

    void Update()
    {
        // 1. 计算本地空间下的四角坐标(已适配缩放)
        float halfWidth = 5f * targetPlane.localScale.x;
        float halfLength = 5f * targetPlane.localScale.z;
        float yPos = 0f * targetPlane.localScale.y; // Plane默认Y轴无厚度,可根据需求调整

        Vector3 localTopLeft = new Vector3(-halfWidth, yPos, halfLength);
        Vector3 localTopRight = new Vector3(halfWidth, yPos, halfLength);
        Vector3 localBottomRight = new Vector3(halfWidth, yPos, -halfLength);
        Vector3 localBottomLeft = new Vector3(-halfWidth, yPos, -halfLength);

        // 2. 转换为世界空间坐标
        worldSpaceCorners[0] = targetPlane.TransformPoint(localTopLeft);
        worldSpaceCorners[1] = targetPlane.TransformPoint(localTopRight);
        worldSpaceCorners[2] = targetPlane.TransformPoint(localBottomRight);
        worldSpaceCorners[3] = targetPlane.TransformPoint(localBottomLeft);

        // 可选:打印结果
        if (Input.GetKeyDown(KeyCode.Space))
        {
            for (int i = 0; i < 4; i++)
            {
                Debug.Log($"角{i+1}世界坐标:{worldSpaceCorners[i]}");
            }
        }
    }
}

补充说明

  • 若使用自定义Mesh的Plane,需先通过MeshFilter.mesh.vertices获取原始本地顶点,再用Transform.TransformPoint()转换,逻辑一致。
  • TransformPoint会完整叠加物体的所有变换,无需手动计算旋转矩阵或缩放系数,避免出错。
  • 可根据需求调整顶点顺序(顺时针/逆时针)或Y轴坐标(若Plane有厚度)。

内容的提问来源于stack exchange,提问作者NKRVVI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:30:40