这篇博客我又回到了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爱好者,欢迎关注我的博客 我会在这里持续更新我的学习过程