[Unity]环形进度条(Progress)/拖拽条(Slider)制作

2023-11-04

先上效果图:


上图演示效果可用于圆形进度条的加载,或者用于拖拽验证码的实现,原理相同(以下所有算法获得的坐标均是在fillorign为top时的公式)。

拖拽物体的位置:通过点击拖拽获取当前Rect下本地坐标,然后将这个坐标进行标准化(normalized),之后将这个向量和圆心半径相乘,就是拖拽物的坐标。

代码如下:

    //拖拽物坐标
    Vector2 local_pos = Vector2.zero;
    //m_fill_rec 拖拽物父物体
    RectTransformUtility.ScreenPointToLocalPointInRectangle(m_fill_rec,                 
                                                            eventData.position,                 
                                                            Camera.main,     
                                                            out local_pos);
    local_pos = local_pos.normalized * m_radius;
    //拖拽物位置赋值
    m_drag_rec.anchoredPosition = local_pos;

fillAmount:通过点击拖拽获取当前坐标,然后通过三角函数获取当前角度,角度再转弧度,之后用弧度占比(360°)就可以获得fillAmount的值感谢网友指正,数学已经还给老师了,总之就是这么转来转去。。

代码如下:

    fill_amount = (Mathf.Atan2(-local_pos.x, -local_pos.y) * 180.0f / Mathf.PI + 180.0f) / 360.0f;
    m_fill_bar.fillAmount = fill_amount;

需要注意的是,需要判断下当前拖拽是顺时针还是逆时针,通过这个来判断什么时候可以逆时针拖拽,什么时候不可以(比如当fillAmount为0时)。

判断顺逆时针代码如下:

    private void JudgeDragDir()
    {
        if (m_cur_drag_pos.x > 0)
        {
            //第一象限 第四象限
            if (m_cur_drag_pos.y > 0)
            {
                if (m_cur_drag_pos.y > m_last_drag_pos.y)
                {
                    m_cur_drag_dir = EDRAGDIR.anticlockwise;
                }
                else
                {
                    m_cur_drag_dir = EDRAGDIR.clockwise;
                }
            }
        }
        else
        {
            //第二象限 第三象限
            if (m_cur_drag_pos.y > 0)
            {
                if (m_cur_drag_pos.y > m_last_drag_pos.y)
                {
                    m_cur_drag_dir = EDRAGDIR.clockwise;
                }
                else
                {
                    m_cur_drag_dir = EDRAGDIR.anticlockwise;
                }
            }
        }
    }

完整demo链接:

Unity+UGUI圆形进度条-Unity3D文档类资源-CSDN下载

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

[Unity]环形进度条(Progress)/拖拽条(Slider)制作 的相关文章

  • Java 中Map五种取值方式

    map的主要作用是什么 可以通过创建一个map的实现类 来存放 数据 值 和值的描述 也可以通过描述去取得数据 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 此接口取代 Dictionary 类 后者完全是一个抽

