查看: 19011|回复: 124

[在unity中制作] 旋转和unity意识

  [复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2016-7-6 23:33:57 | 显示全部楼层 |阅读模式
概要
在3D应用旋转通常是两种方式中的一种代表,四元数与欧拉角。每个人都有自己的用途和缺点。Unity使用四元数内,但显示等效的欧拉角的值在督察让您轻松编辑。
欧拉角和四元数之间的差异欧拉角
有一个简单的欧拉角表示,即三角值为X,Y和Z,应用顺序。应用欧拉旋转到一个特定的对象,每个旋转值依次应用,在相应的轴旋转。
  • 利益:欧拉角有人直观的“可读”的格式,由三角。
  • 利益:欧拉角可以代表通过转动超过180度从一个方向到另一个旋转
  • 限制患:欧拉角万向节锁。当应用三旋转,反过来,将导致第三轴指向同一个方向上的轴作为第一或第二旋转是可能的。这意味着“自由度”已经失去了,因为第三的旋转值不能被应用在一个独特的轴。
四元数
Quaternions can be used to represent the orientation or rotation of an object. This representation internally consists of four numbers (referenced in Unity as x, y, z & w) however these numbers don’t represent angles or axes and you never normally need to access them directly. Unless you are particularly interested in delving into the 数学班, you only really need to know that a Quaternion represents a rotation in 3D space and you will never normally need to know or modify the x, y & z properties.
在一个向量可以表示一个位置或方向相同的方式(这里的方向是从原点测量),一个四元数可以表示一个方向或旋转,旋转是由旋转的“起源”或“测量身份“。因为它的旋转是以这种方式测量从一个方向到另一个,一个四元数不能代表一个旋转超过180度。
  • 利益:四旋转不遭受万向节锁。
  • 限制:一个数不能代表一个旋转超过180度的任何方向。
  • 限制:一个四元数的数字表示不直观易懂。
在统一所有游戏物体旋转的内部存储为四元数,因为利益大于限制。
在变换督察然而,我们显示使用欧拉角的旋转,因为这是比较容易理解和编辑。新的价值观进入一个游戏物体的旋转检查员转换“引擎盖下”为对象的一个新的四元数旋转值。
旋转和unity意识 一个游戏物体的旋转显示和编辑为欧拉角的督察,但内部存储为一个四元数
作为一个副作用,它在检查输入值是可能的,说,X:0,0,:365,Z:一个游戏对象的旋转。这是一个价值不可能代表一个数,所以当你打起你会看到旋转对象的值的变化X:0,0,:5,Z:(左右)。这是因为旋转转化为四元数不具有“全旋转360度加5度”的概念,而只是被设置为相同的旋转的结果。
对脚本
当处理脚本处理旋转,你应该使用的四类及其函数来创建和修改旋转值。在某些情况下,它是有效利用欧拉角,但你应该记住: -你应该使用的四类函数处理欧拉角 检索,修改和重新应用欧拉值从一个旋转可导致意外。
创建和操作数直接
统一的四类有很多功能,允许你创建和操纵的旋转而不需要在所有使用欧拉角。例如:
创建:
  • quaternion.lookrotation
  • quaternion.angleaxis
  • quaternion.fromtorotation
manipulating:
  • 四元插值。
  • 逆元。
  • quaternion.rotatetowards
  • 旋转变换。 & transform.rotatearound
然而有时需要在脚本中使用欧拉角。在这种情况下,重要的是要注意,你必须保持你的角度变量,只有使用他们申请他们为欧拉角你旋转。而检索欧拉角是可能的一个四元数,如果你检索、修改和重新申请,会出现问题。
这里是一些例子错误通常采用试图绕X轴的物体以每秒10度的旋转一个假设的例子。这是你应该避免
  1. <font size="4" face="楷体, 楷体_GB2312" color="#0000ff    // rotation scripting mistake #1
  2.     // the mistake here is that we are modifying the x value of a quaternion
  3.     // this value does not represent an angle, and will not produce desired results
  4.    
  5.     void Update () {
  6.    
  7.         var rot = transform.rotation;
  8.         rot.x += Time.deltaTime * 10;
  9.         transform.rotation = rot;
  10.         
  11.     }
  12.     // rotation scripting mistake #2
  13.     // the mistake here is that we are reading, modifying then writing the Euler
  14.     // values from a quaternion. Because these values calculated from a Quaternion,
  15.     // each new rotation may return very different Euler angles, which may suffer from gimbal lock.
  16.         
  17.     void Update () {
  18.         
  19.         var angles = transform.rotation.eulerAngles;
  20.         angles.x += Time.deltaTime * 10;
  21.         transform.rotation = Quaternion.Euler(angles);

  22.     }</font>
复制代码

这里是在脚本中使用欧拉角为例正确地
  1. <font size="4" face="楷体, 楷体_GB2312" color="#0000ff    // rotation scripting with Euler angles correctly.
  2.     // here we store our Euler angle in a class variable, and only use it to
  3.     // apply it as a Euler angle, but we never rely on reading the Euler back.
  4.         
  5.     float x;
  6.     void Update () {
  7.         
  8.         x += Time.deltaTime * 10;
  9.         transform.rotation = Quaternion.Euler(x,0,0);

  10.     }</font>
复制代码

对动画的含义
许多三维制作软件包,而且统一的内部动画窗口,允许你使用欧拉角旋转过程中指定一个动画。
这些旋转值常常超过范围的可表达性四元数。例如,如果一个对象可以旋转720度的地方,这可以通过欧拉角X代表:0,Y 720,Z 0。但这不是由一个四元数值表示。
Unity的动画窗口
统一的动画窗口内,有选项,允许您指定如何转动应使用四元数和欧拉插值插值。通过指定欧拉插值你告诉统一要由指定的运动的全方位角。用四元数旋转而你说你只想要旋转结束在一个特定的方向,统一使用四元插值和旋转在短距离到那里。看到利用动画曲线关于这方面的更多信息。
外部动画源
进口从外部来源的动画时,这些文件通常包含在欧拉格式的动画旋转关键帧。统一的默认行为是重采样这些动画生成的一种新的四元每帧动画关键帧,以避免任何情况下关键帧之间的旋转可能会超过四元数的有效范围。
例如,想象两关键帧,6帧外,值为X 0在第二帧的第一帧和270。没有重采样,这两个关键帧之间的四元插值会旋转90度,在相反的方向,因为那是从第一方向的第二方向的捷径。然而通过重采样和添加的每一帧,一帧,现在只有45度旋转关键帧之间,将正常工作。
还有一些情况下,甚至与重采样-进口动画的四元数表示可能不符合原来的不够紧密,因此,在统一的5.3起有选择关闭动画重采样,这样就可以在运行时使用原始动画关键帧,而欧拉。有关更多信息,参见动画曲线的进口欧拉旋转。



回复

使用道具 举报

0

主题

868

帖子

2897

积分

vip会员

Rank: 1

积分
2897
发表于 2016-7-13 19:29:20 来自手机 | 显示全部楼层
真是是好人啊,,过来看看
回复 支持 反对

使用道具 举报

0

主题

880

帖子

2888

积分

vip会员

Rank: 1

积分
2888
发表于 2016-7-13 19:35:43 来自手机 | 显示全部楼层
加油摸摸大,感谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

895

帖子

2946

积分

vip会员

Rank: 1

积分
2946
发表于 2016-7-13 20:09:44 来自手机 | 显示全部楼层
不错,我喜欢这个,看看多少金币哦
回复 支持 反对

使用道具 举报

0

主题

796

帖子

2637

积分

vip会员

Rank: 1

积分
2637
发表于 2016-7-13 20:38:47 | 显示全部楼层
什么游戏看看
回复 支持 反对

使用道具 举报

0

主题

861

帖子

2874

积分

vip会员

Rank: 1

积分
2874
发表于 2016-7-13 21:17:10 来自手机 | 显示全部楼层
好棒好棒好棒,谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

853

帖子

2858

积分

vip会员

Rank: 1

积分
2858
发表于 2016-7-13 21:17:10 来自手机 | 显示全部楼层
谢谢楼主分享哈!
回复 支持 反对

使用道具 举报

0

主题

862

帖子

2831

积分

vip会员

Rank: 1

积分
2831
发表于 2016-7-13 21:57:50 | 显示全部楼层
有些买不起了,看看把
回复 支持 反对

使用道具 举报

0

主题

940

帖子

3113

积分

vip会员

Rank: 1

积分
3113
发表于 2016-7-13 22:15:02 | 显示全部楼层
这个不错这个不错这个不错
回复 支持 反对

使用道具 举报

0

主题

856

帖子

2819

积分

vip会员

Rank: 1

积分
2819
发表于 2016-7-13 22:46:50 来自手机 | 显示全部楼层
恩,好资源~ 哈哈~
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部