Unity坐标转换

世界坐标

将游戏内的游戏空间理解为"世界",世界坐标系对等于游戏空间坐标系,游戏中的transform.position或者transform.rotation的信息都是基于世界坐标系。

视口坐标

视图坐标是对游戏显示视图的一个归一化的描述,其中左下角为(0,0),右上角为(0,1),在需要对显示视图进行分屏处理时,可以通过设置Camera上的ViewPort Rect属性来进行屏幕分屏渲染。

屏幕坐标

屏幕坐标是对屏幕像素(分辨率)的位置的描述,其中左下角为(0,0),右上角为(Screen.width,Screen.height)。

Unity坐标转换API

//1.屏幕转世界坐标

Camera.main.ScreenToWorldPoint();

!需要注意的是屏幕转世界坐标的时候要注意坐标的z值,z值为目标与相机的z轴差值

//2.世界转屏幕坐标

Camera.main.WorldToScreenPoint();

//3.世界转视口坐标

Camera.main.WorldToViewportPoint();

//4.视口转世界坐标

Camera.main.ViewportToWorldPoint();

//5.视口转屏幕坐标

Camera.main.ViewportToScreenPoint();

//6.屏幕转视口坐标

Camera.main.ScreenToViewportPoint();

UGUI内部坐标转换示例

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformChange : MonoBehaviour
{
    public GameObject root2;
    public GameObject go2;

    void Start()
    {
        //方法1:
        //转世界坐标
        Vector3 origin = transform.TransformPoint(Vector3.zero);
        //转局部坐标
        Vector3 des = root2.transform.InverseTransformPoint(origin);
        //局部坐标赋值
        go2.transform.localPosition = des;
        //方法2:
        //世界坐标直接赋值
        transform.position = go2.transform.position;
        
    }

}

UI框架免费课程:

打造基于MVC的UI框架Unity MVC UI框架icon-default.png?t=LA92https://bycwedu.vipwan.cn/promotion_channels/1789077446

### Unity 中坐标系转换 在 Unity 中,不同类型的坐标系之间存在多种转换方式。为了实现这些转换,开发者通常会利用 `Transform` 组件所提供的属性和方法。 对于从屏幕空间到视口坐标的转换,可以使用如下代码片段[^1]: ```csharp Vector3 viewportPosition = Camera.main.ScreenToViewportPoint(Input.mousePosition); ``` 当涉及到物体坐标系与世界坐标系间的相互转化时,则依赖于 `Transform` 类中的几个重要方向向量以及变换矩阵。具体来说: - 物体坐标系转至世界坐标系可通过直接读取 `position`, `rotation` 或者组合成完整的变换矩阵来完成; - 反之亦然,在已知某个点的世界位置的情况下,想要获取其相对于特定物体的位置,可借助 `InverseTransformPoint()` 方法;同理还有用于处理旋转和平移的方法如 `InverseTransformDirection()`. 另外值得注意的是局部坐标系的概念——即物体相对于父级而言所处的空间描述。这使得即使是在复杂层次结构下也能方便地执行各种几何计算而不必担心全局定位问题的发生[^4]. 最后关于更广泛的坐标体系间映射(比如惯性导航系统INS数据输入),则可能牵涉到更加复杂的数学运算过程,包括但不限于四元数插值、欧拉角解析等内容[^3]。 #### 示例:将本地坐标转化为世界坐标并打印出来 ```csharp using UnityEngine; public class CoordinateSystemConversion : MonoBehaviour { void Start(){ Vector3 localPos = new Vector3(0f, 2f, 5f); // 定义一个本地坐标下的三维矢量 Transform parentTrans = GameObject.Find("ParentObject").transform; // 获取作为参照物的游戏物件 Debug.Log(parentTrans.TransformPoint(localPos)); // 输出该点对应的世界坐标表示形式 } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

萧寒大大

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

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

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

打赏作者

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

抵扣说明:

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

余额充值