Unity关于transform.TransformPoint的坐标转换

本文介绍了在Unity中如何使用Transform.TransformPoint进行坐标转换,以解决不同父物体下的子物体之间坐标调整的问题。通过将目标对象的世界坐标转换为本地坐标,实现了在不改变对象父子关系情况下,使两个对象重叠的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

之前在做项目的时候,有一个需求。需要对UI的操作对象进行一个位移动画,移动到另一参照物上。由于UI结构比较复杂,操作对象与参照对象,分别是不同父物体下的子物体,这就涉及到了本地坐标和世界坐标的转换。查了下API,发现Unity已经提供好了相应的接口,就是Transform.TransformPoint。于是只要理清相对坐标的概念,就非常的好处理了。

 

 

如图,创建了4个GameObject(Cube),我现在的目的是,再不改变obj4的父物体对象的情况下,让obj4与obj1重叠。由于obj4是obj3的子物体,那么obj4在Inspector面板下展示的坐标是相对obj3的本地坐标。如果想让obj4与obj1重叠,只局限于本地坐标的计算,是不可能得出想要的结果的。

 

我们必须通过转换成世界坐标系,再转换回本地坐标系得出想要的结果。

 

由于obj1使我们的目标,它相对于我们想要移动的对象的世界坐标为:

V1 =目标对象.transform.TransformPoint(操作对象.transform.localPosition);

 

世界坐标已经找到,再将此相对的世界坐标转换成操作对象的本地坐标:

操作对象.transform.InverseTransformPoint(v1);

 

所得的结果就是现在obj4与obj1重叠所需的本地坐标了。

为了方便测试,简单的写了点编辑器,证明结论正确。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值