實現虛擬搖桿的移動


 

    為了實現虛擬搖桿來控制移動,我用了兩個img

 

調了一下,讓它們看起來像一個虛擬搖桿

 

然后寫了個腳本,通過計算手指的位置背景圖的位置差,來判斷里面的圖的位置

 1         _pointPos = Input.GetTouch(eventData.pointerId).position;
 2         _dir = _pointPos - initPosition;
 3         //如果手指到虛擬鍵盤原點的位置 < 半徑r  
 4         if (Vector2.Distance(_pointPos, initPosition) < r)
 5         {
 6             //虛擬鍵跟隨手指  
 7             m_image.transform.position = _pointPos;
 8         }
 9         else
10         {
11             m_image.transform.position = initPosition + _dir.normalized * r;
12         }

然后給信息中心發消息

1     private void Update()
2     {
3             MessageCenter.SendMessage("MOVE", new KeyValues("ROLE_MOVE", _dir));
4     }

 

另一個腳本監聽此消息

 1     void Start () {
 2         MessageCenter.AddMessageListener("MOVE",OnMove);
 3         
 4     }
 5     
 6     void Update () {
 7         UpdateMove();
 8     }
 9 
10     private void UpdateMove()
11     {
12         if (_dirction != Vector2.zero)
13         {
14             this.gameObject.transform.position += new Vector3(_dirction.normalized.x, _dirction.normalized.y, 0) * Time.deltaTime * GameManager.Instance.speed;
15         }
16     }
17 
18     private void OnMove(KeyValues keyValues)
19     {
20         //Debug.Log(_dirction);
21         _dirction = (Vector2)keyValues.Values;
22     }

 

然后是寫松開手指的回調

1     public void OnPointerUp(PointerEventData eventData)
2     {
3         Debug.Log("up" + this.name);
4         _dir = Vector2.zero;
5         //松開手指虛擬搖桿回到原點  
6         m_image.transform.position = initPosition;
7     }

 

 

試了試, 成功實現了移動。

但是又出現了一個問題:這樣寫無法復用到右邊的虛擬搖桿。想了想,1.寫個父類讓兩個子類繼承,2.都發送到另一個腳本再統一發給messageCenter。不知道孰好孰壞,於是就選擇了第二種,寫了一個inputManager來管理所有的UI(好像應該叫UIManager?)

然后簡單地寫了個靜態函數:

1 public static void UISendMessage(string name, KeyValues kV)
2     {
3         MessageCenter.SendMessage(name, kV);
4     }

 

這樣的話代碼就改為:

1         InputManager.UISendMessage(this.name, new KeyValues("MOVE", _dir));

 

實驗了一下 成功運行。

 

都沒有寫 if(xxx == null),因為是一個人做的一個小項目,所以也就沒有去想這些了。。。

 


免責聲明!

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



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