在2D游戲中,類似泡泡龍炮台發射、敵人飛機永遠指向PLAYER、憤怒小鳥彈弓發射等效果,都需要用到物體跟隨鼠標繞一個點旋轉的效果,在unity中實現代碼很簡單,但是在理解上有一定障礙,因為unity是3D界面,他的旋轉並不是2D世界中那么簡單。
實現這種效果,可以使用兩種方法,一種是采用角度計算,一種是采用向量運算;
1,角度運算容易理解,但是代碼較為繁瑣,可以參考
2,向量運算實現
1),向量運算簡單復習
向量指具有大小和方向的幾何對象,可以形象化地表示為帶箭頭的線段。
也就是說,向量不但具有大小,還有方向,我們這里就是利用向量的方向,來實現物體永遠指向鼠標的。
向量相加:
向量相加遵循平行四邊形法則,OA+OB=OC,相加為四邊形長邊,相減就為四邊形短邊,且方向是由被減方指向減方
2),UNITY中向量的運用
在unity中是三維坐標,綠色代表Y軸,紅色代表X軸,藍色代表Z軸。
如果需要只在平面進行旋轉,就將Z軸永遠等於0,XY軸變換即可。
如圖:
A代表鼠標坐標,B代表物體坐標,OA-OB=BA,BA就是黃線,指向A點,使用unity提供的 transform.up指向A點,就達到目的了。 transform.up在unity的API上只有一句話: transform.up的綠色軸,如圖所示(綠色線條),其實是物體自身的Y軸坐標方向,加入Y軸方向等於黃色箭頭方向,就達到旋轉物體指向A點的目的了。
3),代碼實現

1 using UnityEngine; 2 using System.Collections; 3 public class arrow : MonoBehaviour { 4 void Update() 5 { 6 if (Input.GetMouseButton(0)) { 7 //獲取鼠標的坐標,鼠標是屏幕坐標,Z軸為0,這里不做轉換 8 Vector3 mouse = Input.mousePosition; 9 //獲取物體坐標,物體坐標是世界坐標,將其轉換成屏幕坐標,和鼠標一直 10 Vector3 obj=Camera.main.WorldToScreenPoint(transform.position); 11 //屏幕坐標向量相減,得到指向鼠標點的目標向量,即黃色線段 12 Vector3 direction = mouse - obj; 13 //將Z軸置0,保持在2D平面內 14 direction.z = 0f; 15 //將目標向量長度變成1,即單位向量,這里的目的是只使用向量的方向,不需要長度,所以變成1 16 direction = direction.normalized; 17 //當目標向量的Y軸大於等於0.4F時候,這里是用於限制角度,可以自己條件 18 if (direction.y >= 0.4f) 19 { 20 //物體自身的Y軸和目標向量保持一直,這個過程XY軸都會變化數值 21 transform.up = direction; 22 } 23 } 24 } 25 }