Unity异步加载场景

这篇具有很好参考价值的文章主要介绍了Unity异步加载场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当我们的场景资源过大时,为了能够不影响玩家体验,就会使用异步加载。

官方文档:AsyncOperation - Unity 脚本 API

AsyncOperation的API

allowSceneActivation 允许在场景准备就绪后立即激活场景。
isDone 操作是否已完成?(只读)
priority Priority 允许您调整执行异步操作调用的顺序。
progress 获取操作进度。(只读)

异步加载的好处:

  1. 提高游戏性能:异步加载场景可以减少游戏的内存占用和加载时间。当使用异步加载时,游戏可以在后台加载场景,同时保持流畅的游戏运行。这样可以减少游戏卡顿和加载时间,提高游戏的性能和用户体验。
  2. 优化资源管理:异步加载场景可以更好地管理游戏资源。通过异步加载,你可以在需要时加载场景中的特定资源,而不必一次性加载所有资源。这样可以减少内存占用,并提高游戏的资源利用率。
  3. 实现无缝切换:异步加载场景可以实现无缝切换。例如,在游戏中实现关卡切换时,可以使用异步加载场景来加载下一个关卡,同时保持当前关卡的运行状态。这样可以实现平滑的过渡,避免游戏中断或加载时间过长的情况。
  4. 提高开发效率:异步加载场景可以提高开发效率。通过将场景的加载过程分为多个步骤,可以更好地管理和调试游戏逻辑。同时,异步加载场景也使得开发人员可以更快地预览和测试游戏的不同场景,加快开发迭代的速度。

下面是实现,代码都会注释,这里是最最简单的异步加载,一般来说我们都会配合进度条来实现异步加载,以给玩家更好的游戏体验

默认情况下,AsyncOperation.allowSceneActivation的值为true,即加载完成后场景会自动激活。如果需要在加载完成后手动激活场景,可以将allowSceneActivation设置为false,并在适当的时机手动调用AsyncOperation.allowSceneActivation = true来激活场景。

应在协程函数中设置和使用 AsyncOperation.allowSceneActivation。不能在 Awake 中设置和使用 AsyncOperation.allowSceneActivation,因为此函数不是协程。

1.update实现

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

public class Loading : MonoBehaviour
{
    //AsyncOperation 是 Unity 引擎中的一个类,在异步操作过程中使用,例如加载资源和场景等
    //它可以查看异步的状态和进度
    private AsyncOperation operation;
    
    //调用--调用不一定要这样调用,很多不同地方都可以,这里是为了便于理解
    private void Start()
    {
        //开启协程
        StartCoroutine(AsyncLoad(2));
    }

    //异步加载需要用协程实现,其一unity不支持多线程,异步加载是指边运行当前场景
    //边加载下一个场景的资源,当资源加载完毕,再切换场景
    IEnumerator AsyncLoad(int scene)
    {
        //unity异步加载的API
        operation = SceneManager.LoadSceneAsync(scene);
        //不允许切场景
        operation.allowSceneActivation = false;
        yield return operation;
    }
    
    private void Update()
    {
        //不为空则开始检测进度
        if (operation != null)
        {
            Debug.Log("当前进度:"+(operation.progress/0.9f));
            //加载完毕
            //这里注意:如果你需要实现进度条,那么一定要知道
            //当进度到达90%时其实就不会再动了
            if (operation.progress >= 0.9f)
            {
                //可以允许自动切场景了
                operation.allowSceneActivation = true;
            }
        }
    }
}

官方文档中说明了当allowSceneActivation = false时,进度会停在0.9,且isDone也为false。

Unity异步加载场景,unity,游戏引擎

2.while实现

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

public class Loading : MonoBehaviour
{
    //AsyncOperation 是 Unity 引擎中的一个类,在异步操作过程中使用,例如加载资源和场景等
    //它可以查看异步的状态和进度
    private AsyncOperation operation;
    
    //调用--调用不一定要这样调用,很多不同地方都可以,这里是为了便于理解
    private void Start()
    {
        //开启协程
        StartCoroutine(AsyncLoad(2));
    }

    //异步加载需要用协程实现,其一unity不支持多线程,异步加载是指边运行当前场景
    //边加载下一个场景的资源,当资源加载完毕,再切换场景
    IEnumerator AsyncLoad(int scene)
    {
        //unity异步加载的API
        operation = SceneManager.LoadSceneAsync(scene);
        //将原本在update里的逻辑放到while中
        //未完成
        while(!operation.isDone)
        {
            float progress =operation.progress / 1.0f;
            Debug.Log("当前进度: " + progress);
            yield return null;
        }
    }
    
}

