推荐阅读

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

【Unity3D框架】SKFramework框架完全教程《全网最全》-专栏文章目录:
https://blog.csdn.net/q764424567/article/details/143926557

二、正文

2-1、介绍

AssetBundleUnity提供的一种资源存储压缩包,包含了一些Unity的资源,如图片,模型,纹理,音视频等等,也可以包含用户自定义的二进制文件。提供了一种程序运行时动态加载资源包的方法,如游戏中不同版本的资源更新即通过更新资源AB包即可。

Unity官方文档描述AssetBundle为一个容器,就像文件夹一样,包含其他文件。这些其他文件有两种类型,一种是序列化文件,包含资产分解成单独的对象并写到该单个文件中。另一种是资源文件,是为某些资产(纹理和音频)单独存储的二进制数据块,以允许Unity从另一个线程上的磁盘有效加载它们。

总而言之,AssetBundle就是一种资源包,让你能在运行时动态的加载卸载它,也可以灵活更新,即可以无需放在游戏本地,大大降低了包体大小。

SKFramework框架的资源加载模块,将AssetBundle加载的代码进行了封装调用。

接下来,看一下如何使用。

2-2、使用说明

Mode:资源加载模式

  • Editor:编辑器模式
  • SIMULATIVE:模拟模式(StreamingAssets)
  • REALITY:真实环境

AssetBundleUrl:AssetBundle资源包所在路径

AssetBundleManifestName:manifest文件名称

加载资产:

void LoadAssetAsync<T>(string assetPath, Action<float> onLoading, Action<bool, T> onCompleted)
void LoadAssetAsync<T>(MonoBehaviour executer, string assetPath, Action<float> onLoading, Action<bool, T> onCompleted)

参数:
executer:开启加载协程的Monobehaviour
assetPath:资产路径
onLoading:加载中回调
onCompleted:加载完成回调

返回值:
Coroutine加载协程

卸载资产:

void UnloadAsset(AssetInfo assetInfo, bool unloadAllLoadedObjects)

参数:
assetInfo:资产信息
unloadAllLoadedObjects:是否卸载其所有实例,默认为false

卸载所有资产:

UnloadAllAsset(bool unloadAllLoadedObjects)

加载场景:

void LoadSceneAsync(string sceneAssetPath, Action<float> onLoading, Action onCompleted)
void LoadSceneAsync(MonoBehaviour executer, string sceneAssetPath, Action<float> onLoading, Action onCompleted)

参数:
executer:开启加载协程的Monobehaviour
sceneAssetPath:场景资源路径
onLoading:加载中回调
onCompleted:加载完成回调

返回值:
Coroutine加载协程

卸载场景:

bool UnloadScene(SceneInfo sceneInfo)

参数:
sceneInfo:场景信息

返回值:
true:卸载成功
false:未加载该场景,卸载失败

调用示例:

using SK.Framework;
using SK.Framework.Resource;
using UnityEngine;

public class UseResource : MonoBehaviour
{
    void Start()
    {
        //异步加载资产
        SKFramework.Module<Resource>().LoadAssetAsync<AudioClip>("Assets/click01.mp3", onCompleted: (success, clip) =>
        {
            if (success)
            {
                AudioSource source = gameObject.AddComponent<AudioSource>();
                source.clip = clip;
                source.Play();
            }
        });
        //异步加载场景
        SKFramework.Module<Resource>().LoadSceneAsync("Assets/Scenes/Example.unity");
    }
}

2-3、实现及代码分析

异步加载资源,核心代码使用了UnityWebRequest进行ab包加载:
在这里插入图片描述
加载完成后回调,使用资源:

在这里插入图片描述

三、后记

如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。


你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:

专栏 方向 简介
GameFramework框架 框架 Unity之GameFramework框架快速应用、使用说明、源码分析等文章合集。
Unity3D开发小游戏 小游戏开发教程 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶 入门 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUI UGUI Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据 文件读取 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合 数据集合 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发 虚拟仿真 总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件 插件 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发 日常记录 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG 日常记录 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