unity3d中Transform组件变量详解
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,如果你感觉不出来。我这里调试。一帧一帧给你看

然后用旋转同样的角度。测试rotation属性
void Update()
{ transform.rotation = Quaternion.Euler(Vector3.up * ); }
同样看效果

从上图可以看出,Capsule旋转到5就不动了。也就是每次旋转都是同样的值,
所以:我的理解是:
Rotate()方法是:旋转多少度。在原有的基础上累加,即旋转了多少角度。又旋转了多少角度,是在原有的基础上在旋转
rotation属性是:旋转到某个角度,就是是在update中每帧都执行(我这里测试是放在了update中)。但每次旋转到的角度动是5,所以是旋转到5度。一直都是
比如你只想让他旋转到多少,用rotation;假如想让他一直转,可以用Rotate
rotation直接改变了数值,以达到旋转效果
Rotate应用一个的旋转角度每秒1度慢慢的旋转物体
当然:rotation()还可以通过插值旋转,

关于插值的理解:
http://www.unitymanual.com/blog-42778-2524.html?_dsign=7036aadd
unity3d中Transform组件变量详解的更多相关文章
- LotusPhp中配置文件组件LtConfig详解
		LotusPhp中配置文件组件LtConfig是约定的一个重要组成部分,适用于多个场景,多数的LotusPhp组件如数据库,缓存,RBAC,表单验证等都需要用到配置组件,LtConfig配置组件也是L ... 
- Ubuntu中设置环境变量详解
		1, 为单一用户:.bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.打开用户主目录下的.bashrc,在这个文件中加入export PA ... 
- Windows系统中path环境变量详解
		在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ... 
- vSan中见证组件witness详解
		witness在vSan中作为见证组件其作用类似于WinServer中的仲裁磁盘,当Cluster中某一节点发生故障时,来判断该节点上的对象在哪一个新的节点上继续承载.此处需要强调的是,witness ... 
- Objective-C中 Self和 Super详解
		Objective-C中 Self和 Super详解 Objective-C 中Self 和 Super 详解本文要介绍的内容,在 Objective-C 中的类实现中经常看到这两个关键字 self ... 
- iOS中MVC等设计模式详解
		iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ... 
- c++中vector的用法详解
		c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ... 
- JScript中的条件注释详解(转载自网络)
		JScript中的条件注释详解-转载 这篇文章主要介绍了JScript中的条件注释详解,本文讲解了@cc_on.@if.@set.@_win32.@_win16.@_mac等条件注释语句及可用于条件编 ... 
- Scala 深入浅出实战经典 第55讲:Scala中Infix Type实战详解
		王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ... 
随机推荐
- .NET Core开发日志——Middleware
			熟悉ASP.NET架构的开发者一定对于HTTP Modules与HTTP Handlers不陌生.两者的作用主要是对网络请求执行特定的处理工作.而在.NET Core中,它们都被Middleware( ... 
- ubuntu登录时出现“一闪之后回到登录界面”的现象
			ubuntu登录时出现“一闪之后回到登录界面”的现象 虚拟机vmware 12.5.6 build-5528349 操作系统ubuntu 18.04 问题:登录时出现一闪之后回到登录界面的现象 解决方 ... 
- [No0000ED]IPSec策略之管理
			IP安全策略 @echo off :again set num= set ippolicyname= set ismmpfs= set keytime= set keyexpress= set new ... 
- CentOS 7 升级内核
			升级 CentOS 内核参考资料 1 升级 CentOS 内核参考资料 2 通过 /proc 虚拟文件系统读取或配置内核 Linux 内核官网 CentOS 官网 1. 关于 Linux 内核 Lin ... 
- wpf(Application 如何创建一个事件,及其Application相关的属性)
			1.如何关闭wpf程序.应用程序的关闭只有调用其shutdown方法才可以.shutdown有三种属性.OnLastWindowClose,OnMainWindowClose,OnExplicitSh ... 
- [skill][gdb][coredump][abrt] 使用abrt管理程序coredump
			abrt:Automatic bug detection and reporting tool https://github.com/abrt/abrt 常用的命令: abrt-auto-report ... 
- AES加解密所遇问题
			AES加解密后解密数据末尾携带多余空格,经查看是由于加密时数据不足16个字节自动补齐导致 解决办法:记录加密数据长度,解密后根据数据长度读取解密数据. 另外加密数据中可能存在0等数据,所以拷贝内容时最 ... 
- vue中封装一个全局的弹窗js
			/** * Created by yx on 2017/12/21. */ export default { /** * 带按钮的弹框 * <!--自定义提示标题,内容,单个按钮事件--> ... 
- Linux命令小计
			一.yum和apt-get的区别 Linux系统下安装包格式有:rpm包和deb包. pm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上 deb包主要应用于Debian系列包 ... 
- 如何处理浏览器缓存 加t
