unity3d中的Quaternion.LookRotation

android開發範例中的第二個粒子,是搖桿操做遊戲,模式相似於「迷你高爾」,殭屍包圍類型的設計遊戲。android

其中讓我注意到這個函數的使用很是特別:Quaternion.LookRotationweb

遊戲針對兩個平臺作了輸入配置。c#

在pc平臺上控制人物移動用正常的上下左右按鍵控制,然而人物的旋轉就變成了鼠標位置。函數

正常狀況咱們但願東西可以根據指定目標方向移動其實用lookat這個函數就能夠了。但這個地方用的方法原比lookat來的更加省事兒。測試

看看他是怎麼得到這個角度的:url

1
2
3
4
5
6
7
8
9
10
//Find the center of the screen
             tempVector2 = new Vector3(Screen.width * 0.5f,0,Screen.height * 0.5f);
             //Get mouse position
             tempVector = Input.mousePosition;
             //Set tempVector z to tempVector.y
             tempVector.z = tempVector.y;
             //Set tempVector y to 0
             tempVector.y = 0;
             //Set lookDir to  tempVector - tempVector2
             lookDir = tempVector - tempVector2;

是的,先獲得屏幕中央座標,而後把鼠標座標(因爲是俯視類遊戲,y軸座標變爲z軸)減去中央座標,接着:spa

1
2
//Rotate player
         transform.rotation =     Quaternion.LookRotation(lookDir);

結束了,目標旋轉了,並且經過測試,能夠發現不管是不是俯視類遊戲均可以正常旋轉。回過頭來想一想本身當初使用的方法:.net

1.得到鼠標位置,向地面發射射線。設計

2.將射線和地面的碰撞座標記錄。code

3.經過lookat旋轉。

對於崎嶇的山地個人方法彷佛就顯得好笑了,呵呵。

Quaternion.LookRotation彷佛是用相似於向量的方法,在肯定圓心位置的狀況下計算出相應位移所造成的角度。

有一位前輩的博客是這樣描述的:http://blog.csdn.net/janpylx/article/details/7776465

事實上我看不懂,呵呵。

接着來看另外一處使用這個函數的地方,那就是在手機平臺時使用搖桿,根據搖桿的方向旋轉目標的方向。這裏用的是官方提供的joystick腳本,js寫的。看看它是如何獲取並旋轉的。

1
2
3
4
5
6
7
8
//Get right joystick x position
             float lX = rightJoystick.GetComponent<Joystick>().position.x;
             //Get right joystick y position
             float lY = rightJoystick.GetComponent<Joystick>().position.y;
//Set lookDir x to joystick x position and dir z joystick y position
                 lookDir = new Vector3(lX,0,lY);
//Rotate player
         transform.rotation = Quaternion.LookRotation(lookDir);

我本身一開始沒有看明白,爲何就是直接調用position的位置就能夠旋轉了,知道我看了joystick的代碼:

1
2
3
// For a touchpad, let's just set the position directly based on distance from initial touchdown
                     position.x = Mathf.Clamp( ( touch.position.x - fingerDownPos.x ) / ( touchZone.width / 2 ), -1, 1 );
                     position.y = Mathf.Clamp( ( touch.position.y - fingerDownPos.y ) / ( touchZone.height / 2 ), -1, 1 );

是的,他用的是一樣的原理,圓點座標和當前座標的差值。

因此關於Quaternion.LookRotation個人理解是旋轉兩個指定座標間造成的夾角。

相關文章
相關標籤/搜索