讲解的 Unity 中几种不同的坐标系与其之间的转换,以及汇总物体的移动和旋转方法
本文原地址:Unity学习—坐标系与空间变换
坐标系
坐标系种类
Unity 中使用到的坐标系分为以下四种
- 世界坐标系 Word Space
- 即世界空间使用的坐标系,基本单位 unit,x 正方向:左向右, y 正方向:下向上,z 正方向:屏外向屏内,
- 任何物体使用 Transform.position 即可获得世界坐标值
- 场景中根物体使用的就是世界坐标,可在 Inspector 查看世界坐标值
- 对于非根物体则以父物体位置为原点位置使用本地坐标系 Local Space,即相对父物体位置,该物体 Inspector 数值为本地坐标值,可使用 Transform.localposition 获取本地坐标值
- 屏幕坐标系 Screen Space
- 基本单位像素,屏幕左下角为(0,0),右上角为(Screen.width,Screen.height),即实际运行屏幕下的游戏窗口像素值,z 为相机世界坐标单位值
- Input.mousePosition 获取的鼠标坐标,Input.GetTouch(0).position 获取触摸坐标
- 视口坐标系 Viewport Space
- 左下角为(0,0),右上角为(1,1),z 为相机世界坐标单位值
- 适合用于坐标系转换
- UGUI 坐标系 UGUI Space
- 基本单位像素,屏幕左上角为(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 轴在世界坐标系中所指方向
非刚体变换
非刚体物体在移动或旋转时不检测碰撞
非刚体移动
- Transform.positon 世界位置坐标
- Transform.localPostion 本地位置坐标
- Transform.Translate(Vector3 translation, Space relativeTo = Space.Self)
- Transform.Translate(float x, float y, float z, Space relativeTo = Space.Self)
- Transform.Translate(Vector3 translation, Transform relativeTo)
- 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);
}

本文详细介绍了Unity中的世界坐标系、本地坐标系、屏幕坐标系和视口坐标系,以及它们之间的转换。同时,文章讲解了非刚体和刚体在移动、旋转时的不同方法,包括Transform和Rigidbody组件的各种变换函数,为Unity开发者提供了坐标变换和物体运动的实用指南。
最低0.47元/天 解锁文章
5144

被折叠的 条评论
为什么被折叠?



