Unity3D Quaternion各属性和函数测试
2015-08-27 09:43
211 查看
Quaternion属性与方法
一,属性:
x、y、z就不说了,只看一个eulerAngles,代码如下:
[C#] 纯文本查看 复制代码
?
效果:将物体绕y轴顺时针转30°,效果与transform.eulerAngles相同。物体rotation = (0,30,0)。但是不能直接为transform.rotation.eulerAngle赋值。
二,方法
1,function ToAngleAxis (out angle :float, out axis :Vector3) :void
[C#] 纯文本查看 复制代码
?
效果:将物体的旋转角度返回到angles和axis里(物体的z轴和世界坐标z轴的夹角)。
输入:transform.localEulerAngles=(0,0,0);
输出:angle=0, axis=(1,0,0);
输入:transform.localEulerAngles=(0,90,0);
输出:angle=90,axis=(0,1,0);
输入:transform.localEulerAngles=(270,0,0);
输出:angle=90,axis=(-1,0,0)
2,function SetFromToRotation (fromDirection :Vector3, toDirection :Vector3) :void
[C#] 纯文本查看 复制代码
?
效果:把物体的fromDirection旋转到toDirection
输入:a=Vector3(0,0,1); b=Vector3(0,1,0)//把z轴朝向y轴
输出: q=(-0.7,0,0,0.7); headUpDir=(0,1,0)
输入:a=Vector3(0,0,1); b=Vector3(1,0,0)//把z轴朝向x轴
输出: q=(0,0.7,0,0.7); headUpDir=(1,0,0)
输入:a=Vector3(0,1,0); b=Vector3(1,0,0)//把y轴朝向x轴
输出: q=(0,0,-0.7,0.7); headUpDir=(0,0,1)
3,function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
[C#] 纯文本查看 复制代码
?
效果:类似于LookAt()方法,使物体1始终注视着物体2
4, static operator * (lhs : Quaternion, rhs : Quaternion) : Quaternion
[C#] 纯文本查看 复制代码
?
效果:组合旋转lhs和rhs。旋转一个点,首先用lhs,然后用rhs旋转,与使用组合旋转相同。注意旋转不可交换: lhs*rhs不等于rhs*lhs。 我理解旋转的角度就是将*号两边的角度加起来。
5,static operator * (rotation : Quaternion, point : Vector3) : Vector3
[C#] 纯文本查看 复制代码
?
效果:将一个向量根据rotation旋转到另一个向量。
6,static function Dot (a : Quaternion, b : Quaternion) : float
效果:将两个Quaternion点乘,返回一个float值,意义待补充。
7,static function AngleAxis (angle : float, axis : Vector3) : Quaternion
[C#] 纯文本查看 复制代码
?
效果:将物体绕axis旋转angle度。
8,static function FromToRotation (fromDirection :Vector3, toDirection :Vector3) : Quaternion
[C#] 纯文本查看 复制代码
?
效果:跟SetFromToRotation差不多,区别是可以返回一个Quaternion。通常用来让transform的一个轴向(例如 y轴)与toDirection在世界坐标中同步。
9,static function LookRotation (forward :Vector3, upwards :Vector3 =Vector3.up) : Quaternion
效果:跟SetLootRotation差不多,区别是可以返回一个Quaternion。
10,static function Slerp (from : Quaternion, to : Quaternion, t :float) : Quaternion
[C#] 纯文本查看 复制代码
?
效果:球面插值,插值不是等角速度的,而是变速的。 会有越来越慢的感觉。
11,static function Lerp (from : Quaternion, to : Quaternion, t :float) : Quaternion
效果:与Slerp效果差不多,效率比Slerp高但是如果from和to相差过大效果会不好,会返回一个标准化的Quaternion。
12,static function RotateTowards (from : Quaternion, to : Quaternion, maxDegreesDelta :float) : Quaternion
效果:旋转一个角度从from向to。与Slerp基本相同,但这个函数的角速度永远不会超过maxDegreesDelta。负的maxDegreesDelta值将使旋转远离to。
13,static function Inverse (rotation : Quaternion) : Quaternion
效果:返回反向的旋转。
14,static function Angle (a : Quaternion, b : Quaternion) :float
[C#] 纯文本查看 复制代码
?
效果:返回a和b两者之间的角度。
15,static function Euler (x :float, y :float, z :float) : Quaternion
[C#] 纯文本查看 复制代码
?
效果:把旋转角度变成对应的Quaternion。
三,实例
[C#] 纯文本查看 复制代码
?
非常有意思的一个例子,来自unity官方工程ShadowDemoProject,效果是可以通过键盘使摄像机围绕一点自由旋转,类似于在一个球面上运动。
[C#] 纯文本查看 复制代码
?
这一句非常有意思,也很难理解,完全理解了这一句后,Quaternion在你手里会变的非常强大!
一,属性:
x、y、z就不说了,只看一个eulerAngles,代码如下:
[C#] 纯文本查看 复制代码
?
二,方法
1,function ToAngleAxis (out angle :float, out axis :Vector3) :void
[C#] 纯文本查看 复制代码
?
输入:transform.localEulerAngles=(0,0,0);
输出:angle=0, axis=(1,0,0);
输入:transform.localEulerAngles=(0,90,0);
输出:angle=90,axis=(0,1,0);
输入:transform.localEulerAngles=(270,0,0);
输出:angle=90,axis=(-1,0,0)
2,function SetFromToRotation (fromDirection :Vector3, toDirection :Vector3) :void
[C#] 纯文本查看 复制代码
?
输入:a=Vector3(0,0,1); b=Vector3(0,1,0)//把z轴朝向y轴
输出: q=(-0.7,0,0,0.7); headUpDir=(0,1,0)
输入:a=Vector3(0,0,1); b=Vector3(1,0,0)//把z轴朝向x轴
输出: q=(0,0.7,0,0.7); headUpDir=(1,0,0)
输入:a=Vector3(0,1,0); b=Vector3(1,0,0)//把y轴朝向x轴
输出: q=(0,0,-0.7,0.7); headUpDir=(0,0,1)
3,function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
[C#] 纯文本查看 复制代码
?
4, static operator * (lhs : Quaternion, rhs : Quaternion) : Quaternion
[C#] 纯文本查看 复制代码
?
5,static operator * (rotation : Quaternion, point : Vector3) : Vector3
[C#] 纯文本查看 复制代码
?
6,static function Dot (a : Quaternion, b : Quaternion) : float
效果:将两个Quaternion点乘,返回一个float值,意义待补充。
7,static function AngleAxis (angle : float, axis : Vector3) : Quaternion
[C#] 纯文本查看 复制代码
?
8,static function FromToRotation (fromDirection :Vector3, toDirection :Vector3) : Quaternion
[C#] 纯文本查看 复制代码
?
9,static function LookRotation (forward :Vector3, upwards :Vector3 =Vector3.up) : Quaternion
效果:跟SetLootRotation差不多,区别是可以返回一个Quaternion。
10,static function Slerp (from : Quaternion, to : Quaternion, t :float) : Quaternion
[C#] 纯文本查看 复制代码
?
11,static function Lerp (from : Quaternion, to : Quaternion, t :float) : Quaternion
效果:与Slerp效果差不多,效率比Slerp高但是如果from和to相差过大效果会不好,会返回一个标准化的Quaternion。
12,static function RotateTowards (from : Quaternion, to : Quaternion, maxDegreesDelta :float) : Quaternion
效果:旋转一个角度从from向to。与Slerp基本相同,但这个函数的角速度永远不会超过maxDegreesDelta。负的maxDegreesDelta值将使旋转远离to。
13,static function Inverse (rotation : Quaternion) : Quaternion
效果:返回反向的旋转。
14,static function Angle (a : Quaternion, b : Quaternion) :float
[C#] 纯文本查看 复制代码
?
15,static function Euler (x :float, y :float, z :float) : Quaternion
[C#] 纯文本查看 复制代码
?
三,实例
[C#] 纯文本查看 复制代码
?
[C#] 纯文本查看 复制代码
?
相关文章推荐
- Unity3d之Quaternion 学习与应用
- Unity3D 调用Android原生方法
- Unity5混音器DSP插件编写教程【一】
- 整合Unity游戏引擎和 Visual Studio Code 代码编辑器
- Unity 理解刚体(Rigidbody)和碰撞体(Collider)和触发器(Is Trigger)以及刚体休眠(Rigidbody Sleeping)
- unity3d dota 寻路
- Unity游戏开发中的对象池
- Unity3D 调用Android原生方法
- Unity3D之Quaternion学习与应用
- Unity中Instantiate物体失效问题
- Unity3D里Time时间体系的讲解与运用
- Unity Game Programming AI(2)有限状态机
- Unity—UGUI
- unity调用 安卓相册
- Unity Jonit(关节)
- Unity3d获得android和ios设备的唯一标识
- 【跟随】Kirill Muzykov大神 Unity UGUI(1)
- Unity接入移动MM支付(Android)
- Unity笔记 2D ROGUELIKE 实例详解
- Unity3D热更新全书-何谓热更新,为何热更新,如何热更新