物體旋轉:Quaternion/eulerAngles四元數與尤拉角 u3d學習總結筆記本
阿新 • • 發佈:2018-11-17
目錄
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;
//該四元數,相當於“無旋轉”:這個物體完全對齊於世界或父軸。