原文链接
版权声明:本文为CSDN博主「果冻喜之郎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/weixin_5132…
正文
1. transform.rotation 赋值四元数
float x;
void Update ()
{
x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(x,0,0);
}
Euler 返回一个旋转,它围绕 Z 轴旋转 z 度、围绕 X 轴旋转 x 度、围绕 Y 轴旋转 y 度(按该顺序应用)。
注意:将欧拉角存储在一个类变量中,并仅使用该变量作为欧拉角进行应用,但从不依赖于读回欧拉值。若从四元数读取、修改并写入欧拉值会造成 万向死锁。
错误实例:
void Update ()
{
var angles = transform.rotation.eulerAngles;
angles.x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(angles);
}
2. transform.Rotate 方法
void Update(){
transform.Rotate(new Vector3(0,1f,0),Space.Self);
}
- 第一个参数:每帧旋转的角度和绕的轴;
- 第二个参数:参考坐标系。
3. transform.RotateAround 方法
void Update(){
transform.RotateAround(transform.position,transform.up,Time.deltaTime * speed);
}
- 第一个参数:物体围绕旋转的位置;
- 第二个参数:旋转绕的轴;
- 第三个参数:角度
4. transform.eulerAngels 给欧拉角赋值
float x;
void Update ()
{
x += Time.deltaTime * 10;
transform.eulerAngles = new Vector3(0,x,0);
}
与第一种情况相同要注意 万向死锁。
5. Quaternion.identity 无旋转
void Update(){
transform.rotation = Quaternion.identity;
}
6. Quaternion.Slerp 球形插值(参数 3 不能为负)
Slerp在四元数 a 与 b 之间按比率 t 进行球形插值。参数 t 限制在范围 [0, 1] 内。Inverse返回 rotation 的反转。Lerp在 a 和 b 之间插入 t,然后对结果进行标准化处理。参数 t 被限制在 [0, 1] 范围内。
private float x = 0.0f;
public float speed;
void Update(){
x += Time.deltaTime * speed;
var target = Quaternion.Euler(0,x,0);
transform.rotation = Quaternion.Slerp(transform.rotation,target,Time.deltaTime * speed);
}
7. Rigidbody.angularVelocity
以 弧度每秒 为单位测量的刚体的角速度矢量。在大多数情况下,您不应直接修改它,因为这会导致不切实际的行为。
public Rigidbody rb;
void Update(){
rb.angularVelocity = new Vector3(0,2,0);
}
首先要获取物体的 刚体组件。三维向量作为角速度。
8. transform.LookAt 方法
物体绕 up 轴(Y 轴)转向 targe 方向。
public transform target;
void Update(){
transform.LookAt(target,transform.up);
}
9. Quaternion.FromToRotation 从 from 到 to 旋转
通常情况下,使用该方法对变换进行旋转,使其的一个轴(例如 Y 轴)跟随世界空间中的目标方向 toDirection。
void Start(){
transform.rotation = Quaternion.FromToRotation(Vector3.up,transform.forward);
}