进度条的制作

在Loading界面切换的时候,不仅需要用到异步加载,更需要用进度条来表示切换的进度。今天我就来介绍一下,何如制作“音之国度”中的过渡页面进度条。


首先,我们当然先需要得到一个进度条(滑稽)。


制作一个进度条有两种比较简单的方法。

1、在NGUI中,已经存在ProgressBar的预设体,所以求省事的同学,可以直接把该预设体拖入游戏窗口内,就可以得到一个进度条。

如图为NGUI预设的进度条。


2、可以自己手动制作一个进度条,这需要我们以以下的格式创建几个Sprite,有必要的话,再加上两个label用于表示进度和Loading的状态。

其中,Sprite_front用于表示进度条中可变的部分。Sprite_back用于表示进度条的背景。

分别给两个Sprite设置图片即可。

设置完以后可以得到如下一张图:

但这时候进度条还仅仅只是有了一个雏形,还需要让它变成一个动态的组件。这时候为Sprite_ProcessBar添加上NGUI Slider的脚本。然后将front和back分别拖入对应的位置。

将label拖入On Value Change中的Notify位置中,选择SetCurrentProcess选项,就可以把这个你自己制作的进度条变成动态的了。



好了,这样我们就得到了我们需要的进度条,接下来要做的就是让进度条和游戏画面的跳转结合在一起。


要达到异步加载场景资源的功能,需要开启一个异步的任务。

 void Start()
    {
        //在这里开启一个异步任务,
        //进入loadScene方法。
        StartCoroutine(loadScene());
    }
在脚本的Start方法中,使用StartCoroutine的方法,参数为开启协程所调用的方法。

要注意与StartCoroutine对应的还有 Yield和Yield return的方法。协程可以在任何地方用yield来暂停,用yield return来标记协程何时继续进行。


因为我们的场景中要加载的资源比较少,所以加载场景可能闪过地很快,甚至不容易观察到。为了方便观察,所以我们控制了加载场景加载的速度。

IEnumerator loadScene()
    {
        //异步读取场景。
        //Globe.loadName 就是A场景中需要读取的C场景名称。
        float i = 0;
        AsyncOperation acOP = Application.LoadLevelAsync("DemoScene");
        acOP.allowSceneActivation = false;
        while (i <= 500)
        {
            i++;
            objProcessBar.GetComponent<UISlider>().value = i / 500;
             yield return new WaitForEndOfFrame();
        }
       
        acOP.allowSceneActivation = true;

    }


要注意这里AsyncOperation,异步操作对象acOp,异步加载的场景是“DemoScene”。


acOP.allowSceneActivation表示控制加载的场景是否激活,若激活则跳转到该场景。

除此之外,还有AsyncOperation.process用来表示加载的进度,isDone函数用来表示加载是否完成。


**要能够成功加载出来,必须在Build Setting里面将两个场景放在一起。


将该脚本挂到加载场景的相机上即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值