Unity世界坐标与本地坐标的一种转换方法

Unity有世界坐标、本地坐标(localposition)、UI坐标(这个我好像还没怎么用)、屏幕坐标等等,之前的一个项目需要考虑世界坐标转换为本地坐标,后来经过一番尝试,找到了一种比较取巧的方法。

首先,世界坐标是指物体在场景中的坐标,当某个物体没有父物体时,它的position即为世界坐标的position,rotation同理;本地坐标是物体相对于它的父物体的坐标而言( 父物体又套父物体的我还没有研究),这个相对坐标是以父物体本身为坐标轴进行计算的,与世界坐标没有必然联系。而对于没有父物体的物体,可以认为不存在本地坐标这种说法。另外有一点需要注意:当某个物体有父物体时,它的inspector栏transform中的position实际是localposition,即本地坐标。

那么如何进行两种坐标的互换呢?首先,本地坐标转世界坐标已经有前辈提出了一种方法:点击打开链接其核心用到的方法就是transform.TransformPoint( )。

之后我考虑如何将世界坐标转换为本地坐标(当然要相对某个“父”物体),没找到相关函数。后来脑瓜子一拍:子物体展示在inspector界面的不就是本地坐标嘛!所以有了如下的实现方式:在需要转换的世界坐标处建立一个空gameobject,将它的parent设置为你需要转换为对应本地坐标的“父”物体。然后空gameobject.transform.localPosition即为所求。

等等,为什么是localPosition而不是position呢?因为transform定义了这两个参数,分别代表它的本地坐标和世界坐标。

所以。。。。。。如果你想要获取一个子物体M的世界坐标,直接M.transform.position就搞定了!!!!!!

当然,如果你只有一个本地坐标想转换成世界坐标,又懒得为此创建一个空gameobject,那就用前文提到的前辈的方法吧~~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值