Unity当中的OnBeginDragOnDragOnEndDrag

Posted 作孽就得先起床

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity当中的OnBeginDragOnDragOnEndDrag相关的知识,希望对你有一定的参考价值。

本篇文章将向您讲述这三个函数的用途及用法,根据官网API数据,只有寥寥几句话,这显然远远不够用于我们来学习。

用途:用于检测对象何时被拖动

或者使用(Event Tigger)设置不同的拖拽情况,来实现这一效果

本篇主要讲述采用c#脚本来实现在unity当中,像《炉石传说》的卡牌一样来进行拖拽操作

开始拖拽:OnBeginDrag

正在拖动:OnDrag

停止拖动:OnEndDrag

需要将脚本添加到的位置:这个脚本是添加到你想要拖动的卡牌上面,或者是图片

首先,我们需要创建一个unity自带的一个类库

将他添加到我们的脚本当中

using UnityEngine.EventSystems;

因为c#是一个面向对象的语言,因此我们要继承一个接口,通常后面会默认继承:MonoBehaviour

但我们还需要再添加三个:IBeginDragHandler代表:开始拖拽)和:IEndDragHandler(代表:结束拖拽),还有IDropHandler表示:拖拽中并且实现接口,像这样:

    public void OnBeginDrag(PointerEventData eventData)//开始
    
        print("start");
    

    public void OnDrag(PointerEventData eventData)//拖拽中
    
        print("ing");
        transform.position = eventData.position;//将鼠标拖拽的位置实时的赋给卡牌(此时鼠标会有    一点bug,我们的卡牌会跳动一下,如果你想解决这个问题,那就需要控制下角度)
    

    public void OnEndDrag(PointerEventData eventData)//结束
    
        print("of crouse");
    

当然将这篇代码直接附到上面,当你按住卡片时他就会被鼠标拖拽

底层逻辑:鼠标以射线的形式控制卡片(对象),进行在屏幕上移动

这样我们拖动卡牌就完成了

但实际上我们往往需要将卡牌吸附到某一区域

只会拖动是远远不够的

所以,我们要将我们制作好的卡片封装好,使它变成一个预制体

Unity 中常见的组件都有哪些呢?

MeshFilter、MeshCollider、Renderer和Animation。

参考技术A ameObject必带Transform组件,其他组件可以按情况添加,Collider组件是碰撞器,Rigidbidy组件是刚体属性器(拥有物理属性),MeshRender组件是网格渲染器 参考技术B MeshFilter、MeshCollider、Renderer和Animation。 参考技术C Transform 组件:Mesh Filter 组件:Box Collider 组件:Mesh Renderer 组件:

以上是关于Unity当中的OnBeginDragOnDragOnEndDrag的主要内容,如果未能解决你的问题,请参考以下文章

Unity中的Animation组件(一)

游戏开发人员眼中的Unity 3D网页游戏測评报告

Unity 中常见的组件都有哪些呢?

Unity 5:光照系统

Unity ToLua热更框架使用教程

Unity ToLua热更框架使用教程