Unity API 解析(二) Quaternion类 四元素

来源:互联网 发布:数据库黑匣子 编辑:程序博客网 时间:2024/05/27 18:17

四元数用于表示旋转,Unity内使用Quaternion表示所有旋转。

Quaternion类实例属性

1.EulerAngles属性:欧拉角

基本语法

    public Vector3 eulerAngles{get;set;}

功能说明

此属性用来返回或设置Quaternion实例对应的欧拉角,使用如下:对GameObject对象的Transform进行欧拉角的变换次序是,按照X轴,Y轴,Z轴旋转。

实例演示

using System.Collections;using System.Collections.Generic;using UnityEngine;public class EulerAngles_ts : MonoBehaviour {    public Transform A, B;    Quaternion rotations = Quaternion.identity;    Vector3 eulerAngle = Vector3.zero;    float speed = 30.0f;    void Update()    {        //方法A:将Quaternion赋值给transform的rotation。        rotations.eulerAngles = new Vector3(0.0f, speed * Time.time, 0.0f);        A.rotation = rotations;        //方法B:将三维向量代表的欧拉角直接赋值给transform的eulerAngles。        eulerAngle = new Vector3(0.0f, speed * Time.time, 0.0f);        B.eulerAngles = eulerAngle;    }}

示例效果:

这里写图片描述

Quaternion类实例方法

1.SetFromToRotation方法:创建rotation实例

基本语法

public void SetFromToRotation(Vector3 fromDirection,Vector3 toDirection);

功能说明

此方法用于创建一个从fromDirection到toDirection的rotation.首先将GameObject对象自身的坐标x,y,z轴方向和世界坐标x,y,z轴方向一致,然后将GameObject对象自身坐标系中向量V1指向的方向转向V2方向。
using System.Collections;using System.Collections.Generic;using UnityEngine;public class SetFromToRotation_ts : MonoBehaviour {    public Transform A, B, C;    Quaternion q1 = Quaternion.identity;    void Update () {        //不可直接使用C.rotation.SetFromToRotation(A.position,B.position);        q1.SetFromToRotation(A.position,B.position);        C.rotation = q1;        Debug.DrawLine(Vector3.zero,A.position,Color.red);        Debug.DrawLine(Vector3.zero, B.position, Color.green);        Debug.DrawLine(C.position, C.position+new Vector3(0,1,0), Color.black);        Debug.DrawLine(C.position,C.TransformPoint(Vector3.up*1.5f), Color.yellow);    }}

示例效果:

这里写图片描述

2.SetLookRotation方法:设置Quaternion实例的朝向

基本语法

public void SetLookRotation(Vector3 view);public void SetLookRotation(Vector3 view,Vector3 up);

功能说明

此方法用于设置一个Quaternion实例的朝向.

实例演示

using System.Collections;using System.Collections.Generic;using UnityEngine;public class SetLookRotation_ts : MonoBehaviour {    public Transform A, B, C;    Quaternion q1 = Quaternion.identity;    void Update () {        q1.SetLookRotation(A.position, B.position);        C.rotation = q1;        Debug.DrawLine(Vector3.zero, A.position, Color.red);        Debug.DrawLine(Vector3.zero,B.position, Color.green);        Debug.DrawLine(C.position, C.TransformPoint(Vector3.right * 2.5f), Color.yellow);        Debug.DrawLine(C.position, C.TransformPoint(Vector3.forward * 2.5f), Color.gray);        Debug.Log("C.right与A的夹角:"+Vector3.Angle(C.right,A.position));        Debug.Log("C.right与B的夹角:" + Vector3.Angle(C.right, B.position));        Debug.Log("C.up与B的夹角:" + Vector3.Angle(C.up, B.position));    }}

示例效果:

这里写图片描述

3.ToAngleAxis方法:Quaternion实例的角轴表示

基本语法

public void ToAngleAxis(out float angle,out Vector3 axis);

功能说明

输出值angle和axis的含义:要将GameObject对象的rotation从Quaternion.Identity状态变换到当前状态,只需要将GameObject对象绕着axis的轴向(指世界坐标中)旋转angle角度即可。

实例演示

using System.Collections;using System.Collections.Generic;using UnityEngine;public class ToAngleAxis_ts : MonoBehaviour {    public Transform A, B;    float angle;    Vector3 axis = Vector3.zero;    void Update () {        A.rotation.ToAngleAxis(out angle,out axis);        B.rotation = Quaternion.AngleAxis(angle, axis);    }}

Quaternion类静态方法

1.Angle方法:Quaternion实例间夹角

基本语法

public static float Angle(Quaternion a,Quaternion b);

功能说明

返回a和b两者之间的角度。返回的夹角不是某个局部坐标轴向变换的夹角,而是GameObject对象从状态a转换到状态b时需要旋转的最小夹角。

实例演示

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Angle_ts : MonoBehaviour {    void Start() {        Quaternion q1 = Quaternion.identity;        Quaternion q2 = Quaternion.identity;        q1.eulerAngles = new Vector3(10,20,30);        float f1 = Quaternion.Angle(q1, q2);        float f2 = 0f;        Vector3 v1 = Vector3.zero;        q1.ToAngleAxis(out f2, out v1);        Debug.Log("f1:" + f1);        Debug.Log("f2:" + f2);        Debug.Log("q1的欧拉角:" + q1.eulerAngles +"  q1的rotation:"+q1);        Debug.Log("q2的欧拉角:" + q2.eulerAngles + "  q2的rotation:" + q2);   }}

实例效果:

这里写图片描述

2.Euler方法:欧拉角对应的四元素

基本语法

public static Quaternion Euler(float x, float y, float z);public static Quaternion Euler(Vector3 euler);

功能说明

返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(像这样的顺序)。

实例演示

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Euler_ts : MonoBehaviour {    void Update () {        //旋转90度        transform.rotation = Quaternion.Euler(new Vector3(0, 90, 0));    }}

3.Lerp 方法:线性插值

基本语法

public static Quaternion Lerp(Quaternion a, Quaternion b, float t);

功能说明

返回从参数from到to的线性插值。当参数t≤0时返回值为from,当参数t≥1时返回值为to。此方法执行速度比Slerp方法快,一般情况下可代替Slerp方法。

实例演示

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Slerp_ts : MonoBehaviour {    public Transform A;    public Transform B;    public Transform C;    public Transform D;    public float speed = 0.1F;    void Update()    {        C.rotation = Quaternion.Lerp(A.rotation, B.rotation, Time.time * speed);        D.rotation = Quaternion.Slerp(A.rotation, B.rotation, Time.time * speed);    }}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 13款卡宴 卡宴 多少钱 新卡宴报价 q7 卡宴 卡宴 suv 07款卡宴 x5 卡宴 众泰 卡宴 卡宴4.8t 卡宴白色 卡宴4.8 10款卡宴 卡宴 途锐 2007款卡宴 卡宴优惠 红色卡宴 换代卡宴 卡宴车钥匙 电动卡宴 卡宴绿色 紫色卡宴 卡宴和x5 进口卡宴 白色卡宴 卡宴2.0 卡宴 柴油 11款卡宴 卡宴颜色 卡宴4.5 黑色卡宴 卡宴质量 卡宴蓝色 卡宴4s店 卡宴2018款报价及图片 小卡宴40万左右 养一台卡宴需要多钱一年 别来无恙by卡宴 40万左右卡宴suv 2019款卡宴选配价目表 卡宴报价及图片 鬼迷心窍卡宴