unity canvas text_Unity异步加载与游戏进度条加载显示

52df5143bb76008c74cf4e23326920c9.png

在unity中,如果加载的资源过大的话,使用同步加载便会产生卡顿的现象,为了保证玩家的游戏体验,我们法通常采用多线程或者使用引擎本身自带的异步加载方法,接下来,就让我带领大家一起去了解一下异步加载吧

我们在Unity 中新建两个场景,分别命名为OneScene,TwoScene,接下来,我们会利用异步加载从场景TwoScene跳转到OneScene;

26c12124033357bdf946e4fdd2583968.png

这是TwoScene场景,注意下,要将Image Type的类型改为 Filled,我们会通过改变fillAmount值改变数据加载进度

接下来我们开始敲代码(将代码挂在Canvas上)

df401f2d107f6cf1ca741bb4b037bba4.png

20f26ae2e65259af9e94f022a6cc9431.png

using UnityEngine;

using UnityEngine.UI;

using UnityEngine.SceneManagement;

using System;

public class LoadingWnd : MonoBehaviour

{

public LoadingWnd loadingWnd; //加载界面

public const string OneScene = "OneScene"; //需要跳转的场景

public Text txtFG; //文本的数据显示

public Image ImgFG; //图片的显示

public void Start()

{

DontDestroyOnLoad(this); //加载完成后不销毁UI

EnterLogin(); //跳转

LodWnd(); //初始化

}

public void EnterLogin()

{

loadingWnd.gameObject.SetActive(true); //显示UI

AsyneLoadScene(OneScene); //通过异步加载跳转到OneScene

}

public Action prgCB = null; //封装好委托,用于更新的回调

public void AsyneLoadScene(string sceneName)

{

AsyncOperation sceneAsync = SceneManager.LoadSceneAsync(sceneName); //通过异步加载的接口拿到异步操作

prgCB = () =>

{

float val = sceneAsync.progress; //代表异步加载的值

loadingWnd.SetProgress(val);

if (val == 1) //当值为一时,完成异步

{

prgCB = null;

sceneAsync = null;

loadingWnd.gameObject.SetActive(false);

}

};

}

public void LodWnd()

{

txtFG.text = "0"; //文字初始化为0

ImgFG.fillAmount = 0; //进度条初始化

}

public void SetProgress(float prg)

{

txtFG.text = (int)(prg * 100) + "%"; //文本的计算方法

ImgFG.fillAmount = prg;

}

private void Update() //更新的回调,每帧调用

{

if(prgCB!=null)

{

prgCB();

}

}

}

最后放上源码,大家有不懂得可以评论区问我哦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值