第一種:
transform.Rotate(new Vector3(90, 0, 0));
//重載方式重載方式一 第一個參數是 x軸 旋轉度數,第二個參數是 Y 軸 旋轉度數 ,第三個參數是Z軸旋轉度數 ,
//第四個參數是自身還是世界坐標
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);
//重載方式二 第一個參數沿着誰旋轉 第二個參數是旋轉的角度 第三個參數是自身還是世界坐標
public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);
// 重載方式三 第一個參數沿着誰旋轉 第二個參數是沿着自身還是世界坐標 一般的默認世界旋轉
public void Rotate(Vector3 eulers, Space relativeTo = Space.Self);
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
public float speed; // 速度
void Update()
{
//以每秒1度的速度圍繞其局部X軸旋轉對象
transform.Rotate(Vector3.right * Time.deltaTime*speed);
// 以世界坐標的Y 軸進行旋轉
transform.Rotate(Vector3.up * Time.deltaTime, Space.World*speed);
}
}
第二種: 四元數旋轉
transform.rotation = Quaternion.Euler(45, 45, 45);
// 重載方式是一個參數是vector3 類型的數據 以下那兩個只是形式不一樣
public static Quaternion Euler(float x, float y, float z);
public static Quaternion Euler(Vector3 euler);
using UnityEngine;
public class Example : MonoBehaviour
{
void Start()
{
// 繞着Y 軸旋轉30 度
Vector3 rotationVector = new Vector3(0, 30, 0);
Quaternion rotation = Quaternion.Euler(rotationVector);
}
}
第三種種: 通過四元數 一個物體以一定的速度轉向目標物體
//通過t在a和b之間進行球面插值,將參數t夾在[0,1]范圍內。
transform.rotation = Quaternion.Slerp();
// 重載方式三個參數返回一個 Quaternion 值也就是一個transform.rotation 類型
//第一個參數是起點 第二是終點 第三個是所需要的時間
public static Quaternion Slerp(Quaternion a, Quaternion b, float t);
//這個用個官網示例
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public Transform from;
public Transform to;
private float timeCount = 0.0f;
void Update()
{
transform.rotation = Quaternion.Slerp(from.rotation, to.rotation, timeCount);
timeCount = timeCount + Time.deltaTime;
}
}
第四種:
// 繞着某一物體旋轉
transform.RotateAround();
// 回調函數 第一個參數是繞着某一物體旋轉,第二個是旋轉軸向 第三個參數是 旋轉的速度
public void RotateAround(Vector3 point, Vector3 axis, float angle);
// 官網示例代碼
using UnityEngine;
public class Example : MonoBehaviour
{
void Update()
{
// 讓物體以20度/秒的速度繞着地球原點旋轉。.
transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);
}
}
第五種:歐拉角旋轉 有旋轉的最大值 還有萬向鎖,但是本人不習慣使用歐拉角旋轉,大部分使用的都是四元數旋轉
其實歐拉角和四元素旋轉各有各的好處,最適合哪個就用哪個
using UnityEngine;
public class Example : MonoBehaviour
{
// 使用歐拉角指定一個絕對旋轉
float yRotation = 5.0f;
void Start()
{
// 打印旋轉x最大值
print(transform.eulerAngles.x);
// 打印旋轉y最大值
print(transform.eulerAngles.y);
// 打印旋轉z最大值
print(transform.eulerAngles.z);
}
void Update()
{
yRotation += Input.GetAxis("Horizontal");
transform.eulerAngles = new Vector3(10, yRotation, 0);
}
}