用unity的事件系统(UIGUI拖拽等功能的实现)

这篇博客我又回到了UGUI上 这里我主要介绍一些关于拖拽的接口还有EventTrigger等组件的使用
希望对大家的游戏开发有所帮助

拖拽功能
在很多游戏中都要用到拖拽功能 比如装备的熔炼售卖等功能
还有手游中的轮盘控制方向的轮盘也需要用到拖拽

我这里主要使用接口来实现的
首先有好多个接口需要大家大致了解
IInitializePotentialDragHandler,IBeginDragHandler,IDragHandler,IEndDragHandler,IDropHandler
这些是拖拽相关的接口我们实现一下之后

 public void OnInitializePotentialDrag(PointerEventData eventData)
    {
        //按下调用
    }

    public void OnBeginDrag(PointerEventData eventData)
    {
        //开始
    }

    public void OnDrag(PointerEventData eventData)
    {
        //拖动
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        //结束
    }

    public void OnDrop(PointerEventData eventData)
    {
        //放下(拖拽的相反意思)  先于结束函数的顺序OnEndDrag 
    }

其中的调用时间我都在注释中给了出来
我们在使用的时候可以根据时间来选择合理的接口
在一些比较复杂的游戏中 我们必须要注意这些接口调用的先后顺序 以免出错

下面给出一个拖拽的脚本

 public void OnDrag(PointerEventData eventData)
    {
        //拖动
        var rect = GetComponent<RectTransform>();
        var pos = Vector3.zero;
        RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.enterEventCamera, out pos);//把屏幕坐标转换为点的方法

        rect.position = pos;
    }

这个挂在想要拖拽的Image或者其他UI上即可实现拖拽

在这我和大家说一个个小技巧
在场景有很多UI的时候 很可能发生相互遮挡的尴尬场面
我们给他添加一个canvas组件
在这里插入图片描述
吧Override Sorting勾选上 其中会出来一个Sort Order其中设置层级

然后我们会发现虽然这个UI处于最前面 但是他的不能点击或者拖拽了
这时我们给他在添加一个Graphic Raycaster(检测射线)
没有这个组件但是有canvas当然不能检测点击喽
在这里插入图片描述

然后这个BUG就消除了

EventTrigger组件
这个组件同样可以实现拖拽等效果
但是需要在unity下设置一下
首先给想要实现效果的UGUI物体添加这个组件

在这里插入图片描述
点击Add New Event Type即可添加类型
在这里插入图片描述
这些类型大家可以自己去查看

这里我们实现一下拖拽效果
首先在脚本中写一个方法

 public void Click()
    {
        GetComponent<Image>().color = Color.blue;
        var rect = GetComponent<RectTransform>();
        var pos = Input.mousePosition;
        rect.position = pos;
    }

用来注册事件

然后注册事件 和button等注册事件的方法是一样的
然后即可实现拖拽

当然这个效果也可以用代码来实现 以后我会更新

如果你也是unity爱好者,欢迎关注我的博客 我会在这里持续更新我的学习过程

发布了72 篇原创文章 · 获赞 73 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/104093220