Vuforia官方案例自学笔记-03-加载场景

vuforia官方案例自学,只为学习交流,肯定会有错误与肤浅之处,仅供参考

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

public class LoadingScreen : MonoBehaviour
{
    /// <summary>
    /// m_SpinnerImage:RawImage组件,用于显示“加载场景”的图片
    /// m_AsyncOperation:异步操作协同线,此处用于异步加载场景
    /// </summary>
    RawImage m_SpinnerImage;
    AsyncOperation m_AsyncOperation;
    bool m_SceneReadyToActivate;

    public static string SceneToLoad { get; set; }

    public static void Run()
    {
        SceneManager.LoadSceneAsync("2-Loading");
    }

    /// <summary>
    /// 获取RawImage组件
    /// ThreadPriority:线程优先,是一个枚举类,值分别是Low,BelowNormal,Normal,High,低优先级意味着后台操作运行更少,占用时间也更少,进度会更慢。
    /// Application.backgroundLoadingPriority:后台加载线程的优先级
    /// </summary>
    void Start()
    {
        m_SpinnerImage = GetComponentInChildren<RawImage>();
        Application.backgroundLoadingPriority = ThreadPriority.Low;
        StartCoroutine(LoadNextSceneAsync());
    }

    /// <summary>
    /// 如果存在RawImage组件,并且还未能加载下一个场景,让“加载”图片旋转,如果已经准备好可以加载下一个场景,将“加载”图片的Raw Image组件禁用掉
    /// m_AsyncOperation.progress:返回异步操作的进度,返回操作离完成有多近,当进度达到1.0f并且调用isDone时,表示异步操作已经完成
    /// 如果异步操作(在后台加载场景)进度大于0.9,表明已经准备好可以加载下一个场景了
    /// m_AsyncOperation.allowSceneActivation:允许场景一旦加载后就立刻激活
    /// </summary>
    void Update()
    {
        if (m_SpinnerImage)
        {
            if (!m_SceneReadyToActivate)
                m_SpinnerImage.rectTransform.Rotate(Vector3.forward, 90.0f * Time.deltaTime);
            else
                m_SpinnerImage.enabled = false;
        }

        if (m_AsyncOperation != null)
        {
            if (m_AsyncOperation.progress < 0.9f)
                Debug.Log("Scene Loading Progress: " + m_AsyncOperation.progress * 100 + "%");
            else
            {
                m_SceneReadyToActivate = true;
                m_AsyncOperation.allowSceneActivation = true;
            }
        }
    }

    /// <summary>
    /// 异步加载下一个场景
    /// 获取当前场景在“building and setting”中“Scene in build”的索引值,令其+1得到下一个要加载的场景的索引值
    /// SceneManager.LoadSceneAsync:在后台异步加载场景
    /// m_AsyncOperation.allowSceneActivation:允许场景一旦加载后就立刻激活
    /// </summary>
    /// <returns></returns>
    IEnumerator LoadNextSceneAsync()
    {
        int nextSceneIndex = SceneManager.GetActiveScene().buildIndex + 1;

        if (string.IsNullOrEmpty(SceneToLoad))
            m_AsyncOperation = SceneManager.LoadSceneAsync(nextSceneIndex);
        else
            m_AsyncOperation = SceneManager.LoadSceneAsync(SceneToLoad);

        m_AsyncOperation.allowSceneActivation = false;

        yield return m_AsyncOperation;
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值