Quaternion

四元数,用于表示旋转。

它们是紧凑的,不会出现万向节锁并且能够很容易被插值。Unity内使用Quaternion表示所有旋转。

然而,它们基于复数的并不容易被直观地理解,因此你没有必要访问或修改单个Quaternion组件(x,y,z,w);通常你只需把现有的旋转(例如,来自Transform)并使用它们来构造新的旋转(例如,在两个旋转间平滑地插值)。四元数函数你99%的时间你会使用它(其他函数仅额外使用)Quaternion.LookRotation, Quaternion.Angle, Quaternion.Euler, Quaternion.Slerp, Quaternion.FromToRotation, Quaternion.identity。

你可以使用Quaternion.operator *由另一个四元数来旋转一个旋转角度,或由一个旋转角度来旋转一个向量。

Variables 变量
x 四元数的X组件。不要直接修改这个,除非你很了解四元数
y 四元数的Y组件。不要直接修改这个,除非你很了解四元数
z 四元数的Z组件。不要直接修改这个,除非你很了解四元数
w 四元数的W组件。不要直接修改这个,除非你很了解四元数
this [int index] 分别使用 [0]、[1]、 [2]、 [3],访问x、y、z、w组件
eulerAngles 返回表示旋转的欧拉角度
Constructors 构造器
Quaternion 用给定的x、y、z、w组件,构造新的四元数。
Functions 函数
ToAngleAxis 转换一个旋转用“角-轴”表示
SetFromToRotation 创建一个从fromDirection到toDirection的旋转
SetLookRotation 创建一个旋转,沿着forward(z轴)并且头部沿着up(y轴)的约束注视
ToString 返回一个格式化好的四元数字符串
Class Variables 类变量
identity 同一性旋转(只读)。该四元数,相当于"无旋转":这个物体完全对齐于世界或父轴
Class Functions 类函数
operator * 组合旋转lhs和rhs
operator == 两个四元数相等?
operator != 两个四元数是不相等的?
Dot 两个旋转之间的点乘。
AngleAxis 绕axis轴旋转angle,创建一个旋转
FromToRotation 从fromDirection到toDirection创建一个旋转
LookRotation 创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视
Slerp 球形插值,通过t值from向to之间插值
Lerp 通过t值from向to之间插值,并且规范化结果
RotateTowards 旋转一个角度从from向to
Inverse 返回反向的旋转
Angle 返回a和b两者之间的角度
Euler 返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(像这样的顺序)

让一个模型始终朝向另一个模型

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookAtTest : MonoBehaviour {

    public Transform cube;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        Vector3 distance = cube.position - transform.position;
        transform.rotation = Quaternion.LookRotation (distance);
    }
}

缓慢转动

void Update () {
    Vector3 distance = cube.position - transform.position;
    Quaternion target = Quaternion.LookRotation (distance);
    transform.rotation = Quaternion.Slerp (transform.rotation, target, Time.deltaTime);
}

results matching ""

    No results matching ""