Unity EasyTouch的实现 获取Canvas下所有的Button并监听

一.获取Canvas下所有的Button,绑定委托 脚本:   UICtrlWinScripts.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MyEventArgs{
    // 每个button的编号
    public int id;
    // 每个 Button 本身
    public GameObject obj;
}


public class UICtrlWinScripts : MonoBehaviour {
    Button[]  buttons;

    // 鼠标点击委托
    public delegate void SkillButtonClickDelegate(MyEventArgs arg);
    public SkillButtonClickDelegate SkillButtonClick;

    void Start () {
        buttons = GetComponentsInChildren<Button> ();
        for (int i = 0; i < buttons.Length; i++) {
            MyEventArgs arg = new MyEventArgs ();
            arg.id = i + 1;
            arg.obj = buttons [i].gameObject;
            buttons [i].onClick.AddListener (()=>OnButtonClickAction(arg));
        }
    }

    void OnButtonClickAction(MyEventArgs arg){
        if (SkillButtonClick != null) {
            SkillButtonClick (arg);
        }
    }
}
 

二.遥感的实现 脚本 UIJoysticksScr .cs

 


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UIJoysticksScr : MonoBehaviour {
    public static UIJoysticksScr Instance;
    void Awake(){
        Instance = this;
    }
    //  MVC View层做的事
    // 1. 设置自身 view 的显示方式
    // 2. 获取 UI 的事件,传递给控制层
    // 3. 不能做控制器的事情

    // 拖拽事件委托
    public delegate void JoysticksDragDelegate (Vector3 coor);
    public JoysticksDragDelegate JoysticksDrag;

    // 抬起动作委托
    public delegate void JoysticksUpDelegate();
    public JoysticksUpDelegate JoysticksUp;

    // define this image's startPoint
    Vector3 startPoint;
    // limit this image's moveDistance
    float r;
    public Transform border;
    void Start(){
        startPoint = transform.position;
        // r = transform.parent.GetComponent<RectTransform> ().rect.width / 2;
        r = Vector3.Distance(transform.position,border.position);
    }

    void Update(){
        if (JoysticksDrag != null) {
            if (Vector3.Distance(transform.position,startPoint) > 0.1f) {
                Vector3 newDir = (transform.position - startPoint).normalized;
                JoysticksDrag (newDir);
            }
        }
    }
    // this mouse Drag Event
    public void OnPointerDragAction(){
        // to deal with mouse point logic
        if (Vector3.Distance(Input.mousePosition,startPoint) < r) {
            transform.position = Input.mousePosition;
        }else{
            // get this vector3 direction for limit this point MaxDistance
            Vector3 dir = Input.mousePosition - startPoint;
            transform.position = startPoint + dir.normalized * r;
    }

  
}

    // this mouse up Event 
    public void OnPointerUpAction(){
        if (JoysticksUp != null) {
            JoysticksUp ();
        }
        transform.position = startPoint;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39097425/article/details/81388088
今日推荐