unity 拖拽UI

2023-10-28

我们经常会使用拖拽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 这两个接口来实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity 拖拽UI 的相关文章

  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • 如何启用 CSF 防火墙 Web UI

    ConfigServer 安全和防火墙 CSS 是适用于 Linux 系统的基于 iptables 的防火墙 在我们之前的教程中阅读了CSF在Linux系统上的安装教程 CSF 还提供内置 Web UI 用于从 Web 界面管理防火墙 在本
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • APP UI自动化测试思路总结

    首先想要说明一下 APP自动化测试可能很多公司不用 但也是大部分自动化测试工程师 高级测试工程师岗位招聘信息上要求的 所以为了更好的待遇 我们还是需要花时间去掌握的 毕竟谁也不会跟钱过不去 接下来 一起总结一下APP UI自动化测试的思路吧
  • Swift 响应式编程:简化 KVO 观察与 UI 事件处理 | 开源日报 No.110

    ReactiveX RxSwift Stars 23 8k License MIT RxSwift 是 Reactive Extensions 标准的 Swift 特定实现 它提供了 Observable 接口来表达计算的通用抽象 该项目旨
  • WPF应用实战开发指南 - 如何实现动态内容展示

    在我们开发一些复杂信息的时候 由于需要动态展示一些相关信息 因此我们需要考虑一些控件内容的动态展示 可以通过动态构建控件的方式进行显示 如动态选项卡展示不同的信息 或者动态展示一个自定义控件的内容等等 目的就是能够减少一些硬编码的处理方式
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接
  • 游戏开发中常见系统梳理之背包系统的实现一

    游戏中几乎都存在大大小小的背包系统 接下来我将讲述背包系统具体是如何实现的 完整源码 以下是使用unity NGUI实现 使用txt配置的方法 后续更新UGUI Json实现的背包系统敬请期待 背包中的物品我们常常将其制作成预设体 通过改变
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO

