可以进行屏幕坐标到UGUI坐标的转换。
RectTransformUtility.ScreenPointToLocalPointInRectangle()
UGUI事件:(虽然可以为控件添加点击button组件,但是只有单击事件,下面有更多的操作监听事件)
PointerEnter
PointerExit
PointerDown
PointerUp
PointerClick
Drag
Drop
Scroll
UpdateSelected
Select
Deselect
Move
using UnityEngine.EventSystems
另外几种形式:
1.添加EventTriggle组件
2.添加Button组件
3.类。
一、先讲添加EventTriggle组件的方式,跟使用button的方式差不多,都是写个脚本,然后添加。
二、写一个事件管理器类来辅助以及动态加载事件
EventManager 类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class EventManager : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public static void addEventListener(GameObject gameObject, EventTriggerType type, UnityAction<BaseEventData> callback)
{
//判断物体是否带有EventTrigger组件,一般都是没有,所以可以动态加载
EventTrigger et = gameObject.GetComponent<EventTrigger>();
if (et == null)
{
et = gameObject.AddComponent<EventTrigger>();
//为空,添加eventTrigger组件
}
//碰撞事件列表
List<EventTrigger.Entry> entrys = et.triggers;
if(entrys == null)//因为et都是刚刚添加的,所以entrys 常理也是为空的。
{
entrys = new List<EventTrigger.Entry>();
et.triggers = entrys;
}
EventTrigger.TriggerEvent te = new EventTrigger.TriggerEvent();
te.AddListener(callback);
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = type;
entry.callback = te;
entrys.Add(entry);
}
}
有了上面这个类,就可以在其他元素上添加脚本,应用这个类
样例如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class TestEventManager : MonoBehaviour {
// Use this for initialization
void Start () {
EventManager.addEventListener(gameObject,EventTriggerType.PointerClick, PointClick);
}
// Update is called once per frame
void Update () {
}
public void CallbackEventManager()
{
}
public void PointClick(BaseEventData data)
{
Debug.Log(data.ToString());
}
}