Unity SKFramework框架(八)、SceneLoader 场景加载器

举报
CoderZ1010 发表于 2022/09/25 06:39:14 2022/09/25
【摘要】 目录 简介 一、通过名称加载场景 二、通过指针加载场景 三、事件 四、示例 简介 加载场景的重载函数如下: /// <summary>/// 异步加载场景/// </summary>/// <param name="sceneName">场景名称</param>/...

目录

简介

一、通过名称加载场景

二、通过指针加载场景

三、事件

四、示例


简介

加载场景的重载函数如下:


      /// <summary>
      /// 异步加载场景
      /// </summary>
      /// <param name="sceneName">场景名称</param>
      /// <param name="sceneActivationDelay">激活延迟时长</param>
      /// <param name="loadSceneMode">场景加载方式</param>
      /// <returns></returns>
      public static SceneLoader LoadAsync(string sceneName, float sceneActivationDelay = 3f, LoadSceneMode loadSceneMode = LoadSceneMode.Single)
      /// <summary>
      /// 异步加载场景
      /// </summary>
      /// <param name="sceneBuildIndex">场景指针</param>
      /// <param name="sceneActivationDelay">激活延迟时长</param>
      /// <param name="loadSceneMode">场景加载方式</param>
      /// <returns></returns>
      public static SceneLoader LoadAsync(int sceneBuildIndex, float sceneActivationDelay = 3f, LoadSceneMode loadSceneMode = LoadSceneMode.Single)
  
 

其中sceneActivationDelay参数表示当场景在内存中加载完成时,需要延迟该时长才允许场景激活,原理是首先将异步操作AsyncOperation中的allowSceneActivation设为false,在场景加载完成并延迟后再将其设为true,该参数默认值为3

loadSceneMode表示加载场景的方式,默认值为Single,表示覆盖当前场景,Additive则表示场景叠加到当前场景。

一、通过名称加载场景


      using UnityEngine;
      using SK.Framework;
      public class Example : MonoBehaviour
      {
         private void Start()
          {
             //加载名为Example的场景
              SceneLoader.LoadAsync("Example", 5f);
          }
      }
  
 


      using UnityEngine;
      using SK.Framework;
      using UnityEngine.SceneManagement;
      public class Example : MonoBehaviour
      {
         private void Start()
          {
             //加载名为Example的场景
              SceneLoader.LoadAsync("Example", 0f, LoadSceneMode.Additive);
          }
      }
  
 

二、通过指针加载场景


      using UnityEngine;
      using SK.Framework;
      public class Example : MonoBehaviour
      {
         private void Start()
          {
             //加载BuildIndex为1的场景
              SceneLoader.LoadAsync(1);
          }
      }
  
 

三、事件

场景加载事件包含开始事件加载中事件完成事件,通过如下方式设置:


      using UnityEngine;
      using SK.Framework;
      public class Example : MonoBehaviour
      {
         private void Start()
          {
             //加载名为Example的场景
              SceneLoader.LoadAsync("Example", 5f)
                  .OnBegan(() => Debug.Log("开始加载"))
                  .OnLoading(progress => Debug.Log(string.Format("加载进度 {0}", progress)))
                  .OnCompleted(() => Debug.Log("加载完成"));
          }
      }
  
 

四、示例


      using UnityEngine;
      using SK.Framework;
      using UnityEngine.UI;
      using UnityEngine.SceneManagement;
      public class Example : MonoBehaviour
      {
         //场景加载过渡界面
          [SerializeField] GameObject loadingView;
         //加载进度条
          [SerializeField] Image progress;
         //加载进度文本
          [SerializeField] Text progressText;
         private void Start()
          {
             //加载名为Example的场景
              SceneLoader.LoadAsync("Example", 5f, LoadSceneMode.Additive)
                  .OnBegan(() => loadingView.SetActive(true))
                  .OnLoading(s =>
                  {
                      progress.fillAmount = s;
                      progressText.text = string.Format("{0}%", Mathf.Round(s * 100));
                  })
                  .OnCompleted(() => loadingView.SetActive(false));
          }
      }
  
 

效果: 

文章来源: coderz.blog.csdn.net,作者:CoderZ1010,版权归原作者所有,如需转载,请联系作者。

原文链接:coderz.blog.csdn.net/article/details/124877549

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。