实现虚拟摇杆的移动

 

    为了实现虚拟摇杆来控制移动,我用了两个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),因为是一个人做的一个小项目,所以也就没有去想这些了。。。

 

posted @ 2018-04-02 20:34  charsoul  阅读(2105)  评论(0编辑  收藏  举报