拖拽实现+摇杆实现

拖拽实现

拖拽事件实现:

        半透明渐变贴图在ios设备下,使用压缩会造成图片质量损失,所以可以将半透明渐变UI切片单独制作真彩色图集

拖拽事件组

        IBeginDragHandler:检测到射线后,当拖拽动作开始时执行一次回调函数

        IDragHandler:拖拽开始后,有拖拽位置变化时,执行回调函数(每个移动)

        IEndDragHandler:拖拽进行中时,当鼠标或手抬起时,执行一次回调函数

public class TestDrag : MonoBehaviour,
IBeginDragHandler,IEndDragHandler,
IDragHandler
{public void OnBeginDrag(PointerEventData eventData){Debug.Log("开始拖拽");}void IEndDragHandler.OnEndDrag(PointerEventData eventData){Debug.Log("结束拖拽");}//PointerEventData是Unity从设备硬件接收到的数据和事件相关的一些数据//拖拽中会连续回调,将被拖拽物体的执行代码放在OnDrag中才能实现物体的连续移动public void OnDrag(PointerEventData eventData){//拖拽移动的实现//手指触摸屏幕,产生坐标点//移动实现,需要将屏幕的坐标点,转换为被移动物体的本地坐标系下的位置点//使用被移动物体的transform,通过本地坐标系的点实现位置改变//相对的父物体是谁?//屏幕的坐标点//摄像机是谁?Vector2 localPos;RectTransformUtility.ScreenPointToLocalPointInRectangle(transform.parent as RectTransform,//参考坐标系对象的RectTransformeventData.position,//事件发生时屏幕的触摸点eventData.pressEventCamera,//触发事件的相机out localPos//以第一个参数作为参考坐标系的事件触发位置);transform.localPosition=localPos;Debug.Log("拖拽中......");}
}

如何获取物体的位置:

        位置:相对量,需要有参照物体

        屏幕坐标:手点击屏幕时生成

        DragArea本地坐标:控制摇杆(DragBar)的位置 

如何通过屏幕坐标系下的点,转换到DragArea本地坐标系下的点

//通过屏幕事件坐标,获得本地事件坐标
RectTransformUtility.ScreenPointToLocalPointInRectangle(transform as RectTransform,//参考坐标系对象的RectTransformeventData.position,//事件发生时屏幕的触摸点eventData.pressEventCamera,//触发事件的相机out localPos//以第一个参数作为参考坐标系的事件触发位置
);
摇杆实现

相关代码如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;//需要在UI上设定一个点击区域,点击后,摇杆出现,抬起后摇杆消失
//根据点击位置移动整个摇杆
//拖拽时将杆的位置进行移动
//限制摇杆距离
public class DragController : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IDragHandler
{public GameObject dragBar;public Transform bar;//可移动区域的最远距离public float R;// Start is called before the first frame updatevoid Start(){dragBar.SetActive(false);}public void OnPointerDown(PointerEventData eventData){dragBar.SetActive(true);Vector2 localPos;RectTransformUtility.ScreenPointToLocalPointInRectangle(transform as RectTransform,//参考坐标系对象的RectTransformeventData.position,//事件发生时屏幕的触摸点eventData.pressEventCamera,//触发事件的相机out localPos//以第一个参数作为参考坐标系的事件触发位置);dragBar.transform.localPosition = localPos;}public void OnPointerUp(PointerEventData eventData){dragBar.SetActive(false);bar.localPosition = Vector3.zero;}public void OnDrag(PointerEventData eventData){Vector2 localPos;RectTransformUtility.ScreenPointToLocalPointInRectangle(dragBar.transform as RectTransform,//参考坐标系对象的RectTransformeventData.position,//事件发生时屏幕的触摸点eventData.pressEventCamera,//触发事件的相机out localPos//以第一个参数作为参考坐标系的事件触发位置);//判断当前向量的长度是否大于Rif (localPos.magnitude > R){localPos = localPos.normalized * R;}bar.transform.localPosition = localPos;}
}

Unity中的具体操作如图:

运行时如图:

 

该系列专栏为网课课程笔记,仅用于学习参考。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36092.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs2017版本与arcgis10.1的ArcObject SDK for .NET兼容配置终结解决方案

因电脑用的arcgis10.1,之前安装的vs2010正常能使用AO和AE,安装vs2017后无法使用了,在重新按照新版本arcgis engine或者arcObject费时费力,还需要重新查找资源。 用vs2017与arc10.1的集成主要两个问题,1:安装后vs中没有…

C语言和C++到底有什么关系?

C 读作“C 加加”,是“C Plus Plus”的简称。 顾名思义,C 就是在 C 语言的基础上增加了新特性,玩出了新花样,所以才说“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。 C 语言是 1972 年由美国贝…

企业微信群聊机器人开发

拿到机器人hook 机器人开发文档 https://developer.work.weixin.qq.com/document/path/91770

AT指令集-NBIOT

是什么? 窄带物联网(Narrow Band Internet of Things, NB-IoT)成为万物互联网络的一个重要分支支持低功耗设备在广域网的蜂窝数据连接,也被叫作低功耗广域网(LPWAN)NB-IoT支持待机时间长、对网络连接要求较高设备的高效连接NB-Io…

