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

【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来实现

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

 

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

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

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

RectTransform主要是改变位置

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

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

 

 

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

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


原文连接:https://blog.csdn.net/helloxiaohetx/article/details/124615804

相关推荐

【论文阅读|深读】RDAA:Role Discovery-Guided Network Embedding Based on Autoencoder and A

ivx杨帆启航React/Pixi.js/FaaS、Krpano及微服务架构

支持SwiftUI!Swift版图片&视频浏览器-JFHeroBrowser上线啦

vivo官网APP全机型UI适配方案

《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(7)-Fiddler状态面板-QuickExec命令行

SwiftUI 布局 —— 尺寸( 下 )

SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移?

从SwiftUI的@State来看看Property Wrapper

七夕快到了,用SwiftUI做一个表达爱意的心形动画

RK3568开发笔记(四):在虚拟机上使用SDK编译制作uboot、kernel和buildroot镜像

【论文阅读|深读】GAS:Role-Oriented Graph Auto-encoder Guided by Structural Information

8个SwiftUI的小技巧让隔壁同事两眼放光,直呼太卷了

【摸鱼神器】UI库秒变低代码工具——表单篇(二)子控件

Phabricator Conduit API介绍

利用 UIScrollView 实现六棱柱图片浏览效果

【antd】5分钟快速完成antd样式的按需引入以及自定义主题

对话Robin Marx:HTTP\u002F3和QUIC将带来重大机遇和挑战

一种新的UI测试方法:视觉感知测试

【云原生 | 15】Docker commit与Docker build比较

VBA驱动SAP GUI完成界面元素值初始化