unity 拖拽UI
UI Unity 拖拽
2023-09-27 14:27:15 时间
我们经常会使用拖拽UI的效果,untiy 为拖拽事件也提供了现成的API,我们只要简单的实现几个接口即可
我们用两种方式来实现拖拽代码,一种是使用MonoBehaviour里的方法,一种是实现UI事件接口,但不论是那种方法,拖拽的逻辑都是没有区别的。以下为拖拽核心代码
//这是一个偏移量,如果没有这个偏移量,UI会直接吸附到鼠标的位置
private Vector3 offset = new Vector3();
//这是拖拽的代码
transform.position = Input.mousePosition - offset;
实现一:使用MonoBehaviour
这要求我们需要为UI设置一个2D碰撞盒,鼠标只有在碰撞盒内拖动才会触发事件,需要注意UI的一个像素就是1米,所以碰撞盒需要做的非常大,例如一个长宽都是100的图片,碰撞盒的size 是100*100
代码如下
private void OnMouseDown()
{
print("开始拖拽");
//按下鼠标计算鼠标和自己轴心的偏移量
offset = Input.mousePosition - transform.position;
}
private void OnMouseDrag()
{
print("鼠标拖拽");
transform.position = Input.mousePosition - offset; //拖拽
}
private void OnMouseUp()
{
print("结束拖拽");
}
实现二:使用接口
需要先引入UI事件命名空间
using UnityEngine.EventSystems;
需要注意,想让UI事件生效,场景里必须有EventSystem这个物体,如果你发现UI没有反应,可能是误删了EventSystem,可以在新建的UI里新建一个
实现接口及拖拽代码如下
public class DragPanel : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IDragHandler
{
private Vector3 offset = new Vector3();
public void OnPointerDown(PointerEventData eventData)
{
print("开始拖拽");
//按下鼠标计算鼠标和自己轴心的偏移量
offset = Input.mousePosition - transform.position;
}
public void OnDrag(PointerEventData eventData)
{
print("鼠标拖拽");
transform.position = Input.mousePosition - offset; //拖拽
}
public void OnPointerUp(PointerEventData eventData)
{
print("结束拖拽");
}
}
开始拖拽和结束拖拽也可以使用 IBeginDragHandler,IEndDragHandler 这两个接口来实现
相关文章
- UI自动化测试框架搭建-标记性能较差用例
- APP UI自动化测试常见面试题,或许有用呢~
- Unity性能优化 — UI模块
- Unity引擎UI模块知识Tree
- UWA学堂上新:如何绕过Unity打造自己的HUD UI系统
- Web UI自动化测试之元素定位(建议收藏)
- weex 项目开发(三) weexpack + weex-ui
- 微服务技术系列教程(10) - SpringBoot - 监控管理 - Admin-UI
- [UWP 自定义控件]了解模板化控件(9):UI指南
- QT中QThread的各个方法,UI线程关系,事件关系详解(3)
- CVE-2020-1947: Apache ShardingSphere&UI远程代码执行漏洞通告
- 《Unity 3D NGUI 实战教程》一2.2 认识基本的UI资源
- 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——7.5 技巧:使用日历微件选择日期
- Unity3D 开发工具系列 UI框架:MVC模式
- 2022版本unity-2D游戏官方案例【2】--带视频案例(层级渲染,物理碰撞,粒子动画,UI等多位基础一体化)
- 【unity之UI专题】—UI如此简单之UGUI六大组件(GIF思维导图详解)
- Unity框架学习_编辑器自动生成UI代码_减少重复工作量,高效开发
- 【Java UI】HarmonyOS添加日历事件
- Android UI-实现底部切换标签(fragment)
- Unity Shader 之 渲染队列(Queue)、深度测试(ZTest)、深度写入(ZWrite) 让物体或UI永远显示在最前面
- Unity 工具 之 简单 镭射 Laser Ray 交互的封装可交互物体 GameObject 和 UI(结合 Curved UI)基于/可用于眼镜插手机上交互
- Unity 工具类 之 AR/VR Gaze 凝视/按键/鼠标 点击 UI/游戏物体 的交互方式实现
- Unity 基础 之 代码动态监听UI交互组件汇总
- Unity UI系统-NGUI简介
- Unity 之 ToLua框架中UI.Dropdown组件动态添加Options
- IOS之UI--小实例项目--添加商品和商品名
- spring boot + vue + element-ui全栈开发入门——前后端整合开发
- 【pyqt5】配置Qt Designer之【designer.exe的保存位置及ui文件转py文件及no Qt platform plugin could be initialized 问题解决】
- Selenium实现Web UI自动化截图长图
- Unity笔记-32-UI框架(实现)