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的主要内容,如果未能解决你的问题,请参考以下文章