unity ui坐标转屏幕坐标_Unity学习—坐标系与空间变换

本文详细介绍了Unity中的世界坐标系、本地坐标系、屏幕坐标系和视口坐标系,以及它们之间的转换。同时,文章讲解了非刚体和刚体在移动、旋转时的不同方法,包括Transform和Rigidbody组件的各种变换函数,为Unity开发者提供了坐标变换和物体运动的实用指南。
摘要由CSDN通过智能技术生成

讲解的 Unity 中几种不同的坐标系与其之间的转换,以及汇总物体的移动和旋转方法

本文原地址:Unity学习—坐标系与空间变换

坐标系

坐标系种类

Unity 中使用到的坐标系分为以下四种

  1. 世界坐标系 Word Space
    1. 即世界空间使用的坐标系,基本单位 unit,x 正方向:左向右, y 正方向:下向上,z 正方向:屏外向屏内,
    2. 任何物体使用 Transform.position 即可获得世界坐标值
    3. 场景中根物体使用的就是世界坐标,可在 Inspector 查看世界坐标值
    4. 对于非根物体则以父物体位置为原点位置使用本地坐标系 Local Space,即相对父物体位置,该物体 Inspector 数值为本地坐标值,可使用 Transform.localposition 获取本地坐标值
  2. 屏幕坐标系 Screen Space
    1. 基本单位像素,屏幕左下角为(0,0),右上角为(Screen.width,Screen.height),即实际运行屏幕下的游戏窗口像素值,z 为相机世界坐标单位值
    2. Input.mousePosition 获取的鼠标坐标,Input.GetTouch(0).position 获取触摸坐标
  3. 视口坐标系 Viewport Space
    1. 左下角为(0,0),右上角为(1,1),z 为相机世界坐标单位值
    2. 适合用于坐标系转换
  4. UGUI 坐标系 UGUI Space
    1. 基本单位像素,屏幕左上角为(0,0),右下角为(Screen.width,Screen.height)

坐标系转换

// 本地→世界    
transform.TransformPoint(position);
// 世界→本地  
transform.InverseTransformPoint(position);
// 世界→屏幕  
camera.WorldToScreenPoint(position);  
// 世界→视口  
Camera.main.WorldToViewportPoint(position)
// 屏幕→视口  
camera.ScreenToViewportPoint(position);
// 视口→屏幕  
camera.ViewportToScreenPoint(position);
// 视口→世界  
camera.ViewportToWorldPoint(position);

空间变换

坐标系选择

世界坐标系 Space.World 与自身坐标系 Space.Self

Vector3.forward、Vector3.back、Vector3.left、Vector3.right、Vector3.up、Vector3.down 数值固定

transform.forward、 transform.right、transform.up 数值不定,依据物体自身旋转变化,如 transform.forward 为物体 z 轴在世界坐标系中所指方向

非刚体变换

非刚体物体在移动或旋转时不检测碰撞

非刚体移动

  1. Transform.positon 世界位置坐标
  2. Transform.localPostion 本地位置坐标
  3. Transform.Translate(Vector3 translation, Space relativeTo = Space.Self)
  4. Transform.Translate(float x, float y, float z, Space relativeTo = Space.Self)
  5. Transform.Translate(Vector3 translation, Transform relativeTo)
  6. Transform.Translate(float x, float y, float z, Transform relativeTo)
void Update()
{
    
     // 以每秒1个单位速度延世界坐标系y轴正方向移动
     transform.Translate(Vector3.up * Time.deltaTime, Space.World);
     // 以每秒1个单位速度延主相机本地坐标系x轴正方向移动
     transform.Translate(Vector3.right * Time.deltaTime, Camera.main.transform);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值