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

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

精准计算进度值

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

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
相关文章
|
4月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
290 5
|
7月前
|
人工智能 Linux C#
八宫格丨九宫格丨淘金镇丨潮玩元宇宙大逃杀游戏系统开发指南步骤及稳定版
uSurvival - the new Multiplayer Survival Asset from the creator of uMMORPG.
|
5G 流计算 芯片
华为折叠屏手机Mate X宣传海报曝光 有望近期开售
早在今年2月的MWC 2019大展上,华为推出的首款折叠屏新机Mate X就博取了众多目光。极具想象力的鹰翼式折叠设计,开合随心自由变幻,一举荣获“MWC 2019最佳新联接移动终端奖”。
251 0
华为折叠屏手机Mate X宣传海报曝光 有望近期开售
定制电竞比分网LOL英雄联盟数据API接口调用代码
定制电竞比分网LOL英雄联盟数据API接口调用代码
547 0
定制电竞比分网LOL英雄联盟数据API接口调用代码
|
新零售 搜索推荐 数据可视化
案例酷 | 4大兵器在手 奇瑞实现连续7个月销售上涨
据最新公布的奇瑞集团销量数据显示,今年7月,奇瑞集团共销售汽车4.9万辆,今年1月到7月,奇瑞集团累计销量已达37.3万辆,实现了连续7个月的销量增长。 优异成绩的背后,除了造车技术的精进,到底奇瑞还有什么样的秘密武器?
843 0
案例酷 | 4大兵器在手 奇瑞实现连续7个月销售上涨
|
新零售 机器学习/深度学习 人工智能
【阿里云MVP月度分享】基于PAI平台和Pokemon数据集判断精灵是否为极品精灵
Pokemon《精灵宝可梦》,也叫《口袋妖怪》、《宠物小精灵》、《神奇宝贝》,是世界上第二热销的系列电子游戏,仅次于任天堂的超级马里奥系列。本文采用kaggle上Pokemon数据集,基于阿里云PAI平台进行实验,利用数据集中提供的精灵能力值来判断精灵是否为极品精灵。
电竞英雄联盟LOL数据api接口示例
电竞英雄联盟LOL数据api接口示例
|
新零售 大数据 搜索推荐
8月17日科技联播:搜索热度赶超214情人节,七夕成中国情侣“撒狗粮”官方指定时间
行行好,给单身狗一条活路呗,七夕已经当仁不让地成为“过浪漫”、“撒狗粮”官方指定时间,红芯浏览器微信致歉不应强调国产自主,这样的道歉你接受吗?“靠脸吃饭”的时代真的来了,支付宝宣布刷脸支付已经具备商业化的能力!.....在.“七夕效应”的影响下,今天的科技圈比较平静,可能大家都去撒狗粮了!
2167 0