拖拽实现+摇杆实现

ops/2025/3/20 0:25:04/
拖拽实现

拖拽事件实现:

        半透明渐变贴图在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.ppmy.cn/ops/167149.html

相关文章

docker 安装mysql

第一步:利用docker拉取镜像 docker pull mysql:5.7 代表安装成功,然后可以使用docker images查询已经拉取成功的镜像 第二步:快速安装mysql 快速安装一般不需要挂载配置,如需挂载配置文件,需要查看当前mysql的配置文…

腾龙T2000边缘计算网关:开启智能物联新时代

在当今数字化浪潮中,物联网与边缘计算技术正以前所未有的速度改变着世界。腾龙一体机应运而生,成为这一变革中的关键力量。它不仅是一款高性能的硬件设备,更是集成了先进的 AIoTedge 物联网平台,为企业和开发者提供强大而灵活的解…

SwinTransformer 改进:添加DoubleAttention模块提升上下文语义提取能力

目录 1. DoubleAttention模块 2. SwinTransformer + DoubleAttention 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. DoubleAttention模块 DoubleAttention 是一种用于计算机视觉任务的注意力机制,旨在通过双重注意力机制…

OceanBase 4.3.3 AP 功能解析:物化视图

OceanBase 在2024 年度发布会中正式发布了 4.3.3 GA 版本,作为 AP 场景的主推版本。本文分享 OB 4.3.3 AP 能力的主力功能之一 —— 物化视图。 物化视图特性概述 OceanBase的AP功能具备众多关键特性。之前我们已经介绍了外部表、JSON类型、RoaringBitmap类型以及列…

小程序API —— 53 本地存储

小程序本地存储是指在小程序中使用 API 将数据存储在用户的设备上,以便小程序在运行时和下次启动时快速地读取这些数据; 小程序本地存储的 API 可以分为两类,每一类可以分为四种: 同步 API: 存储:wx.setS…

从bootloader跳到APP需要几步?

从bootloader跳到APP需要几步? 对于bootloader跳转到APP具体流程,我们用下面一个例子去讲解。首先将 bootloader 程序和 app 程序的大小都是 2K ,bootloader 从 0x08000000 到 0x080007FF , app 程序从 0x08000800 到 0x08000FFF 。   接下…

API 返回的PDF是一串字符,如何转换为PDF文档

当API返回的PDF是以一串字符的形式(通常是Base64编码的字符串),你可以将其解码为二进制数据,然后保存为PDF文件。以下是一个简单的Python示例,展示如何将Base64编码的PDF字符串转换为PDF文档: import base…

基于Python+Flask+MySQL+HTML的爬取豆瓣电影top-250数据并进行可视化的数据可视化平台

FlaskMySQLHTML 项目采用前后端分离技术,包含完整的前端,以flask作为后端 Pyecharts、jieba进行前端图表展示 通过MySQL收集格列数据 通过Pyecharts制作数据图表 这是博主b站发布的详细讲解,感兴趣的可以去观看:【Python爬虫可…