lol手游之任务进度条精准计算

简介: unity实现lol任务进度条精准计算

最近lol手游持续火热中,最近又上线了一个新活动,完成任务,免费送小法。当然。老司机已经成功获得小法一个。
在这里插入图片描述
恰巧,最近工作上也在做一個活動,和lol上面这个任务有类似功能——进度条。注意看,上面进度条的位置等间距,但是相邻两个差值却不一样。今天就带大家来实现这种功能,话不多说,赶紧开始吧!

前言

游戏中,经常会使用进度条的方式,显示玩家当前到目标的进度。进度条的显示方式,更加直观的体现了距离,但是如何在准确的体现进度,就显得尤为重要了。如果只有单纯的一个目标点,显示进度的方式就特别简单,只需要用目标值/当前值获得。如果目标点的个数不固定,且每相邻两个目标点需要达到的差值也不固定,这时候该如何的显示进度呢?

搭建UI

首先创建一个空物体,作为整个进度信息的父节点,命名為prog
在这里插入图片描述
为了更加准确的让玩家知道当前进度值,通常我们会用一个Text组件显示玩家当前完成数。创建记录完成数量的游戏对象,吗,命名为Total,num显示具体的完成数量。
在这里插入图片描述
接下来,创建一个Slider对象,用来显示进度条。
在这里插入图片描述
最后,创建5个宝箱,作为单个目标点。
在这里插入图片描述

思路分析

由于进度条上面的宝箱数量不固定,所以两个宝箱之间的距离和进度值也不固定,都随宝箱数量变化。
首先,我们需要知道宝箱进度条总长度,可以通过移动记录空物体在起始位置(x=232)和终点位(x=232)置的值,做差得到。
232-(-239.1) = 471.1
现在,我们先来研究下怎么计算两宝箱之间的距离。设宝箱数量为n(n=5)用总长度(x= 471.1)除以宝箱分割数量得到,
471.1/n = 471.1/5 = 94.22
有了距离和起始位置,可以算出第一个宝箱以及第n个宝箱的位置。
第1个宝箱位置:-239.1 + 94.22*1 = -144.88
第2个宝箱位置:-239.1 + 94.22*2 = -50.66
第n(n=5)个宝箱位置:-239.1 + 94.22n = -239.1 + 94.225 = 232

获得数据

新建一个空物体,帮助查看进度条的起始位置信息
在这里插入图片描述
用同样的方式,获得终点位置信息
在这里插入图片描述

等间距生成宝箱

等间距生成宝箱代码如下:

local startPosX = -407.9 --进度条起始位置
local progLength = 523.7 --进度条总长度
local tasknumber = {8,20,45,50,58} --每个包厢需要达到的数量,长度即宝箱数

--初始化,获取组件
local function Init()
    self.normalButton = {}
    self.normalImage = {}
    self.normalText = {}
    for i = 1, 5 do
        self.normalButton[i] = transform:Find(string.format("prog/box/normal%s", i)):GetComponent("Button")
        self.behaviour:AddClick(self.normalButton[i], OnClick)
        self.normalImage[i] = self.normalButton[i].transform:GetComponent("Image")
        self.normalText[i] = transform:Find(string.format("prog/box/normal%s/num", i)):GetComponent("Text")
    end
end

--动态生成宝箱位置
local function RefreshBoxPos()
    local len = #tasknumber
    local stepLength = progLength/len
    for i=1,len do
        self.normalButton[i].gameObject.transform.localPosition = Vector2.New(startPosX+i*stepLength,8)
    end
    for i=1,5 do
        self.normalButton[i].gameObject:SetActive(i <= len)
    end
end
AI 代码解读

接下来就是计算进度了,如果单纯用百分比来计算,就会出现如下情况:进度条和实际进度对不上。
在这里插入图片描述

精准计算进度值

为了避免这个情况发生,还是得单独间隔计算进度。即根据任务数量完成来判断某段进度的完成情况。

local perProgVlaue = 1/#tasknumber -- 两个宝箱之间的进度值0-1
local completedNum -- 已经完成的数量

--初始化:获取组件
local function Init()
    self.normalImageProgress = transform:Find("prog/slider"):GetComponent("Slider")
end

--显示进度值
local function RefreshTopProg()
    for i = 1, #tasknumber do
        if completedNum >= tasknumber[i] then
            self.normalImageProgress.value = self.normalImageProgress.value + perProgVlaue
        else
            local lastNum = tasknumber[i-1] or 0 --1
            local currStepValue = perProgVlaue*((completedNum-lastNum)/(tasknumber[i]-lastNum))
            self.normalImageProgress.value = self.normalImageProgress.value + currStepValue
            break
        end
    end
end
AI 代码解读
相关文章
互联网医院在线问诊系统的设计与实现(论文+源码)_kaic
互联网医院在线问诊系统的设计与实现(论文+源码)_kaic
物联网技术在物流领域的应用实例有哪些?
物联网技术在物流领域的应用实例有哪些?
863 59
高效提取图片信息:AI技术赋能企业数字化转型
本文介绍了如何通过AI技术高效提取图片中的结构化信息,提升企业运营效率。具体应用场景包括票据与合同管理、电商商品信息管理、保险理赔和物流单据处理等。AI技术能将传统人工录入流程缩短至秒级,准确率高达99%,减少人为错误,提升客户满意度。方案优势在于易于扩展、灵活高性价比的调用模式及便捷安全的云产品接入。文中还详细描述了部署应用、访问示例应用及使用官方示例进行信息提取的操作步骤,并提供了参考链接和源码下载途径。
“第四次工业革命”-AI革命
“AI变革”被誉为“第四次工业革命”。中国在AI领域持续发力,占亚太地区AI支出的五成,预计2023年市场规模将达到147.5亿美元,约占全球市场的十分之一。IDC预测,中国生成式AI市场年复合增长率将达86.2%。国内企业如百度、阿里、清华等在AI技术研发和应用方面取得显著进展,推动了无人驾驶、送餐机器人、无人快递车等应用场景的发展。尽管AI带来了降本增效,但也引发了就业和社会压力。总体而言,中国在AI领域的投入和发展势头强劲,未来前景广阔。
304 0
“第四次工业革命”-AI革命
量子计算:从理论到实践的跨越
量子计算基于量子力学原理,利用量子比特的叠加态和纠缠特性,展现出远超经典计算机的计算能力。本文从基本概念、发展历程、应用场景及未来挑战四个方面,全面介绍量子计算从理论到实践的跨越,展望其在优化问题、量子化学、机器学习等领域的广泛应用前景。
深入探讨 Webhook 的本质、工作原理以及其在不同领域的应用,帮助你更好地理解和运用这一技术
Webhook是一种在特定事件发生时,由服务器主动向客户端发送通知的机制,实现数据的实时、高效传递。本文介绍Webhook的基本概念、工作原理、应用场景及设置使用方法,探讨其优势与挑战,帮助读者更好地理解和应用这一技术。
308 7
MySQL【问题 02】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
MySQL【问题 02】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
312 0
浅析You-Get:这款视频下载工具的强势之处
浅析You-Get:这款视频下载工具的强势之处
221 0
简单解说:SDK是什么以及它为你做了什么?
简单解说:SDK是什么以及它为你做了什么?
418 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等