1. 程式人生 > >物體旋轉:Quaternion/eulerAngles四元數與尤拉角 u3d學習總結筆記本

物體旋轉:Quaternion/eulerAngles四元數與尤拉角 u3d學習總結筆記本

目錄

1.獲取兩個物體的向量/角度

2.指定旋轉到角度

3.指向某個位置

4.自軸旋轉

5.繞軸旋轉

6.無旋轉  (這個物體完全對齊於世界或父軸)


//=========================================

1.獲取兩個物體的向量/角度

Vector3 dir = enemy.position-player1.position;
//獲取尤拉角向量,player1指向enemy
Quaternion target = Quaternion.LookRotation(dir);
//轉換成四元數旋轉角,指向敵人
player1.rotation=Quaternion.Slerp(player1.rotation,target,Time.deltaTime*30);
//緩慢旋轉*速度
//在a和b之間的旋轉方法,引數t被夾在0和1的範圍內。//線性差值
//ai自瞄、導彈等

返回目錄

2.指定旋轉到角度

//MoveRotation適用於頻繁改變,推薦使用這種,較為平滑

//需要獲取Rigidbody元件

public Rigidbody playerRgd;
//===========================================
playerRgd.MoveRotation(Quaternion.Slerp(playerRgd.rotation,target,Time.deltaTime*7));
		//漸變旋轉*速度

playerRgd.MoveRotation(Quaternion.RotateTowards(playerRgd.rotation,target,Time.deltaTime*100));
		//勻速旋轉*速度...需要一個較大的值

//target目標角度(四元數)

返回目錄

3.指向某個位置

transform.LookAt(player1.position);//注視目標位置
Ray ray = camera.ScreenPointToRay(Input.mousePosition);

Vector3 dir = (ray.origin+ray.direction*100)-gameobject.transform.position;
//獲取相機射線的尤拉角向量( gameobject 炮塔注視射線的角度)
//不明:原點+方向=真實方向位置(目標的世界座標)

//目標的世界座標 - gameobject炮塔的世界座標 = 炮塔注視目標的向量


Quaternion target = Quaternion.LookRotation(dir);//計算得出四元數角度

gameobject.MoveRotation(Quaternion.RotateTowards(gameobject.rotation,target,Time.deltaTime*25));
	//炮塔跟隨轉向到目標向量
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Quaternion target = Quaternion.LookRotation( new Vector3 (h,0,v));
//獲取鍵盤向量角度(wsad)
transform.rotation =Quaternion.RotateTowards(transform.rotation,target,Time.deltaTime*rotateSpeed*100);
//勻速旋轉*速度...需要一個較大的值

返回目錄

4.自軸旋轉

rigidbody001.angularVelocity = transform.up*h*angularSpeed;	
//剛體.角速度向量=變換.物體的綠色軸*方向*剛體的角速度向量
transform.Rotate(new Vector3(0,0,-speed * Time.deltaTime));//座標旋轉
transform.Rotate(Vector3.up * Time.deltaTime,Space.Self);
//Space.Self區域性座標
//Space.World世界座標

返回目錄

5.繞軸旋轉
target為中心,以Vector3.up為軸進行旋轉,類似於圍繞某一點公轉。

transform.RotateAround(target.position, Vector3.up, 20 * Time.deltaTime);  

使物體繞y軸旋轉,z軸一直指向target

transform.LookAt(player1.position);//注視目標位置

返回目錄

6.無旋轉  (這個物體完全對齊於世界或父軸)

transform.rotation = Quaternion.identity;
//該四元數,相當於“無旋轉”:這個物體完全對齊於世界或父軸。 

返回目錄