unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果

【Unity学习笔记】

(一)如何实现2d sprite和3D物品的拖拽效果

1.调节camera >- Projection到Orthographic模式

Unity camera projection有两种模式:

第一种是perspective:透视,多用于3D,遵循近大远小的透视原理

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第1张图片 

第二种是orthographic:平视,多用于2D,可以通过调节size来改变大小,(ps:1920*1080的size是5.4)  而且orthographic的屏幕坐标系和鼠标坐标系可以直接替换

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第2张图片

 

2.给要拖拽的物品添加box collider 2D碰撞体,并在edix collider中调节大小

3.给物体添加脚本

实现拖拽效果 有三种方式:(先引用unityEngine.EventSystems这个库)

第一种:

用到的函数有OnMouseOver()

先定义下isselected

先判断鼠标是否按下,当鼠标按下也就是物品被选择时,鼠标坐标转换为世界坐标

然后物体组件的坐标等于新的鼠标转换后的世界坐标(也就是屏幕坐标)

(但这种太麻烦,我们可以看第二种,直接用接口)

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第3张图片

第二种:引用接口

用到的函数有OnMouseDrag(),  OnMouseEnter(),  OnMouseExit()

三个函数的意思分别是:鼠标拖拽,鼠标进入,鼠标离开

第一个鼠标拖拽的实现方法和上一个一样,先把鼠标转为世界坐标,再在世界坐标系下让图片坐标跟随

然后鼠标进入和离开主要是做一个放大缩小效果

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第4张图片

 

第三种:用OnmouseDrag方法把图片拖拽到正确的位置或卡槽里面

先定义初始位置 正确位置 和判断鼠标是否停下

把脚本挂到要拖拽的物品上 然后定义起始位置为本来的位置

然后判断拖拽:

如果鼠标未停下,就继续拖拽

如果鼠标停下了,就判断是否在目标位置(也就是正确位置上)

如果是,就让拖拽物体坐标等于正确坐标,如果不是,就回到原来的位置

然后就可以实现把物品拖拽到正确位置的效果。(可以看代码,英语好的直接翻译就行)

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第5张图片

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第6张图片

 

但是UI图片 不能使用OnMouseDrag接口

(二)如何实现UI对象的拖拽效果

第一种:通过添加event trigger来实现

  1. Add component-> eventtrigger -> add new event trigger -> drag && end drag
  2. 添加脚本,写一些public方法和事件调用在eventtrigger组件中

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第7张图片

 

这个方法的缺点:使用gameobject.find查找image名称会很麻烦,而且用vector.distance需要耗费内存或电脑运行

第二种:使用接口的方式实现拖拽效果

  1. 添加脚本到拖拽物品上 使用idraghandler,ibegandraghandler,ienddraghandler接口来调用,分别是开始拖拽,拖拽中,结束拖拽三种方法
  2. 获取rectTransform组件和canvasGroup组件 (这里需要在拖拽物品中添加canvas group组件)

RectTransform主要是改变位置

canvasGroup主要改变鼠标碰撞物和透明度等等

声明之后就直接在拖拽前中后调用修改就行了!

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第8张图片

unity3D如何实现2D sprite,3D物品和UI图片的拖拽效果_第9张图片 

 

下一节 我主要学习背包系统还有相机的视角转换(先学相机视角转换,因为做游戏项目要用的)

关注我,跟我一起学习unity哈哈哈哈哈哈哈

你可能感兴趣的:(unity3D学习笔记,ui,3d,unity)