随机推荐

  • python的@property有什么用?

    从本质上讲 property是一个语法糖 语法糖是python里老生常谈的事务了 比方说 最基础的len iterable 函数 其实是通过调用iterable len 方法实现的 只是pythonic的理念让我们习惯并且喜欢上使用诸如fu
  • EMWIN显示中文

    上面是我创建的群聊 欢迎新朋友的加入 安装软件 在桌面新建TXT 文件另存为 打开软件 选择字体和大小 取消所有已选内容 导入刚刚的文件 都在edit下面 截图不了 另存为C文件 导入工程 后面的问号不是乱码 是字符 后面整理一下文件 就是
  • Klocwork — 符合功能安全要求的自动化静态测试工具

    Klocwork 符合功能安全要求的自动化静态测试工具 Klocwork工具应用静态分析技术 可实现对C C Java等代码的全面静态分析 检查问题种类既包含软件质量和安全缺陷相关 也可实现多种语言编码规则规范的检查 通过使用Klocwor
  • QCC300x笔记(6) -- QCC3007的OTA流程梳理

    哈喽大家好 这是该系列博文的第六篇 篇 lt lt 系列博文索引 快速通道 gt gt 写在前面 QCC300x支持OTA功能 官方提供了详细的文档说明 按照文档即可升级成功 下面是对流程的简单梳理 可参考 文档和APP下载 1 生产APP
  • C语言解析FLM(ELF)格式文件

    C语言解析FLM ELF 格式文件 代码下载 https gitee com jhembedded flmparse 1 前言 写这篇博客的目的是因为最近在做一个STM32的离线编程器 离线下载需要用到FLM文件的下载算法 所以实现了一下提
  • [人工智能-深度学习-28]:卷积神经网络CNN - 网络架构与描述方法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120806599 目录 第1章 卷积神
  • Spring Boot Event Bus用法

    Spring Boot Event Bus是Spring框架中事件驱动编程的一部分 它为应用程序中的不同组件提供了一种解耦的方式 以便它们可以相互通信和交互 以下是Spring Boot Event Bus的用法 导入依赖 首先 您需要在项
  • 如何编写脚本对项目代码进行分析(测试篇)

    本篇将从一个测试的角度 对于在开发过程中 如何对代码进行完善的测试 包括功能以及性能的测试 内容属于杂谈 可能不够严谨 但希望能帮到看到这篇文章的各位 前言 我想没有人会质疑测试的重要性 我们自己编写的代码 可能需要经过很多次的测试才能上线
  • Java 数据库介绍

    数据库基础 数据库概念 数据库 Database 是按照数据结构来组织 存储和管理数据的仓库 它是存储数据集合的容器 可以看做一个文件夹 里面存放着一系列有关联的数据表 数据表 Table 是一种结构化的数据 以列和行为单位来存储的一种结构
  • 基于TCP协议的select多路复用IO服务器编程

    一 初识TCP协议 TCP协议是面向链接 可靠的 基于字节流传输层协议 使用严格的应答机制来保证可靠性 1 建立连接时进行三次握手 2 断开连接时进行四次挥手 3 每次发送数据后 都必须要应答 4 会给每个数据包编号 应答时区分编号 TCP
  • Visual Studio 跨平台开发实战(5) - Xamarin Android 多页面应用程式开发

    前言 大部份的Android 都具有实体或虚拟的Back鍵 因此在处理多页面应用程式时 与先前所介绍的iOS Navigation controller 比较起来会简单许多 1 开启Visual Studio 并新增Android Appl
  • Python爬虫到底要学到什么程度才能接单赚钱呢

    Python爬虫可以做副业接单 一些个人或者企业想要爬一些资料数据之类的 可以给他们爬 费用几百上千不等 这又可以增加个人的收入来源 Python爬虫学到什么程度可以接单 你得要熟练使用Python爬虫 那么一些Python基础知识肯定需要
  • OpenGL计算着色器实现光线追踪——以球体跟踪为例

    OpenGL计算着色器实现光线追踪 以球体跟踪为例 光线追踪是渲染领域中的一种技术 通过在场景中发射光线并迭代计算来确定每个像素的颜色值 这种技术可以用于生成真实感和高度逼真的渲染图像 而在OpenGL中 我们可以利用计算着色器实现光线追踪
  • Qt应用开发(基础篇)——工具按钮类 QToolButton

    一 前言 QToolButton类继承于QAbstractButton 该部件为命令或选项提供了一个快速访问按钮 通常用于QToolBar中 按钮基类 QAbstractButton QToolButton是一个特殊的按钮 一般显示文本 只
  • 机器学习中的高斯分布

    文章目录 一 高斯分布的概率密度函数 二 一元高斯分布的极大似然估计 2 1 M L E
  • box2d 服务器性能,Box2d三种施加力的方法

    package import Box2D Collision Shapes b2PolygonShape import Box2D Common Math b2Vec2 import Box2D Dynamics Joints b2Revo
  • 2023中国新型灵活就业报告

    导读 9月12日 暨南大学经济与社会研究院和智联招聘联合发布 2023中国新型灵活就业报告 据了解 本报告中新型灵活就业职位具体包括八类工种 平台电商 生活配送 生活服务 平台微商 知识服务 自媒体 平台直播 共享出行司机 八类工种中生活配
  • 测试边界值(上点、内点、离点)

    测试边界值 上点 内点 离点 上点 就是指得边界上得点 开区间的话 上点就是在域外 闭区间得话 上点就是在域内 离点 指得就是离上点最近得点 如果是开区间 那么离点就在域内 如果是闭区间 那么离点就在域外 内点 域内得任意点都是内点 实例
  • scala学习系列(四) Scala关键字(持续更新)

    Scala有39个关键字 package import class object 伴生对象关键字 trait extends with type for private protected abstract sealed final imp
  • [Unity]环形进度条(Progress)/拖拽条(Slider)制作

    先上效果图 上图演示效果可用于圆形进度条的加载 或者用于拖拽验证码的实现 原理相同 以下所有算法获得的坐标均是在fillorign为top时的公式 拖拽物体的位置 通过点击拖拽获取当前Rect下本地坐标 然后将这个坐标进行标准化 norma