当前位置: 首页 > news >正文

【UGUI】Unity教程:实现物品的拖拽功能

大家好,今天,我们将一起学习如何在Unity中实现物品的拖拽功能。这是一个非常实用的技能,无论你是在制作RPG游戏的背包系统,还是在制作策略游戏的建筑放置功能,都会用到这个技能。那么,让我们开始吧!

一、需求描述

在这个任务中,我们将使用Unity的UGUI系统和事件系统来实现一个物品的拖拽功能。我们将为物品创建一个脚本,该脚本需要实现IDragHandlerIBeginDragHandlerIEndDragHandler接口。这些接口分别对应于开始拖拽、拖拽进行中和结束拖拽这三个阶段。

二、详细步骤

1. 创建脚本

首先,我们需要为物品创建一个新的脚本,命名为DraggableItem

2. 实现接口

DraggableItem脚本中,我们需要实现IDragHandlerIBeginDragHandlerIEndDragHandler接口。你可以参考以下的代码示例:

using UnityEngine;
using UnityEngine.EventSystems;public class DraggableItem : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{private Vector3 originalPosition;public void OnBeginDrag(PointerEventData eventData){// 记录开始拖拽时的原始位置originalPosition = transform.position;}public void OnDrag(PointerEventData eventData){// 更新物品的位置,使其跟随鼠标移动transform.position = Input.mousePosition;}public void OnEndDrag(PointerEventData eventData){// 结束拖拽时,可以选择让物品回到原始位置,或者放置在新的位置transform.position = originalPosition;}
}

3. 挂脚本

接下来,我们需要将DraggableItem脚本附加到物品上,并确保物品有一个RectTransform组件和一个CanvasGroup组件。RectTransform组件用于在UI中定位物品CanvasGroup组件则用于在拖拽过程中控制物品的显示。

三、测试

完成以上步骤后,你应该能够在游戏中拖拽你的物品。你可以尝试拖拽你的物品,看看它是否能够跟随你的鼠标移动。

四、扩展任务

如果你已经完成了基本任务,你可以尝试进行以下的扩展任务:

  • OnEndDrag方法中添加代码,实现将物品放置到新的位置的功能。
  • 实现一个功能,可以检测物品是否被拖拽到了一个有效的放置位置。

通过完成这个实训任务,你将能够掌握Unity的UGUI系统和事件系统的基本使用,以及如何使用这些系统来实现物品的拖拽功能。希望这个实训任务能够帮助你在Unity游戏开发的道路上更进一步!

附件实例代码:

把下面代码拖到对应的物体身上即可!还创建了一个文本用来显示交互状态!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using TMPro;public class EventsystemPoint : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
{GameObject ONETextobj;TextMeshProUGUI TmptextComp;Quaternion Oringlerotation;Vector3 OrianglePos;private void Start(){ONETextobj = GameObject.Find("EventName");TmptextComp = ONETextobj.GetComponent<TextMeshProUGUI>();Debug.Log(TmptextComp.name);OrianglePos = this.transform.position;//记录被拖拽物体原本坐标,拖拽结束后返回这个位置Oringlerotation = this.transform.rotation;//记录被拖拽物体原本旋转}public void OnPointerEnter(PointerEventData eventData){TmptextComp.text = "指针滑入了";Debug.Log("指针滑入了");this.transform.rotation = Quaternion.Euler(0, 30, 0);}public void OnPointerExit(PointerEventData eventData){TmptextComp.text = "指针滑出了";Debug.Log("指针滑出了");this.transform.rotation = Oringlerotation;}public void OnPointerClick(PointerEventData eventData){TmptextComp.text = "指针点击了";Debug.Log("指针点击了");}public void OnBeginDrag(PointerEventData eventData){TmptextComp.text = "拖拽开始";Debug.Log("拖拽开始");this.transform.position = Input.mousePosition;}public void OnDrag(PointerEventData eventData){TmptextComp.text = "拖拽...";Debug.Log("拖拽...ing");this.transform.position = Input.mousePosition;//让物体当前坐标跟随鼠标坐标一起移动实现拖拽}public void OnEndDrag(PointerEventData eventData){this.transform.position = OrianglePos;//拖拽结束,让物体回到起始位置的坐标}
}

相关文章:

【UGUI】Unity教程:实现物品的拖拽功能

大家好&#xff0c;今天&#xff0c;我们将一起学习如何在Unity中实现物品的拖拽功能。这是一个非常实用的技能&#xff0c;无论你是在制作RPG游戏的背包系统&#xff0c;还是在制作策略游戏的建筑放置功能&#xff0c;都会用到这个技能。那么&#xff0c;让我们开始吧&#xf…...

【奇淫技巧】两数交换

【奇淫技巧】两数交换 临时变量法&#xff1a;借助中间变量加减法&#xff1a;不使用中间变量异或法&#xff1a;不使用中间变量语法糖&#xff1a;某些编程语言支持交换语法糖借助函数&#xff0c;不交换 前提&#xff1a;待交换的两个元素&#xff0c;分别用a,b表示&#xf…...

Java核心知识点整理大全26-笔记

目录 27. Storm 7.1.1. 概念 27.1.1. 集群架构 27.1.1.1. Nimbus&#xff08;master-代码分发给 Supervisor&#xff09; 27.1.1.2. Supervisor&#xff08;slave-管理 Worker 进程的启动和终止&#xff09; 27.1.1.3. Worker&#xff08;具体处理组件逻辑的进程&#xff…...

“上云”还是“下云”?探云计算的下一站未来!

引言 10 月 27 日&#xff0c;X&#xff08;原Twitter&#xff09;工程技术发布帖子称&#xff0c;在过去的一年里&#xff0c;技术团队优化了 X 的云服务使用方式&#xff0c;着手将更多工作负载迁往本地基础设施。这一转变使 X 每月的云成本降低了 60%。所有媒体、Blob 存储均…...

Linux中top命令输出日志分析?

以下是对输出的各部分的解释&#xff1a; 09:54:34&#xff1a;系统当前时间。up 161 days, 2:08&#xff1a;系统已经运行了161天2小时8分钟。5 users&#xff1a;有5个用户登录系统。load average: 0.13, 0.08, 0.05&#xff1a;系统的1分钟、5分钟、15分钟的平均负载。负载…...

执行栈和执行上下文

前端面试大全JavaScript执行栈和执行上下文 &#x1f31f;经典真题 &#x1f31f;执行上下文 &#x1f31f;栈数据结构 &#x1f31f;执行上下文生命周期 &#x1f31f;真题解答 &#x1f31f;总结 &#x1f31f;经典真题 谈谈你对 JavaScript 执行上下文栈理解 &#…...

7、单片机与W25Q128(FLASH)的通讯(SPI)实验(STM32F407)

SPI接口简介 SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根…...

stream流和方法引用

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素把集合中所有以"张"开头的元素存储到一个新的集合把"张"开头的集合中的长度为3的元素存储到一个新的集合遍历上一步得到的集…...

Redis——某马点评day01——短信登录

项目介绍 导入黑马点评项目 项目架构 基于Session实现登录 基本流程 实现发送短信验证码功能 controller层中 /*** 发送手机验证码*/PostMapping("code")public Result sendCode(RequestParam("phone") String phone, HttpSession session) {// 发送短信…...

AES加密技术:原理与应用

一、引言 随着信息技术的飞速发展&#xff0c;数据安全已成为越来越受到重视的领域。加密技术作为保障数据安全的重要手段&#xff0c;在信息安全领域发挥着举足轻重的作用。AES&#xff08;Advanced Encryption Standard&#xff09;作为一种对称加密算法&#xff0c;自1990年…...

Unity中PlayerPrefs在PC上存储位置总结

编辑器下和EXE存储位置是不同的&#xff0c;这也不难理解&#xff0c;是为了避免存储位置相同导致开发和测试冲突。 编辑器下位置&#xff1a;HKEY_CURRENT_USER\Software\Unity\UnityEditor\ExampleCompanyName\ExampleProductName EXE位置&#xff1a;HKEY_CURRENT_USER\Sof…...

消融实验:深度学习的关键分析工具

消融实验&#xff1a;深度学习的关键分析工具 在深度学习和机器学习领域&#xff0c;消融实验&#xff08;Ablation Study&#xff09;是一种重要的实验方法&#xff0c;用于理解和评估模型的各个组成部分对其整体性能的贡献。通过这种方法&#xff0c;研究人员可以更深入地了…...

Redis缓存——Spring Cache入门学习

Spring Cache 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCacheCaffeineR…...

Python标准库copy【侯小啾python领航班系列(十五)】

Python标准库copy【侯小啾python领航班系列(十五)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…...

Android--Jetpack--Lifecycle详解

富贵本无根&#xff0c;尽从勤里得 一&#xff0c;定义 Lifecycle 是一个具备宿主生命周期感知能力的组件。它持有组件&#xff08;Activity/Fragment&#xff09;生命周期状态信息&#xff0c;并且允许其观察者监听宿主生命周期状态变化。 顾名思义&#xff0c;Lifecycle的主…...

LeetCode105.从前序和中序遍历序列构造二叉树

这道题看完题想了几分钟就想到大概的思路了&#xff0c;但是在写的时候有很多细节没注意出了很多问题&#xff0c;然后写了1个多小时&#xff0c;其实这道题挺简单的。 首先&#xff0c;最基本的知识&#xff0c;先序遍历是根左右&#xff0c;中序遍历是左根右&#xff0c;那么…...

flutter-一个可以输入的数字增减器

效果 参考文章 代码 在参考文章上边&#xff0c;主要是改了一下样式&#xff0c;逻辑也比较清楚&#xff0c;对左右两边添加增减方法。 我在此基础上加了_numcontroller 输入框的监听。 加了数字输入框的控制 keyboardType: TextInputType.number, //设置键盘为数字 inputF…...

抑郁症中西医治疗对比?

抑郁症是一种常见的心理障碍&#xff0c;治疗方法包括中医和西医两种。下面就抑郁症中西医治疗进行对比&#xff1a; 治疗方法&#xff1a;中医治疗抑郁症强调整体观念和辨证论治&#xff0c;通过调理身体各部分的功能&#xff0c;达到治疗抑郁症的目的。中医治疗抑郁症多采用天…...

012 OpenCV sobel边缘检测

目录 一、环境 二、soble原理介绍 三、源码实验 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、soble原理介绍 Sobel边缘检测是一种广泛应用于图像处理领域的边缘检测算法&#xff0c;它通过计算图像灰度函数在水平方向和垂直…...

【开源视频联动物联网平台】libmodbus 写一个modbus tcp客户端

libmodbus 是一个用于 Modbus 通信协议的 C 语言库&#xff0c;可以用来创建 Modbus TCP 客户端。以下是一个简单的示例代码&#xff0c;演示如何使用 libmodbus 创建一个 Modbus TCP 客户端。 首先&#xff0c;确保你已经安装了 libmodbus 库。你可以从 libmodbus 的官方网站…...

企业微信 Webhook 回调详解

Webhook 回调&#xff0c;是企业微信自动化开发中最核心的能力之一。很多开发者在做企业微信自动化时&#xff0c;都会先关注“消息发送”。 但真正影响系统自动化能力的&#xff0c;其实是“消息回调”。因为只有实时接收到客户消息、群消息与事件通知&#xff0c;系统才能真正…...

如何快速掌握小程序UI组件库:Vant Weapp的5大优势与完整指南

如何快速掌握小程序UI组件库&#xff1a;Vant Weapp的5大优势与完整指南 【免费下载链接】vant-weapp 轻量、可靠的小程序 UI 组件库 项目地址: https://gitcode.com/gh_mirrors/va/vant-weapp Vant Weapp是一款轻量、可靠的小程序UI组件库&#xff0c;专为微信小程序开…...

GRF (1-43) (rat)

一、基础信息中文名称&#xff1a;大鼠生长激素释放因子 (1-43)英文名称&#xff1a;Growth Hormone-Releasing Factor (1-43), rat三字母序列&#xff1a;His-Ala-Asp-Ala-Ile-Phe-Thr-Ser-Ser-Tyr-Arg-Arg-Ile-Leu-Gly-Gln-Leu-Tyr-Ala-Arg-Lys-Leu-Leu-His-Glu-Ile-Met-Asn-…...

早上好呀

早上好...

B2B制造业如何利用GEO优化获得精准询盘:实战指南

B2B制造业如何利用GEO优化获得精准询盘&#xff1a;实战指南 摘要 &#xff1a;随着AI搜索渗透率超过85%&#xff0c;B2B制造业的获客逻辑正在被重塑。本文详细介绍GEO&#xff08;Generative Engine Optimization&#xff09;优化技术如何帮助工业品、机械配件企业获得精准询盘…...

OBS背景移除插件:零绿幕实现专业直播效果的完整指南

OBS背景移除插件&#xff1a;零绿幕实现专业直播效果的完整指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://gi…...

30 岁硕士 Linux C 开发背景,未来想去澳洲就业,研究方向该选 AI、SDN 漏洞还是 Linux 内核?

结合截至 2026 年 5 月 19 日的澳洲就业市场公开信息与岗位语境整理 这类题最容易把人带偏的一步&#xff0c;是一上来就把问题理解成&#xff1a; 哪条研究方向听起来最前沿。 但如果你的目标不是单纯做学术&#xff0c;而是&#xff1a; 未来去澳洲更容易就业。 那问题其…...

智慧树刷课插件:5分钟实现自动化学习,告别繁琐手动操作

智慧树刷课插件&#xff1a;5分钟实现自动化学习&#xff0c;告别繁琐手动操作 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台枯燥的视频播放流程而烦…...

解锁AMD Ryzen潜力:SMUDebugTool硬件调试完全指南

解锁AMD Ryzen潜力&#xff1a;SMUDebugTool硬件调试完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

从PubMed到VOSviewer:手把手教你用MeSH词表做更精准的医学文献关键词共现分析

从PubMed到VOSviewer&#xff1a;解锁MeSH词表在医学文献分析中的精准力量 医学研究者常面临海量文献的筛选难题——如何从数万篇论文中快速识别核心研究方向&#xff1f;传统的关键词共现分析往往被"aged"、"female"等高频但低区分度的词汇干扰&#xff0…...