网络爬虫【爬虫库urllib】

我叫不三不四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库,无须安装,直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包,大致具备以下功能。 ● urlli…

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下: eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…

弹球小游戏-简单开发版

一、需求 弹球小游戏是一个简单的互动游戏,玩家需要控制一个挡板在窗口底部左右移动,以接住从上方落下的球。游戏的主要需求包括: (1) 游戏界面 :创建一个指定尺寸的游戏窗口,显示球和挡板。 (2) 球的运动 &#xf…

Cursor与Blender-MCP生成3D模型

随着DeepSeek的热度,各行各业接入AI智能,当然作为一个深受3D爱好者喜爱的软件——Blender,也接入了AI智能,通过Blender-MCP,开启一场Blender的智能化模型创建的世界之旅。 目录 1.准备工作2.环境配置2.1 Mac安装2.2 W…

简单以太网配置

display arp //查看路由器mac地址 交换机配置命令: system-view // 从用户视图进入系统视图 dis mac-address //查看mac地址表 路由器配置命令: system-view // 从用户视图进入系统视图 int GigabitEthernet 0/0/0 //进入G口 0/0/0 进入之后配置网关: ip addre…

SpringBoot可以同时处理多少请求?

大家好,我是锋哥。今天分享关于【SpringBoot可以同时处理多少请求?】面试题。希望对大家有帮助; SpringBoot可以同时处理多少请求? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot 本身并不直接限制可以处…

一、初始 Linux

文章目录 一、操作系统概述二、Linux 初识1. Linux 的组成2. Linux 发行版 三、远程链接 Linux 系统1. 四、WSL (windows subsystem for linux)1. 什么是 WSL2. 如何下载 WSL3. 安装不同的 Linux 发行版4. 启动停止使用指定发行版5. 卸载与备份6. 文件共享7. 命令混用8. 用 vsc…

LogicFlow介绍

LogicFlow介绍 LogicFlow是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端自定义开发各种逻辑编排场景,如流程图、ER图、BPMN流程等。在工作审批流配置、机器人逻辑编排、无代码平…

Flask实时监控:打造智能多设备在线离线检测平台(升级版)

前言 武林之中,最讲究的便是“掌控”。若是手下弟子忽然失踪,若是江湖好友生死未卜,岂不令人寝食难安?今日,吾等化身技术侠客,祭出Flask实时监控大法,打造一款智能多设备在线离线检测平台&…

嵌入式编程优化技巧:do-while(0)、case范围扩展与内建函数

在嵌入式编程中,优化代码的性能和可靠性至关重要。无论是通过优化控制结构、提升代码的执行效率,还是利用编译器提供的内建函数来加速关键任务,开发者都需要掌握各种技巧和方法。本文将探讨三种在嵌入式编程中常用的优化技术:do-while(0)的使用、case范围扩展以及内建函数的…

MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景1.1.1 MySQL的发展历程与市场地位1.1.2 MySQL的核心特性与技术优势1.1.2…

Android Audio基础(18)——最小缓冲区

在创建 AudioTrack 时有一个缓冲区大小的参数,最小缓冲区参数通过 AudioTrack.getMinBufferSize() 获取。 一、最小缓冲区 为了让音频数据通路能正常运转,共享FIFO必须达到最小缓冲区的大小。如果数据缓冲区分配得过小,那么播放声音会频繁遭…

Vue:Vue2和Vue3创建项目的几种常用方式以及区别

前言 Vue.js 和 Element UI 都是用 JavaScript 编写的。 1、Vue.js 是一个渐进式 JavaScript 框架。2、Element UI 是基于 Vue.js 的组件库。3、JavaScript 是这两个项目的主要编程语言。 而Element Plus是基于TypeScript开发的。 一、Vue2 1、基于vuecli工具创建 vue2 …

游戏成瘾与学习动力激发策略研究——了解“情感解离”“创伤理论”

一、情感解离(Emotional Dissociation) 定义:情感解离是一种心理防御机制,指个体在经历无法承受的情绪压力或创伤时,通过切断情感体验与认知、记忆或现实感知的联系来保护自我。它不是简单的“麻木”,而是大脑为应对极端刺激而启动的“紧急逃生通道”。 核心特征 1、意…

WPF跨平台开发探讨:借助相关技术实现多平台应用

WPF跨平台开发探讨:借助相关技术实现多平台应用 一、前言二、WPF 跨平台开发的现状与挑战2.1 WPF 的平台局限性2.2 跨平台开发面临的挑战 三、实现 WPF 跨平台开发的相关技术3.1.NET MAUI 简介3.2.NET MAUI 的关键特性3.3 其他相关技术和工具 四、借助.NET MAUI 实现…

ImGui 学习笔记(五) —— 字体文件加载问题

ImGui 加载字体文件的函数似乎存在编码问题,这一点可能跟源文件的编码也有关系,我目前源文件编码是 UTF-16。 当参数中包含中文字符时,ImGui 内部将字符转换为宽字符字符集时候,采用的 MultiByteToWideChar API 参数不太对&#…