unity3d中Transform组件 Rotate()和rotation变量详解

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值