Unity圆环进度条制作

来源:互联网 发布:flac转wav软件 mac 编辑:程序博客网 时间:2024/04/19 07:21

0. 背景

最近有个在Unity中制作圆环进度条的需求,并在圆中显示进度数值,类似于图1:

这里写图片描述
图1. 圆环进度条

平时制作直线的进度条比较多,突然要求做个圆环的有些不适应。不过,这个需求google一下其实大量的解答就出来,关键字"unity circle progress bar",于是我采用了 Unity5 Radial Progress Bar Tutorial HD - YouTube 这个方法,有兴趣的同学可以去看看,接下来我简要叙述一下制作的方法。

1. 制作步骤

a). Unity版本

需求制作使用Unity5的UGUI的新GUI组建(UGUI自Unity4.6版本出现的)。

b). 新建Canvas

a). 在菜单栏GameObject/UI/Canvas,新建Canvas,如图2。

这里写图片描述
图2

c). 新建circleProcessBar

b). 同理,在Canvas中新建一个Create/UI/Image中新建一个image,作为Canvas子物体,并命名为circleProcessBar,如图3。

这里写图片描述
图3

d). 新建circleProcessBar/process

c). 在circleProcessBar中创建一个image,作为circleProcessBar第一个子物体,并命名为process。这个Image主要的功能是以类似雷达扇形扫描形式,作为圆环进度条最核心的基础GameObject。

I) 在此物体process的Image组件中,设置Source Image为Unity自带的Knob

II) 在Color中随便选择一种颜色,本文中选择

{ "R" : 37, "G" : 237, "B" : 230, "Alpha" : 255}

III) 选择后会出现ImageType属性,分别选

{    "ImageType" : "Filled",    "FillMethod" : "Radial 360",    "FillOrigin" : "Top",    "Clockwise" : False}

如图4所示。

这里写图片描述
图4

这时候,修改FillAmout属性,就可以做成类似雷达扇形扫描的进度,如图5。但是我们希望是圆环,并不是扇形。

这里写图片描述
图5

e). 新建circleProcessBar/innerCircle

d). 在circleProcessBar中再创建一个image,作为circleProcessBar第二个子物体,并命名为innerCircle。该物体的作用是:覆盖前面的process,将扇形进度变成圆环进度。将图3中的Assets中innerCircle.png拖入Image组件的SourceImage中,并将size设置为:

{"width" : 112, "height" : 112}

f). 新建circleProcessBar/indicator

e). 在circleProcessBar中创建一个Text,作为circleProcessBar第三个子物体,并命名为indicator
该物体的用作是:显示圆环进度值。为能够清楚显示,调整indicator的属性。

{    RectTransform.Size  : {"width": 160, "height" : 160}    RectTransform.Scale : {"x" : 0.5, "y" : 0.5},     Character.FontStyle : 55,    Paragraph.Alignment : ("center", "middle"),    Color               : {"R" : 79, "G" : 227, "B" : 139}}

设置好后,整个hierarchy如图6所示。

这里写图片描述
图6

g). 新建circleProcess.cs

f). 新建C#脚本-circleProcess.cs,并拖至物体circleProcessBar,作为其的一个脚本组件。

I) 声明在Unity设置的属性:

[SerializeField]float speed;[SerializeField]Transform processTrans;[SerializeField]Transform indicatorTrans;

II) 设置speed为0.1,processTransproces物体的transform,indicatorTransprocess物体的transform。

III) 编写Update函数,是的环形进度在设置目标进度后SetTargetProcess之后,能够有一段时间的动画。

// Update is called once per frame    void Update () {        if (currentAmout < targetProcess) {            Debug.Log("currentAmount:" + currentAmout.ToString());            currentAmout += speed;            if(currentAmout > targetProcess)                currentAmout = targetProcess;            indicatorTrans.GetComponent<Text>().text = ((int)currentAmout).ToString() + "%";            processTrans.GetComponent<Image>().fillAmount = currentAmout/100.0f;        }    }

h). Unity Play

最终的效果如图7所示。

这里写图片描述
图7

2. 总结

这样就达到了我们需求了,O(∩_∩)O哈哈~,.unity, cs, 资源文件,请移步csdz的gitbub下载。

3 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深圳住房公积金电话多少 南宁住房公积金查询 住房公积金查询电话12329 济宁住房公积金管理中心 宁德市住房公积金查询窗口 兰州市住房公积金查询系统 孝感住房公积金查询 兰州住房公积金查询 滁州住房公积金 上海住房公积金网 个人住房公积金查询网 省住房公积金管理中心 韶关市住房公积金管理中心 长沙住房公积金管理中心 赣州住房公积金查询 西安住房公积金查询 南充住房公积金查询 北京住房公积金查询 南宁住房公积金查询个人账户 东莞住房公积金 资阳住房公积金查询 西安市住房公积金查询系统 郑州住房公积金查询 连云港市住房公积金查询系统 上海住房公积金查询个人账户 滁州住房公积金查询 住房公积金办理条件 住房公积金怎么交 住房公积金密码是什么 赣州住房公积金查询个人账户 南宁市住房公积金中心 昆山住房公积金查询 住房公积金办理 宜宾住房公积金查询 连云港住房公积金查询 柳州住房公积金管理中心 个人住房公积金查询 南宁市住房公积金 住房公积金异地买房 滁州市住房公积金管理中心 住房公积金查询个人账户查询