unity3d中Transform组件变量详解
2015-06-16 20:06 糯米粥 阅读(12565) 评论(1) 编辑 收藏 举报Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎。通过一张图片来看看它的属性
你可以在通过代码查看这些属性的区别
Debug.Log("position " + transform.position); //世界坐标的位置 Debug.Log("localPosition " + transform.localPosition); //相对于父位置的坐标 即把父物体当作自己的中心 Debug.Log("eulerAngles " + transform.eulerAngles);//世界坐标欧拉⾓度 Debug.Log("localEulerAngles " + transform.localEulerAngles);//相对于⽗级的变换的旋转欧拉⾓度 Debug.Log("localScale " + transform.localScale);//相对于父位置的缩放 Debug.Log("localRotation " + transform.localRotation);//相对于父位置的旋转 Debug.Log("rotation " + transform.rotation);//世界坐标的旋转
上面提到了父位置?那是什么意思呢?
现在创建两个cube 命名为cube1和cube2 把cube2作为cube1的子对象,如图。
可以看到,cube1的坐标(1,0,0) cube2的坐标为(0,0,5)
那么通过transform.localPosition获取cube2的坐标则为(0,0,5)
如果用transform.position获取cube2的坐标则为(1,0,5)
那么写个脚本测试下。写个脚本挂载到cube2上
在脚本的Start方法中如下写
void Start() { Debug.Log("cube2的世界坐标为:" + transform.position); Debug.Log("cube2的本地坐标为:" + transform.localPosition); }
运行后看结果
因为:cube2把父对象(Cube1)当作了自己的的中心。所以是(0,0,5),那它的世界坐标则为(1,0,5),知道了这个position那localRotation也是同样的道理
但有没有注意到。这里的欧拉角(eulerAngles),rotation和Rotate(),都是用于旋转,那他们有什么区别呢。刚开始我也是犯糊涂
Rotate()方法需要一个vector3三维向量,rotation是用四元素旋转(Quaternion)
来看看圣典上面的解释:
欧拉角(eulerAngles)旋转很好理解。当你改变Transform组建中的 x,y,z的角度。就是改变其欧拉角
现在来看看rotation属性和Rotate()方法之间有什么区别
我认为通过测试是对两者差异的最好理解。
先看Rotate()方法
在场景中创建一个Capsule,写个脚本。代码如下
void Update() { transform.Rotate(Vector3.up * 5); }
运行看看效果:
可以看到对象是旋转一直是在累加5,如果你感觉不出来。我这里调试。一帧一帧给你看
然后用旋转同样的角度。测试rotation属性
void Update() { transform.rotation = Quaternion.Euler(Vector3.up * 5); }
同样看效果
从上图可以看出,Capsule旋转到5就不动了。也就是每次旋转都是同样的值,
所以:我的理解是:
Rotate()方法是:旋转多少度。在原有的基础上累加,即旋转了多少角度。又旋转了多少角度,是在原有的基础上在旋转
rotation属性是:旋转到某个角度,就是是在update中每帧都执行(我这里测试是放在了update中)。但每次旋转到的角度动是5,所以是旋转到5度。一直都是
比如你只想让他旋转到多少,用rotation;假如想让他一直转,可以用Rotate
rotation直接改变了数值,以达到旋转效果
Rotate应用一个的旋转角度每秒1度慢慢的旋转物体
当然:rotation()还可以通过插值旋转,
关于插值的理解:
http://www.unitymanual.com/blog-42778-2524.html?_dsign=7036aadd
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?