随机推荐

  • Oracle中SYS_CONNECT_BY_PATH函数的妙用

    在Oracle中 SYS CONNECT BY PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分 然后连接在一个列中显示 Oracle中SYS CONNECT BY PATH函数是非常重要的函数 下面就为您介绍一个使
  • [渗透测试实战]vulnhub靶场1 初步掌握渗透流程(详细步骤)

    文章目录 1 主机发现 确定攻击目标 2 端口发现 寻找突破口 3 web渗透 dirb扫描web目录 fuzz获取正确url参数 WordPress漏洞利用 获取wordpress用户名 4 文件上传 反弹连接 5 msf提权 解决gcc
  • 关于读取回车空白键:cin.unsetf(ios::skipws);

    ios skipws Skip white space 跳过空白 空格 表格键 unsetf 取消 格式 设置 cin unsetf ios skipws 取消 cin 输入 跳过空白 的 默认 设置 注意 不是所有 编译器 都支持 ios
  • CORS 头缺少 'Access-Control-Allow-Origin'

    今天使用vue发送Ajax请求时发现 请求不到数据 打开浏览器控制台发现报已拦截跨源请求 同源策略禁止读取位于 http vue studyit io api get lunbo 的远程资源 原因 CORS 头缺少 Access Contr
  • 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

    在JSP里 获取客户端的IP地址的方法是 request getRemoteAddr 这种方法在大部分情况下都是有效的 但是在通过了Apache Squid等反向代理软件就不能获取到客户端的真实IP地址了 如果使用了反向代理软件 将http
  • yudao-cloud功能点

    yudao cloud功能点 gatway 灰度发布 日志打印 token认证 动态路由 分支主题 2
  • ChatGPT+Mermaid自然语言流程图形化产出小试

    ChatGPT Mermaid语言实现技术概念可视化 本文旨在介绍如何使用ChatGPT和Mermaid语言生成流程图的技术 在现代软件开发中 流程图是一种重要的工具 用于可视化和呈现各种流程和结构 结合ChatGPT的自然语言处理能力和M
  • java事务提交完成再继续执行_如何在事务提交后才执行某个方法

    如何在事务提交后才执行某个方法 开发过程中经常出现如下场景 新增一篇文章 然后发一个广播mq出去 广播监听者监听到消息然后根据文章id回查文章内容 但是此时新增文章的方法的事务还没有提交 根据id回查数据库的时候查到数据为空 代码如下 Tr
  • Opencv-C++ 实现硬币识别并依次单独截出保存

    include
  • 软件工程毕设选题推荐

    文章目录 0 简介 1 如何选题 2 最新软件工程毕设选题 0 简介 学长搜集分享最新的软件工程业专业毕设选题 难度适中 适合作为毕业设计 大家参考 学长整理的题目标准 相对容易 工作量达标 题目新颖 如何选题 项目分享 https git
  • 【电气专业知识问答】问:AVC无功自动调控装置系统的控制与组成特点是什么?

    电气专业知识问答 问 AVC无功自动调控装置系统的控制与组成特点是什么 1 系统电压的控制分为三个层次 1 一级电压控制为单元控制 控制器为发电机励磁调节器 作用是保证机端电压等于给定值 2 二级电压控制为本地控制 控制器为电压无功自动调控
  • cmake错误(一)

    错误 CMake Error at CMakeLists txt 5 ADD EXECUTABLE Cannot find source file SRC LIST Tried extensions c C c cc cpp cxx m M
  • 搭建zerotier planet服务

    安装 CentOS 7 确保已经安装了 CentOS 7 更新系统 sudo yum update 安装 ZeroTier curl s https install zerotier com sudo bash 启动和启用 ZeroTier
  • 【会议分享】2022年第四届自动化 机械与设计工程国际研讨会(SAMDE 2022)

    2022年第四届自动化 机械与设计工程国际研讨会 SAMDE 2022 会议网站 http www samde org 会议日期 2022年12月16 18日 召开地点 北京 截稿时间 2022年11月10日 录用通知 投稿后2周 收录检索
  • typora使用CSDN图床更新版(2022/8/8)

    文章目录 2022 11 24更新 前言 代码 运行截图 更新说明 使用方法 注意事项 授人以鱼不如授人以渔 2022 11 24更新 由于csdn部分接口的变化 导致程序中用于判断用户登录的函数报错 现进行代码更新 经测试目前可以正常运行
  • Through-ui自动化 uiautomator2

    下载Termux Termux 是一个 Android 下一个高级的终端模拟器 开源且不需要 root 支持 apt 管理软件包 十分方便安装软件包 完美支持 Python PHP Ruby Nodejs MySQL等 随着智能设备的普及和
  • Django-使用pycharm或命令行创建一个demo

    使用pycharm 进行Django的开发 默认已经配置好了python解释器等一系列相关的python开发环境 可使用cmd 进行检查 python pip 新建一个Django项目 这里没使用虚拟环境 create生成项目 默认的目录结
  • Windows10蓝牙突然消失不见(设置中蓝牙开关键消失)

    问题 Windows10蓝牙突然消失不见 设置中蓝牙开关键消失 电脑使用途中突然发现蓝牙突然消失不见 设置中蓝牙开关键消失 点击添加蓝牙设备显示蓝牙已关闭 提示更新驱动程序 在windows更新中更新后 重启电脑 出现 1 蓝牙图标恢复正常
  • vue前端-时间戳转换成日期格式/日期转换成时间戳

    一 日期转换成时间戳 new Date getTime 当前时间 变成时间戳 new Date res data beginTime getTime 获取到的时间转化成时间格式 再变成时间戳 二 时间戳转换成日期格式 1 安装 npm in
  • unity 拖拽UI

    我们经常会使用拖拽UI的效果 untiy 为拖拽事件也提供了现成的API 我们只要简单的实现几个接口即可 我们用两种方式来实现拖拽代码 一种是使用MonoBehaviour里的方法 一种是实现UI事件接口 但不论是那种方法 拖拽的逻辑都是没