zoukankan      html  css  js  c++  java
  • Unity跳转场景

    Unity中如何加载场景

    1、首先需要将场景添加到 Build Settings中,如下图:

    2、引用using UnityEngine.SceneManagement;

    同步加载:如果场景很大,有可能会卡顿。

     1 using UnityEngine;
     2 using UnityEngine.SceneManagement;
     3 
     4 public class TestA : MonoBehaviour
     5 {
     6     private void Start()
     7     {
     8         SceneManager.LoadScene("SceneName");
     9     }
    10 }

    异步加载:

    我们需要三个场景来完成异步加载,开始场景、过渡场景、目标场景,一般会在过渡场景来做个加载进度条。

    假设我们现在有TestA、TestB、TestC三个场景,如何完成A到B到C的异步加载,并实现加载进度条呢?代码如下:

    在TestA场景中挂载脚本TestA

     1 using UnityEngine;
     2 using UnityEngine.SceneManagement;
     3 
     4 public class TestA : MonoBehaviour
     5 {
     6     private void Start()
     7     {
     8         SceneManager.LoadSceneAsync("TestB");
     9     }
    10 }

    在TestB场景中挂载脚本TestB

     1 using System.Collections;
     2 using UnityEngine;
     3 using UnityEngine.SceneManagement;
     4 using UnityEngine.UI;
     5 
     6 public class TestB : MonoBehaviour
     7 {
     8     public Slider slider;                   //加载进度条
     9     private AsyncOperation mAsyncOperation; //异步加载信息
    10 
    11     private void Start()
    12     {
    13         StartCoroutine(LoadScene());
    14     }
    15     private void Update()
    16     {
    17         UpdateSlider();
    18     }
    19     /// <summary>
    20     /// 异步加载场景
    21     /// </summary>
    22     /// <returns></returns>
    23     IEnumerator LoadScene()
    24     {
    25         mAsyncOperation = SceneManager.LoadSceneAsync("TestC");
    26         //不跳转场景,停留在当前场景
    27         mAsyncOperation.allowSceneActivation = false;
    28         yield return mAsyncOperation;
    29     }
    30     /// <summary>
    31     /// 更新加载进度条
    32     /// </summary>
    33     private void UpdateSlider()
    34     {
    35         if (slider.value >= 1)
    36         {
    37             //跳转到目标场景
    38             mAsyncOperation.allowSceneActivation = true;
    39             return;
    40         }
    41         else if (slider.value >= 0.9f)
    42         {
    43             slider.value += Time.deltaTime;
    44             return;
    45         }
    46         //mAsyncOperation.progress属性为场景加载进度,但是最大值为0.9f。
    47         slider.value = mAsyncOperation.progress;
    48 
    49     }
    50 }

    这样就可以完成异步加载,并实现加载进度条。

    有两点需要注意:

    1、mAsyncOperation.progress属性最大值为0.9f。

    2、用mAsyncOperation.allowSceneActivation来控制什么时候跳转场景。

    如果场景太小的,加载会非常快,进度条会一闪而过,所以进度条是否使用mAsyncOperation.progress属性的值,根据自己的需求来。

  • 相关阅读:
    李清华 201772020113《面向对象程序设计(java)》第十四周学习总结
    李清华201772020113《面向对象程序设计(java)》第十三周学习总结
    201772020113李清华《面向对象程序设计(java)》第十二周学习总结
    李清华201772020113《面向对象程序设计(java)》第十一周学习总结
    2020软件工程作业00——问题清单
    2020软件工程个人作业06
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/9427847.html
Copyright © 2011-2022 走看看