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