2024-07-02 07:48:57
一、任意建两个场景,分别命名为testScene1、testScene2,两个场景中分别设置“切换场景”按钮,便于立昂场景之间的相互切换,注意,两个切换按钮加载的的场景均是”loadScene“;建loadScene场景,用于处理加载进度条。
二、导入NGUI资源包,在Unity3D菜单栏中选中NGUI-Open-Prefab Toolbar,在Prefab Toolbar窗口中,选中Control - Colored Progress Bar拖拽至Hierarchy面板,修改名字为”Loading“。
三、在Hierarchy面板,Loading添加子物体Label,Label的Context内容为“loading”,适当调整字体大小。创建脚本LoadingScripts,UI Root的摄像机Camera添加组件LoadingScripts。
四、LoadingScripts脚本代码如图所示。
objProcessBar.GetComponent<UISlider>().value = acOp.progress;
异步加载场景testScene2的速度直接决定了进度条的实际进展速度。
五、加载场景loadScene一闪而过,迅速的就跳转到了场景testScene2。完全无法看到进度条进展的过程。上述代码简单实用性强,非常适合加载大场景大资源等耗时长的情况。
六、为了满足小资源/场景加载时也显示出进度条,使用如下图所示代码。AsyncOperation另一个重要的属性AsyncOperation.allowSceneActivation
acOp.allowSceneActivation = false;
acOp.allowSceneActivation = true;
当acOp.allowSceneActivation = false即使场景已经加载完成,也不会自动跳转,直到acOp.allowSceneActivation = true;
七、实验一下效果,进度条进展效果良好,仔细观察进度条1%、2%、3%到100%,完全按照i++的代码设定执行。这时进度条的额进展速度与异步加载场景的速度无关。
八、之所以能够得到满意的效果,每一个百分比的进度都能展示在眼前,是因为这个脚本中还有一个重要的语句。yield return new WaitForEndOfFrame();
九、将该语句移到while循环语句的大括号外面,再次运行Unity3D,看一下效果,会发现加载场景loadScene再次一闪而过。这是因为这里的while循环只处理了一个判断i 是否小于 100,一个i++,和一个赋值语句,电脑的执行速度非常快,快的有时人眼无法识别。