ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity场景:异步加载

2021-05-16 17:02:49  阅读:200  来源: 互联网

标签:异步 WaitForEndOfFrame Img Text Percent Unity operation 加载 displayProcess


示例代码

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Panel_Loading : MonoBehaviour
{
	Image Img_Load;
	Text Text_Percent;

	/// <summary>
	/// 虚拟进度
	/// </summary>
	private int _displayProcess;

	/// <summary>
	/// 当前进度
	/// </summary>
	private int _currentProcess;
	
	void Awake()
	{
		UpdateUI();
		Init();
	}
	
	void Init()
	{
		Img_Load = transform.Find_T<Image>("Img_LoadingBar");
		Text_Percent = transform.Find_T<Text>("Text_LoadingPercent");

		StartCoroutine("LoadScene");
	}

	IEnumerator LoadScene()
	{
		//状态重置
		_displayProcess = 0;

		//降低GC开销
		WaitForEndOfFrame WaitForEndOfFrame_ = new WaitForEndOfFrame();
		//发送的消息 data=K+V
		//必须要等一帧 不然加载界面刷不出来
		yield return WaitForEndOfFrame_;

		//开始异步加载
		AsyncOperation operation = SceneManager.LoadSceneAsync(Scene_Mgr.Instance.SceneName, LoadSceneMode.Single);
		operation.allowSceneActivation = false;

		while (operation.progress < 0.9f)
		{
			_currentProcess = (int)(operation.progress * 100);
			while (_displayProcess < _currentProcess)
			{
				_displayProcess += 1;
                Img_Load.fillAmount = _displayProcess / 100f;
                Text_Percent.text = _displayProcess.ToString() + "%";
                yield return WaitForEndOfFrame_;
			}

			yield return WaitForEndOfFrame_;
		}

		_currentProcess = 100;
		while (_displayProcess < _currentProcess)
		{
			_displayProcess += 1;
			Img_Load.fillAmount = _displayProcess / 100f;
			Text_Percent.text = _displayProcess.ToString() + "%";
			yield return WaitForEndOfFrame_;
		}
		operation.allowSceneActivation = true;
		yield return WaitForEndOfFrame_;
	}

	void UpdateUI()
	{
		Img_Load.fillAmount = 0;
		Text_Percent.text = "0%";
	}

}

标签:异步,WaitForEndOfFrame,Img,Text,Percent,Unity,operation,加载,displayProcess
来源: https://blog.csdn.net/weixin_38531633/article/details/116896270

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有