Unity API 解析(8)—— Quaternion 类

四元数 —— 由x,y,z 和 w 这4个分量组成,属于struct 类型

用来存储和表示对象的选择角度

 

eulerAngles 属性 —— 欧拉角

对GameObject 对象的Transform进行欧拉角的变换次序是,先绕z轴旋转相应的角度,再绕x轴旋转相应的角度,最后y轴 —— 不同的旋转次序得到的最终状态不同

using UnityEngine;
using System.Collections;

public class EulerAngle_ts : MonoBehaviour
{
    public Transform A, B;
    Quaternion rotations=Quaternion.identity;
    Vector3 eulerAngle = Vector3.zero;
    float speed = 10.0f;

    void Update()
    {
        //第一种方式,将Quaternion 赋值给 transform的rotation
        rotations.eulerAngles = new Vector3(0.0f, speed * Time.time, 0.0f);
        A.rotation = rotations;
        //第二种方式,将三维向量代表的欧拉角直接赋值给 transform的eulerAngles
        eulerAngle = new Vector3(0.0f, speed * Time.time, 0.0f);
        B.eulerAngles = eulerAngle;
    }
}

SetFromToRotation —— 创建rotation实例

用于创建一个从fromDirection到toDirection的rotation

不可直接使用 transform.rotation.setFromToRotation(v1,v2) 方式进行设置,只能将实例化的Quaternion 赋值给 transform.rotation

using UnityEngine;
using System.Collections;

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.0f,1.0f,0.0f), Color.black);
        Debug.DrawLine(C.position, C.TransformPoint(Vector3.up*1.5f), Color.yellow);
	}
}

SetLookRotation  —— 设置Quaternion 实例的朝向

Quaternion q1 = Quaternion.identity;

q1.SetLookRotation(v1,v2);

transform.rotation = q1;

transform.forward 方向与v1方向相同

transform.right 垂直于Vector3.zero ,v1 和 v2 这3点构成的平面

不可以直接使用 transform.rotation.SetLookRotation(v1,v2) 的方式来使用,应该实例化一个Quaternion然后对其使用SetLookRotation 最后赋值给transform.rotation

ToAngleAxis —— Quaternion 实例的角轴表示

此方法通常和静态方法 AngleAxis(angle:float , axis : Vector3) 联合使用,使得一个物体的rotation 始终和另一个物体的rotation保持一致

Angle —— Quaternion 实例间夹角

用于返回从参数a到参数b变换的夹角 —— 返回的夹角不是某个局部坐标轴向变换的夹角,而是GameObject 对象从状态a转换到状态b使需要旋转的最小夹角

Dot —— 点乘

Euler —— 欧拉角对应的四元数

返回欧拉角Vector3 对应的四元数实例

FromToRotation —— Quaternion 变换

Inverse —— 逆向Quaternion的值

Lerp —— 线性插值

LookRotation —— 设置Quaternion的朝向

Slerp —— 球面插值

时间: 2024-11-12 23:01:33

Unity API 解析(8)—— Quaternion 类的相关文章

Unity API 解析 学习

1 Application类 2 Camera类 3 GameObject类 4 HideFlags类 5 Mathf类 6 Matrix4x4类 7 Object类 8 Quaternion类 9 Random类 10 Rigidbody类 11 Time类 12 Transform类 13 Vector2类 14 Vector3类 1 Application类 1 using UnityEngine; 2 using System.Collections; 3 4 public class

【Unity】6.8 Quaternion类(四元数)

分类:Unity.C#.VS2015 创建日期:2016-04-20 一.四元数的概念 四元数包含一个标量分量和-个三维向量分量,四元数Q可以记作: Q=[w,(x,y,z)] 在3D数学中使用单位四元数来表示旋转,对于三维空间中旋转轴为n,旋转角度为a的旋转,如果用四元数表示,四个分量分别为: w=cos(a/2) x=sin(a/2)cos(bx) y=sin(a/2)cos(by) z=sin(a/2)cos(bz) 其中bx.by.bz分别为旋转轴的x,y,z分量. 从上面的描述中可以看

Unity API 解析(7)—— Object 类

Object 类是Unity中所有对象的基类   GetInstanceID -- Object 对象ID 每个对象在工程中都有唯一的ID,并且从程序开始运行到结束,除非对象被销毁,否则每个实例对应的ID都不会改变 从GameObject.CreatePrimitive() 或 Object.Instantiate() 中创建或克隆的每个名字相同的GameObject对象都有唯一的ID using UnityEngine; using System.Collections; public cla

Unity API 解析(9)—— Rigidbody 类

模拟 GameObject 对象在现实世界中的物理特性(重力,阻力,质量,速度) 对Rigidbody 对象属性的赋值代码通常放在脚本的OnFixedUpdate 方法中   collisonDetectionMode 属性 -- 碰撞检测模式 刚体的碰撞检测模式有3种 Discrete -- 静态离散检测模式 Continuous -- 静态连续监测模式 ,一般用在高速运动刚体的目标碰撞体上 ContinousDynamic -- 最强的连续动态检测模式 drag 属性 -- 刚体阻力 dra

Unity API 解析(4)—— HideFlags 类

HideFlags 为枚举类,用于控制object对象的销毁方法以其在监视面板中的可视性   DontSave 保留对象到新场景 如果GameObject 对象被HideFlags.DontSave标识,则在新Scene中GameObject的所有组件将被保留下来,但其子类GameObject对象不会被保留到新scene中 不可对GameObject对象的某个组件如Transform进行HideFlags.DontSave标识,否则无效 即使程序已经退出,被HIdeFlags.DontSave

Unity API 解析(3)—— GameObject 类

GameObject 类是Unity场景中所有实体的积累.一个GameObject对象通常由多个组件component组成,且至少含有一个transform组件.   activeSelf 属性 -- GameObject的Active标识 activeInHierarchy 属性的功能是返回GameObject实例在程序运行时的激活状态,它只有当GameObect实例的状态被激活时才会返回true.而且它会受父类对象激活状态的影响.如果其父类至最顶层的对象中有一个对象未被激活,activeIn

Unity API 解析(6)—— Matrix4x4 类

通常用在如摄像机的非标准投影变换等   MultiplyPoint 方法 -- 投影矩阵变换 对点v进行投影矩阵变换 主要用于Camera的投影变换,对于一般物体的矩阵变换用MultiplyPoint3x4方法,不涉及投影变换,计算速度更快 MultiplyPoint3x4 -- 矩阵变换 MultiplyVector 方法 -- 矩阵变换 对方向向量v进行矩阵变换 using UnityEngine; using System.Collections; public class Multipl

Unity API 解析(9)—— Random 类

不可实例化,只有静态属性和静态方法 insideUnitCircle -- 园内随机点 返回半径为1的园内的随机点坐标,Vector2类型 insideUnitSphere -- 半径为1的球内的随机点坐标 onUnitShper  -- 半径为1的球表面的随机点的坐标 using UnityEngine; using System.Collections; public class insideUnitCircle_ts : MonoBehaviour { public GameObject

Unity API 解析(10)—— Time 类

realtimeSinceStartup 属性 -- 程序运行实时时间   smoothDeltaTime 属性 -- 平滑时间间隔 主要用在 FixedUpdate 方法中需要平滑过渡的计算   time 属性 -- 程序运行时间 从游戏启动到现在