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;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章