Unity3D 异步加载 在 场景加载 中的使用

异步加载

我们想一想玩过的一些游戏,基本都会有加载界面——因为游戏场景数据较大,所以需要加载一小段时间。那为什么一些2D游戏也会有加载界面呢?按理说2D游戏场景会很小,这样做是为了让游戏跑在低端设备上时,有更好的体验。

当我们在开发一些3D游戏的时候,一般情况下在跳转场景时都要提前加载场景资源。以下我通过举例来说说异步加载。

1.首先在建立两个场景。在第一个场景中创建一个进度条(Slider),在第二个场景中创建一个三维物体。

2.然后创建一个脚本,挂载在新创建的进度条(Slider)上。

3.然后接下来看代码。

// 其他的头文件省略
using UnityEngine.UI;    //  引入头文件

public class Loading_scene : MonoBehaviour
{
        private   Slider Slider;     // 进度条
        private AsyncOperation  asyncOperation;
        public   Text Pecentage_Text;    // 显示进度的文本

    
         void Awake()
        {
             // 将自身对象的slider组件给Slider  属性
              slider = gameObject.GetComponent<Slider>();
         } 
    private void Start()
    {
        StartCoroutine("LoadScene", Scene_name);   // 开启协程
    }

    IEnumerator LoadScene(string Scene_name)     // 通过协程加载场景
    {
        asyncOperation = SceneManager.LoadSceneAsync(Scene_name);//异步跳转到Scene_name场景 
        asyncOperation.allowSceneActivation = false;//当game场景加载到90%时,不让它直接跳转到game场景。 
        yield return asyncOperation;
    }


void Update()
    {
       if (asyncOperation == null)
        {
            return;
        }
        int progressVaule = 0;
        if (asyncOperation.progress < 0.9f)
        {
            progressVaule = (int)asyncOperation.progress * 100;
        }
        else
        {
            progressVaule = 1000;
        }
        if (curProgressVaule < progressVaule)
        {
            curProgressVaule+=2;
        }
        Pecentage_Text.text = curProgressVaule /10+ "%";

        Slider .value = curProgressVaule / 1000f;
        if (curProgressVaule == 1000)
        {
            asyncOperation.allowSceneActivation = true;
        }
    }

    
}       

猜你喜欢

转载自www.cnblogs.com/spiderljx/p/11025576.html
今日推荐