我是靠谱客的博主 老实电脑,最近开发中收集的这篇文章主要介绍Unity UGUI 事件系统,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当我们在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 事件系统所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部