概述
当我们在Unity场景中创建一个UI,比如Image,Unity会自动帮我们创建一个EventSystem(有且仅有一个)和Canvas。EventSystem中有EventSystem组件,用于处理事件,包括Graphic,2D,3D,还有StandAloneInputModule,用于管理输入。Canvas中有GraphicRayCaster组件,用于响应射线检测,如果想要2D或3D物体产生交互事件,类似的要添加Box Collider2D或Box Collider。
具备以上条件后,还需要对事件添加响应,主要有两种方法:
1. 在Inspector中添加Eventtrigger组件,然后绑定函数(通过脚本添加是一样的逻辑),下面演示脚本方式添加事件相应:
void Start()
{
EventTrigger.Entry MyClick = new EventTrigger.Entry();
MyClick.eventID = EventTriggerType.PointerClick;
MyClick.callback.AddListener(OnClick);
EventTrigger eventTrigger = gameObject.AddComponent<EventTrigger>();
eventTrigger.triggers.Add(MyClick);
}
void OnClick(BaseEventData data)
{
GetComponent<Image>().color = Color.green;
}
2. 第二种添加事件响应方式是通过接口的方式(推荐)
拖拽:
IInitializePotentialDragHandler:鼠标按下响应一次
IBeginDragHandler:开始拖动时相应一次
IDragHandler:拖动过程中持续响应(其他三种方法依赖于此方法)
IEndDragHandler:拖动结束后相应一次
public class EventTriggerTest : MonoBehaviour, IInitializePotentialDragHandler,IBeginDragHandler,IDragHandler,IEndDragHandler
{
public void OnEndDrag(PointerEventData eventData)
{
Debug.Log("OnEndDrag");
}
public void OnDrag(PointerEventData eventData)
{
Debug.Log("OnDrag");
}
public void OnBeginDrag(PointerEventData eventData)
{
var rect = GetComponent<RectTransform>();
Vector3 pos = Vector3.zero;
RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.enterEventCamera, out pos);
rect.position = pos;
}
public void OnInitializePotentialDrag(PointerEventData eventData)
{
Debug.Log("OnInitializePotentialDrag");
}
}
Drop:
IDropHandler:放下物体时执行一次,此方法依赖于IDragHandler,并且执行完这个方法,再执行EndDrag
鼠标进入和点击:
IPointerEnterHandler:鼠标进入执行一次
IPointerExitHandler:鼠标出去执行一次
IPointerDownHandler:鼠标按下执行一次
IPointerUpHandler:鼠标抬起执行一次
IPointerClickHandler:鼠标抬起,执行完IPointerUpHandler,再执行这个接口一次
Select(需要Selectable组件):
ISelectHandler:选中后执行一次
IUpdateSelectedHandler:选中后持续执行
IDeselectHandler:取消选中执行一次
系统按键(需要Selectable组件):在ProjectSetting和InputModule中配置
IScrollHandler:鼠标滚轮
ISubmitHandler:回车或空格
ICancelHandler:esc
IMoveHandler:wasd或方向键
PointerEventData参数介绍:
InputButton button:对应鼠标按键
int clickCount:连续点击次数
float clickTime:游戏运行开始,点击的时间。IPointerDownHandler获取的是上一次点击时间,IPointerClickHandler获取的是本次点击时间
Vector2 delta:鼠标移动过程中的差值,比如实现鼠标拖动UI
public void OnDrag(PointerEventData eventData)
{
//var rect = GetComponent<RectTransform>();
//Vector3 pos = Vector3.zero;
//RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.enterEventCamera, out pos);
//rect.position = pos;
var rect = GetComponent<RectTransform>();
rect.anchoredPosition += eventData.delta;
}
最后
以上就是老实电脑为你收集整理的Unity UGUI 事件系统的全部内容,希望文章能够帮你解决Unity UGUI 事件系统所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复