Unity有间隔的UI经验条自适应与加载

在这里插入图片描述
今天遇到制作上图这样的进度条,自适应和加载都需要用代码实现,所以记录一下这个小技巧,
首先吧进度条制作一下,创建一个背景把锚点放在最下方,然后创建空物体(背景是父物体),然后制作十个(根据自己需求)小进度条(空物体是父物体),,
给空物体挂载GridLayoutGroup组件,
在这里插入图片描述
间隔为10, Cell Size的X 用代码计算,Y自己调个合适的数即可,

下面是代码部分:

    //进度条的空物体背景
    public Transform expPrgTrans;
     GridLayoutGroup grid = expPrgTrans.GetComponent<GridLayoutGroup>();
        //全局比例   计算UI基于当前屏幕高度的缩放比例:屏幕标准高度除以屏幕高度   使用高度计算比例是因为UI面板的缩放是基于高度的
        float globalRate = 1.0f * Constants.ScreenStandardHeight / Screen.height;
        //当前真实的UI宽度:当前屏幕宽度乘以全局比例
        float screenWidth = Screen.width * globalRate;
        //获取进度条
        float width = (screenWidth - 178) / 10;
        grid.cellSize = new Vector2(width, 7);

ScreenStandardHeight是屏幕的标准高度(即画布高度),
我的是在这里插入图片描述

使用Screen.height来计算全局比例,是因为UI面板的缩放是基于高度的,
在这里插入图片描述
(screenWidth - 178) / 10:
178= (EXP图标所占的大小(选着进度条的背景即可看到,如我的是74) +进度条的父物体(空物体)与背景两头空余出的空间(选着空物体即可看到,如我的左边是4 右边是10)+ 进度条之间的间隙(10个小进度条有9个间隔 每个间隔是10,共90))全部相加后除以10,

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
以上是制作经验条和自适应的操作,

--------------------------分割线--------------------
以下代码是经验条的加载

       int expPrgVal = (int)(pd.exp * 1.0f / PECommon.GetExpUpValByLv(pd.lv) * 100);
        int index = expPrgVal / 10;

//加载进度条
for (int i = 0; i < expPrgTrans.childCount ; i++)
{
Image img = expPrgTrans.GetChild(i).GetComponent<Image>();
if(i<index )//全部加载
{
                img.fillAmount = 1;
}
else if(i==index )
{
                img.fillAmount = expPrgVal %10 * 1.0f / 10;
}
else
{
                img.fillAmount = 0;
}
}

expPrgVal可以显示在text文本上,
GetExpUpValByLv是计算这个项目计算经验值的方法(根据自己项目中经验值编写代码)

//升级的经验值
    public static int GetExpUpValByLv(int lv)
    {
        return 100 * lv * lv;
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值