拖拽实现+摇杆实现

拖拽实现

拖拽事件实现:

        半透明渐变贴图在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.mzph.cn/diannao/73778.shtml

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

相关文章

xLua_001 Lua 文件加载

xLua下载 1、HelloWrold 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; // 引入XLua命名空间 public class Helloworld01 : MonoBehaviour {//声明LuaEnv对象 private LuaEnv luaenv;void Start(){//实例化LuaEnv对象…

每天看一篇漏洞报告

前言: 内容来源于乌云漏洞 今日思考xss漏洞, 今天看到一篇文章,里面详细说了xss的绕过技巧,虽然时间久了,没有去尝试,待会有时间去测试一下 以下是整理后的文章,原文在下面 文章链接&#…

【sql靶场】第18-22关-htpp头部注入保姆级教程

目录 【sql靶场】第18-22关-htpp头部注入保姆级教程 1.回顾知识 1.http头部 2.报错注入 2.第十八关 1.尝试 2.爆出数据库名 3.爆出表名 4.爆出字段 5.爆出账号密码 3.第十九关 4.第二十关 5.第二十一关 6.第二十二关 【sql靶场】第18-22关-htpp头部注入保姆级教程…

Python----计算机视觉处理(Opencv:形态学变换)

一、形态学变化 形态学变换(Morphological Transformations)是一种基于形状的图像处理技术,主要处理的对象为二值化图像。 形态学变换有两个输入和一个输出:输入为原始图像和核(即结构化元素),输…

对于memset(b, 1, sizeof b)赋值为16843009情况

memset(b, 1, sizeof b); 的行为看起来可能不符合预期,这是因为 memset 的工作方式和数据类型之间的差异导致的。下面详细解释这个问题。 1. memset 的作用 memset 是 C/C 中的一个标准库函数,用于将一段内存区域的值设置为指定的字节值。它的函数原型如…

【最新版】智慧小区物业管理小程序源码+uniapp全开源

一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…

C++模板进阶

目录 非类型模板参数 类模板的特化 分类 函数模板的特化 模板分离编译 问题 解决方法 1)不对模板定义进行分离或对模板进行特例化; 2)将声明和定义放在同一个文件 总结 关于C模板的使用在《C类和对象》中有介绍,本篇博客…

Ubuntu togo系统读写性能与原生系统测试

我前面把一个Ubuntu环境拷贝到了一个10Gbps的硬盘盒制作了一个Ubuntu togo的系统,帖子在这里,这篇文章主要用于测试使用Ubuntu togo的系统和原生系统的性能差异。 以下是测试Ubuntu togo系统与原系统性能差异的具体方案,结合移动硬盘特性及参…

【css酷炫效果】实现鱼群游动动态效果

【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…

停车场停车位数据集,标注停车位上是否有车,平均正确识别率99.5%,支持yolov5-11, coco json,darknet,xml格式标注

停车场停车位数据集,标注停车位上是否有车,平均正确识别率98.0%,支持yolov5-11, coco json,darknet,xml格式标注 数据集-识别停车场所有车辆的数据集 数据集分割 一共184张图片 训练组 89&am…

结合基于标签置信度的特征选择方法用于部分多标签学习-简介版

假设 部分多标签学习(PML)假设:假设样本的标签集合中存在伪正标签,即某些标签可能是错误的。目标是从候选标签集中识别出真实标签。特征与标签的关系假设:假设不同的标签对应的特征子空间可能是不同的,而不…

Lora微LLAMA模型实战

引言 本文介绍如何复现Alpaca-lora,即基于alpaca数据集用lora方法微调Llama模型。 环境准备 实验环境用的是lanyun,新用户点击注册可以送算力。 下载huggingface上的模型是一个令人头疼的问题,但在lanyun上可以通过在终端运行source /etc…

Maven常见问题汇总

Maven刷新,本地仓库无法更新 现象 This failure was cached in the local repository and resolution is not reattempted until the update interval of aliyunmaven has elapsed or updates are forced原因 因为上一次尝试下载,发现对应的仓库没有这个maven配置…

什么是站群服务器?站群服务器应该怎么选?

站群服务器是专门用于托管和管理多个网站的服务器。通常用于SEO优化、内容分发、广告推广等场景,用户可以通过一个服务器管理多个站点,提升效率并降低成本。选择站群服务器时,需根据业务需求、性能要求、IP资源等因素进行综合考虑。 什么是站…

分享一个项目中遇到的一个算法题

需求背景: 需求是用户要创建一个任务计划在未来执行,要求在创建任务计划的时候判断选择的时间是否符合要求,否则不允许创建,创建的任务类型有两种,一种是单次,任务只执行一次;另一种是周期&…

【LInux进程六】命令行参数和环境变量

【LInux进程六】命令行参数和环境变量 1.main函数的两个参数2.利用main函数实现一个简单的计算器3.环境变量之一:PATH4.修改PATH5.在命令行解释器bash中查看所有环境变量6.用自己写的程序查看环境变量7.main函数的第三个参数8.本地的环境变量和环境变量9.环境变量具…

时间轴版本-2.0

文章简述 这是本人自己封装的时间轴2.0版本的代码,用到了TypeScriptJavaScript 这篇文章只有代码和具体的使用方式,如果想看具体的讲解可以参考本人写的时间轴1.0版本的,在1.0版本中可能计算时间线的逻辑略有不同,但是大致的计算…

大语言模型的压缩技术

尽管人们对越来越大的语言模型一直很感兴趣,但MistralAI 向我们表明,规模只是相对而言的,而对边缘计算日益增长的兴趣促使我们使用小型语言获得不错的结果。压缩技术提供了一种替代方法。在本文中,我将解释这些技术,并…

大华HTTP协议在智联视频超融合平台中的接入方法

一. 大华HTTP协议介绍 大华HTTP协议是大华股份(Dahua Technology)为其安防监控设备开发的一套基于HTTP/HTTPS的通信协议,主要用于设备与客户端(如PC、手机、服务器)之间的数据交互。该协议支持设备管理、视频流获取、…

Linux内核实时机制28 - RT调度器11 - RT 组调度

Linux内核实时机制28 - RT调度器11 - RT 组调度 相关数据结构 内核中通过static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)函数来判断实时任务运行时间是否超出带宽限制,判断这个运行队列rt_rq的运行时间是否超过了额定的运行时间。而“运行时间”和“额定时间”都…