坐稳,带你翱翔Unity3D的四种坐标系

3D坐标系是3D游戏开发的基础概念。一般3D软件都是采用笛卡尔坐标系来描述物体的坐标信息。笛卡尔坐标系分为左手坐标系和右手坐标系:,Unity用的是左手坐标系。

 

 

 

  • World Space(世界坐标):

以世界原点为坐标原点建立的三维坐标系,获得GameObject世界坐标的接口为Transform.position 。局部坐标系是GameObject以Parent的世界坐标点为坐标原点建立的三维坐标系,GameObject的局部坐标即与Parent的相对位置。若GameObject无Parent,其局部坐标与世界坐标相同,获得GameObject局部坐标系的接口为Transform.localPosition。

世界坐标转化为屏幕坐标 Camera.WorldToScreenPoint

世界坐标转化为视口坐标 Camera.WorldToViewportPoint
 

  • Screen Space(屏幕坐标):

以屏幕左下角为原点建立的一个二维坐标系,屏幕的左下角坐标为(0, 0),右上角为(Screen.width, Screen.height)。通过Input.mousePosition获取的鼠标坐标是一个屏幕坐标。

屏幕坐标转化为世界坐标 Camera.ScreenToWorldPoint

屏幕坐标转化为视口坐标 Camera.ScreenToViewportPoint
 

  • ViewPort Space(视口坐标):

视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

视口坐标转化为世界坐标 Camera.ViewportToWorldPoint

视口坐标转化为屏幕坐标 Camera.ViewportToScreenPoint

 

  • GUI坐标系:

GUI坐标是指通过OnGUI方法绘制UI时使用的坐标,这个坐标系与屏幕坐标系相似,它同样是以像素来定义的,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

 

四种坐标系的转换

1、世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。

2、屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。

3、视口坐标→屏幕坐标:camera.ViewportToScreenPoint();

4、视口坐标→世界坐标:camera.ViewportToWorldPoint();

 

局部坐标和世界坐标的转换:

1、cube为父节点,局部坐标为(50, 100, 0),把这个点转成世界坐标:

var worldPos = cube.transform.TransformPoint(new Vector3(50, 100, 0));

2、世界坐标为(30,60,100),转为以cube为父节点的局部坐标:

var localPos = cube.transform.InverseTransformPoint(new Vector3(30,60,100));

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

林新发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值