第二同样也可以手动激活,略微改下协程函数逻辑,不要使用isDone的API,因为要实现手动isDone必为false,所以它已经失效了。

无论是第一种还是第二种,都需要协程来实现,所以想到异步加载就应该想到协程

这里都是最简单的原理和使用,如果需要实现其他功能,只需要在框架上修改即可。

这里还介绍一个API,一般我们做异步加载为了防止进度溢出会使用

Mathf.Clamp01

官方链接:Mathf-Clamp01 - Unity 脚本 API文章来源地址https://www.toymoban.com/news/detail-786142.html

到了这里,关于Unity异步加载场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity中资源异步加载

            Unity作为一款优秀的游戏引擎,广泛应用于游戏制作领域。在游戏的开发过程中,资源加载的效率和流畅度尤为重要。对于较大的资源文件,同步加载方式可能会导致游戏卡顿、延迟等问题。因此,采用异步加载的方法可以提高游戏的效率和用户体验。 本篇博客将

    2024年02月06日
    浏览(40)
  • unity如何实现进度条效果(异步加载)

    unity如何实现进度条加载效果,按任意键结束 https://wwez.lanzoul.com/iOakN0tsvgje

    2024年02月03日
    浏览(39)
  • Unity 场景加载和资源加载

    一个游戏往往都是由很多场景组成的,例如会有主界面场景、战斗场景…等,不同的场景也是由若干的资源组合而成,在游戏的制作过程中,场景和资源的加载是不可或缺的。不管是场景还是资源都会涉及到加载的问题,在什么时候进行场景或资源的加载?场景的加载和资源

    2024年02月04日
    浏览(29)
  • Unity 3D开发--SceneManager场景管理(异步使用同一个过渡场景)

    在U3D开发过程中经常使用到多场景的切换,有同步SceneManager.LoadScene()和异步SceneManager.LoadSceneAsync()两种方法,同步的话一般就会卡住界面直到加载完成,使用异步的话一般都做一个加载的进度条,每次切换的时候都需要一个加载动画,所以需要建一个专门的过渡加载场景来进

    2024年02月14日
    浏览(32)
  • 【Unity】AssetBundle资源异步加载以及AB包卸载

    以下代码是基于上一篇文章《AssetBundle资源同步加载》的代码新增了异步加载和AB包卸载功能,有兴趣的同学可以去看看我的上一篇文章。 由于异步加载需要配合协程进行功能开发,所以我对之前封装的AB包资源加载管理器进行修改,改为继承MonoBehaviour的单例模式。 主要修改

    2023年04月08日
    浏览(29)
  • Unity 多场景/大场景加载解决方法

    记录一下最近学习的新的知识,关于解决多场景加载的问题,方便下次及时的巩固复习。 此次使用的是 Unity的异步加载 来实现功能。 将一个大场景的地图分成好几个场景,利用玩家的距离来判断加载哪个场景和卸载哪个场景。 利用玩家的自身距离和预加载场景的距离判断

    2024年02月04日
    浏览(37)
  • Unity场景进度条加载

    首先,创建Canvas,在Canvas中创建一个Button和一个Panel Button:点击之后进入场景加载 Panel:场景加载面板  其次,在panel当中,我们在创建slider和Text Text:用来描述进度条的百分比,所以text可有可无,看自己意愿   slider :就是我们的进度条了 Panel建好后,将SetActive设置为false,

    2023年04月09日
    浏览(38)
  • 【Unity细节】为什么加载精灵图集直接导致Unity引擎崩溃

    👨‍💻个人主页 :@元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏 :unity细节和bug 😶‍🌫️优质专栏 ⭐【软件设计师高频考点暴击】 点击运行,Unity直接崩溃退出 在加载打包后的图集时,可能图集里面没有相应的资源,

    2024年02月05日
    浏览(47)
  • unity加载场景后光照变暗

    关于unity加载场景后光照变暗的问题 最近在做场景的加载功能时,发现加载新的场景后整个场景的光照都变暗,但是如果是直接运行当前场景的话就不会,后来才发现原来是选择的光照是realtime实时光照,在一开始的场景时,它的灯光是已经渲染好了,但重新加载的时候灯光

    2024年02月15日
    浏览(36)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包