Unity热更新——AB包的基本操作

简介: Unity热更新——AB包的基本操作

第一步加载AB包

AssetBundle.LoadFromFile 从本地加载

以编辑器为使用案例,AB包的资源拷贝到了 streamingAssetsPath 的目录下,加载AB包资源操作如下。如果是其他平台的,则只需要保证AB包资源的正式路径正确即可

string path = Application.streamingAssetsPath + "/" + "common/main.ab";
AssetBundle ab = AssetBundle.LoadFromFile(path);
AssetBundle.LoadFromFileAsync 异步加载
    void Start()
    {
        StartCoroutine(LoadABPackRes());
    }
 
    IEnumerator LoadABPackRes()
    {

以编辑器为使用案例,AB包的资源拷贝到了streamingAssetsPath 的目录下,加载AB包资源操作如下。如果是其他平台的,则只需要保证AB包资源的正式路径正确即可。

string path = Application.streamingAssetsPath + "/" + "common/main.ab";
        AssetBundleCreateRequest abPack = AssetBundle.LoadFromFileAsync(path);
        yield return abPack;
        // TODD 操作使用已加载的AB包资源 abPack
    }

第二步加载AB包中的资源

只是用名字加载会出现同名不同类型资源分不清,所以建议大家用泛型加载或者是Type指定类型

Gameobject obj = ab.LoadAsset<Gameobject>("cube" );
Gameobject obj = ab.LoadAsset( "cube", typeof(Gameobject)) as Gameobject;
Instantiate(obj);

AB包不能够重复加载否则报错

AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + " /"” +"model");

加载—个圆

Gameobject obj2 = ab.LoadAsset("sphere" , typeof(Gameobject)) as Gameobject;Instantiate(obj2);

异步加载—>协程

StartCoroutine( LoadABRes ( "head", "23_11100001"));

第一步加载AB包

AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + " /"+ ABName);
yield return abcr;

第二步加载资源

AssetBundleRequest abq = abcr.assetBundle.LoadAssetAsync(resName,typeof(Sprite));
yield return abq;
//abq.asset as sprite;
img.sprite = abq.asset as sprite;

第三步 卸载AB包中的资源

AssetBundle.Unload 卸载当前包资源

以编辑器为使用案例,AB包的资源拷贝到了 streamingAssetsPath 的目录下,加载AB包资源操作如下

如果是其他平台的,则只需要保证AB包资源的正式路径正确即可

string path = Application.streamingAssetsPath + "/" + "common/main.ab";
AssetBundle abPack = AssetBundle.LoadFromFile(path);
    

卸载当前已经已加载abPack的AB包, 参数true表示卸载AB包时,同时卸载掉所有的资源引用, false则只卸载AB包,不卸载掉当前已经使用的资源

abPack .Unload(true);
AssetBundle.UnloadAllAssetBundles 卸载所有AB包资源

卸载所有已加载的AB包, 参数true表示卸载AB包时,同时卸载掉所有的资源引用, false则只卸载AB包,不卸载掉当前已经使用的资源

AssetBundle.UnloadAllAssetBundles(true);
目录
相关文章
|
9天前
|
存储 图形学 开发者
Unity加载AB包
在 Unity 中加载 AssetBundle(AB 包)涉及文件定位、反序列化和内存管理。本地路径可通过 `Application.dataPath` 或 `Application.persistentDataPath` 获取,结合文件名定位 AB 包。远程 URL 则通过网络请求下载。代码示例展示了从本地和远程加载 AB 包的方法,使用 `UnityWebRequest` 和 `WWW` 类进行资源加载和实例化。
|
9天前
|
存储 算法 API
Unity打包AB包
在 Unity 中,AssetBundle(AB 包)用于存储和管理游戏资源,支持动态加载。开发者需为资源标记 AssetBundle 名称,Unity 会自动处理依赖关系并进行序列化。资源被打包成二进制格式,并可选择压缩算法(如 LZMA 或 LZ4)。通过 BuildPipeline API 可控制打包过程,包括设置目标平台(如 WebGL、PC)。示例代码展示了如何使用 BuildPipeline.BuildAssetBundles 方法打包 AB 包并输出到 StreamingAssets 文件夹中。
|
算法 安全 C#
Unity——热更新浅析
Unity——热更新浅析
138 0
|
存储 图形学 Android开发
Unity——资产包(Asset Bundles)
Unity——资产包(Asset Bundles)
330 0
|
编译器 图形学 Windows
【unity细节】中文乱码和老包升级的情况
【unity细节】中文乱码和老包升级的情况
201 0
|
图形学
Unity热更新——lua语言
Unity热更新——lua语言
144 0
|
图形学 Windows
Unity热更新——AB包
Unity热更新——AB包
392 0
|
6月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
328 6
|
6月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
538 5
|
5月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
272 4