unity2d 實現物體跟隨鼠標繞一個點旋轉效果


    在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 }
View Code

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM