博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity关于transform.TransformPoint的坐标转换
阅读量:2167 次
发布时间:2019-05-01

本文共 1811 字,大约阅读时间需要 6 分钟。

 

之前在做项目的时候,有一个需求。需要对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重叠所需的本地坐标了。

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

using UnityEngine;using System.Collections;using System.Collections.Generic;public class InversePosition : MonoBehaviour{    public List
posList; [HideInInspector] public Transform selectTransform; [HideInInspector] public Transform targetTransform; void Start() { Print(); } public void Print() { //操作的obj的世界坐标 Debug.Log(string.Format("选择的物体({0})的世界坐标:{1}", selectTransform.name, selectTransform.transform.position)); //操作的obj的本地坐标 Debug.Log(string.Format("选择的物体({0})的本地坐标:{1}", selectTransform.name, selectTransform.transform.localPosition)); //目标obj的世界坐标 Debug.Log(string.Format("目标物体({0})的世界坐标:{1}", targetTransform.name, targetTransform.transform.position)); //目标obj的本地坐标 Debug.Log(string.Format("目标物体({0})的本地坐标:{1}", targetTransform.name, targetTransform.transform.localPosition)); //目标obj相对于操作obj的世界坐标(trabsform.TransformPoint) Vector3 v4 = targetTransform.transform.TransformPoint(selectTransform.localPosition); Debug.Log(string.Format("目标obj相对于选择obj的世界坐标(TransformPoint):{0}", v4)); //操作目标的最终位置 Debug.Log(selectTransform.transform.InverseTransformPoint(v4)); }}

 

 

 

转载地址:http://geszb.baihongyu.com/

你可能感兴趣的文章
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>
Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
查看>>
Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
查看>>
深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
查看>>
深入理解JVM虚拟机3:垃圾回收器详解
查看>>
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>