【Unity学习笔记】
(一)如何实现2d sprite和3D物品的拖拽效果 1.调节camera >- Projection到Orthographic模式
Unity camera projection有两种模式:
第一种是perspective:透视,多用于3D,遵循近大远小的透视原理
第二种是orthographic:平视,多用于2D,可以通过调节size来改变大小,(ps:1920*1080的size是5.4) 而且orthographic的屏幕坐标系和鼠标坐标系可以直接替换
2.给要拖拽的物品添加box collider 2D碰撞体,并在edix collider中调节大小 3.给物体添加脚本
实现拖拽效果 有三种方式:(先引用unityEngine.EventSystems这个库)
第一种:
用到的函数有OnMouseOver()
先定义下isselected
先判断鼠标是否按下,当鼠标按下也就是物品被选择时,鼠标坐标转换为世界坐标
然后物体组件的坐标等于新的鼠标转换后的世界坐标(也就是屏幕坐标)
(但这种太麻烦,我们可以看第二种,直接用接口)
第二种:引用接口
用到的函数有OnMouseDrag(), OnMouseEnter(), OnMouseExit()
三个函数的意思分别是:鼠标拖拽,鼠标进入,鼠标离开
第一个鼠标拖拽的实现方法和上一个一样,先把鼠标转为世界坐标,再在世界坐标系下让图片坐标跟随
然后鼠标进入和离开主要是做一个放大缩小效果
第三种:用OnmouseDrag方法把图片拖拽到正确的位置或卡槽里面
先定义初始位置 正确位置 和判断鼠标是否停下
把脚本挂到要拖拽的物品上 然后定义起始位置为本来的位置
然后判断拖拽:
如果鼠标未停下,就继续拖拽
如果鼠标停下了,就判断是否在目标位置(也就是正确位置上)
如果是,就让拖拽物体坐标等于正确坐标,如果不是,就回到原来的位置
然后就可以实现把物品拖拽到正确位置的效果。(可以看代码,英语好的直接翻译就行)
但是UI图片 不能使用OnMouseDrag接口
(二)如何实现UI对象的拖拽效果
第一种:通过添加event trigger来实现
- Add component-> eventtrigger -> add new event trigger -> drag && end drag
- 添加脚本,写一些public方法和事件调用在eventtrigger组件中
这个方法的缺点:使用gameobject.find查找image名称会很麻烦,而且用vector.distance需要耗费内存或电脑运行
第二种:使用接口的方式实现拖拽效果- 添加脚本到拖拽物品上 使用idraghandler,ibegandraghandler,ienddraghandler接口来调用,分别是开始拖拽,拖拽中,结束拖拽三种方法
- 获取rectTransform组件和canvasGroup组件 (这里需要在拖拽物品中添加canvas group组件)
RectTransform主要是改变位置
canvasGroup主要改变鼠标碰撞物和透明度等等
声明之后就直接在拖拽前中后调用修改就行了!
下一节 我主要学习背包系统还有相机的视角转换(先学相机视角转换,因为做游戏项目要用的)
关注我,跟我一起学习unity哈哈哈哈哈哈哈



