Unity 角度与旋转(四元数与欧拉角)

本文介绍了Unity中角度与旋转的表示方式,包括四元数和欧拉角的概念及差异。在Unity中,四元数用于表示旋转,而欧拉角更直观地显示旋转角度。通过检查器面板Rotation可以观察旋转,但脚本中实际存储为四元数。Rotate函数用于持续旋转,而Transform.eulerAngles用于转换到目标角度,需要注意欧拉角的累加问题。Unity还提供了Quaternion.Lerp方法实现插值旋转。理解并正确使用这些方法对于实现旋转效果至关重要。
摘要由CSDN通过智能技术生成

在Unity中,角度与旋转是一个比较复杂的事情,其实现方式也是有很多,但是使用的规则是比较复杂的,所以需要选择对应的方式来实现需要的效果

一、Unity角度的表示方式

在Unity中表示角度的方式主要有两种,四元数与欧拉角,两者的表示方式有很大的不同,需要深刻理解两者,才能更好的应用:

四元数(Quaternion):

  • 四元数可用于表示GameObject的方向或旋转。该表示法内部包含四个数字(在Unity中称为x,y,z和w),但是这些数字并不表示角度或轴,因此通常不需要直接访问它们。除非您对四元数的数学特别感兴趣,否则您只真正需要知道四元数表示3D空间中的旋转,并且通常不需要知道或修改x,y和z属性

欧拉角(EulerAngles):

  • 欧拉角相对于四元数更加直观,可以直接看到旋转的角度,欧拉角的取值范围在0到360度,我们通常对于具体的角度的旋转使用欧拉加是简单方便的一种方式。
二、检查器(Inspector)面板Rotation

在我们创建一个3D物体时,Transfrom组件上就会有Rotation这个属性,Untiy官方手册解释为围绕X、Y或者Z轴进行的旋转,当我们在Sence面板对物体进行旋转,同样就会在Transform组件在看到数字的变化。反之,我们在面板调整数字,同样Sence窗口物体也会做出旋转。
在这里插入图片描述

但是当我们在脚本调用Rotation并输出,Debug输出发现与Tansform组件中显示的数字并不相同,而是一个四元数,并且每个数字都是从-1到1,这是为什么呢。其实Rotation并不是和检查面板显示的那样,Rotation是一个四元数,而其数值的正负值往往代表的是旋转方向,而其数值大小0到1则对应0到180度的对应:
在这里插入图片描述

所以说,与其说在Transform面板Rotation是一个四元数,不如将其理解为欧拉角,这样便于直观的使用角度。

三、持续旋转

Rotate

持续旋转是比较常用的旋转方式,不注重旋转角度,更注重旋转的速度,比如车轮旋转、摩天轮旋转等等,这样的可以使用transform.Rotate()来完成。而Rotate()就相当于获取一个旋转速度

使用方式:
public void Rotate(Vector3 eulers, Space re

  • 15
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Unity四元数Quaternion)和欧拉角(Euler Angle)都是用来表示物体旋转的数学工具,但它们之间有很大的区别。 1. 表示方式不同 欧拉角使用三个角度值来表示旋转,通常是Yaw(偏航角)、Pitch(俯仰角)和Roll(翻滚角)。这三个角度可以分别表示绕X、Y、Z轴的旋转四元数则是由四个数值构成的,分别是实部和三个虚部,通常表示为(q0,q1,q2,q3)。其中实部q0表示旋转的余弦值,三个虚部q1、q2、q3则表示旋转的轴向。 2. 表示精度不同 欧拉角存在“万向锁”问题,即当物体绕两个轴的旋转角度相等时,会出现某个轴失效的情况。这种问题在计算机图形学中很常见,因此欧拉角的使用受到了限制。 四元数则不存在这种问题,因为它是四维的,可以表示任意旋转。同时,四元数旋转计算时也比欧拉角更高效、更精确。 3. 插值方式不同 欧拉角的插值方式通常使用线性插值或球面线性插值,但由于存在万向锁问题,实际应用中需要进行额外的处理。 四元数则可以使用球面线性插值(Slerp)或球面立方插值(Slerp+)进行插值。这些插值方式不仅避免了万向锁问题,而且可以保证插值后的结果仍然是合法的四元数。 综上所述,虽然欧拉角在某些场合下仍然有用,但在大多数情况下,四元数已经成为了计算机图形学中旋转表示的标准工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之凌儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值