首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    Unity AssetBundle

    #AssetBundle作用原理 把资源导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载回来用。 AssetBundle文件分类 AssetBundle文件可以分为两类:序列化文件(serialized file)和资源文件(resource files)。 和AssetBundle.LoadFromMemoryAsync //内存加载 AssetBundle.LoadFromFile和AssetBundle.LoadFromFileAsync //本地文件加载 obj = AssetBundle.LoadAsset<T>(assetName); //Object[] objArray = AssetBundle.LoadAllAssets() obj = AssetBundle.LoadAsset<T>(assetName); //Object[] objArray = AssetBundle.LoadAllAssets()

    1.6K30编辑于 2022-09-12
  • 来自专栏游戏开发那些事

    【Unity游戏开发】AssetBundle杂记--AssetBundle的二三事

    二、收集整理的一些AssetBundle资料 1.Unity AssetBundle5讲系列 Unity5-ABSystem(一):AssetBundle原理 Unity5-ABSystem(二):AssetBundle 导出 Unity5-ABSystem(三):AssetBundle加载 Unity5-ABSystem(四):AssetBundle依赖 Unity5-ABSystem(五):AssetBundle内存 资源打包控制 Unity AssetBundle加载音频,无法播放音效并报错的坑 三、AssetBundle踩坑与经验集锦   1、先说一个遇到的坑,当大量(几百个)AssetBundle加载的时候( ,如果你没有这样的需求,那么建议你不要使用这个坏东西,闹心~~ 当你选择了AssetBundle之后,以及我开始喷AssetBundle之前,我们需要对AssetBundle的工作流程做一个简单的介绍: AssetBundle可以分为打包AssetBundle以及使用AssetBundle 打包需要在UnityEditor下编写一些简单的代码,来取出你要打包的资源,然后调用打包方法进行打包 1 Object

    3.9K31发布于 2018-09-12
  • 来自专栏全栈程序员必看

    AssetBundle相关

    ====>AssetBundle打包:设置好AssetBundle包名后,利用BuildPipeline.BuildAssetBundles (“Path”);进行打包。 法①:AssetBundle.LoadFromFile(“abPath + pathName”)及其 法②:异步方法AssetBundle.LoadFromFileAsync ====>加载AssetBundle包中的资源 法①: Object AssetBundle.LoadAsset(string assetName); 法②: AssetBundleRequest AssetBundle.LoadAssetAsync(string assetName); 返回值是AssetBundleRequest类型 abr ,abr.assetBundle =========================AssetBundle查看工具(内含可查看包大小、名字、引用资源、包含资源等+打包功能等):AssetBundle Browser tool 发布者

    50720编辑于 2022-09-07
  • 来自专栏全栈程序员必看

    AssetBundle详解

    使用AssetBundle动态加载资源首先要获取AssetBundle对象,第二步才是从AssetBundle中加载目标资源。 要在运行时加载AssetBundle对象主要可以分为两大类途径: 先获取WWW对象,再通过WWW.assetBundle获取AssetBundle对象 直接获取AssetBundle 下面我们就具体分析一下这两种途径 在下载完 AssetBundle 后,你同样可以使用 DownloadHandlerAssetBundle 类的 assetBundle 属性来加载 AssetBundle,这就和使用 AssetBundle.LoadFromFile 从 AssetBundle 中加载 manifest 完全和从中加载其他资源一样,如下: AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath 比如我们想要加载一个名叫“assetBundle”的 AssetBundle 的所有依赖: AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath

    2.7K10编辑于 2022-09-13
  • 来自专栏用户10004205的专栏

    AssetBundle加密

    新版本里针对AssetBundle格式简单并且容易破解的问题,推出了加密功能,目前加密需要AssetBundle为LZ4压缩格式,其它格式的加密后续推出。这里说一下常用的压缩方式及对应的压缩算法。 EditorUserBuildSettings.activeBuildTarget); 通过指定密钥为null来清除秘钥:BuildPipeline.SetAssetBundleEncryptKey(null); 2.加载AssetBundle 时,先指定本次加载所使用的解密秘钥:AssetBundle.SetAssetBundleDecryptKey(rightUserKey);然后加载AssetBundle,常用的加载方式: 1).AssetBundle.LoadFromFile 2).AssetBundle.LoadFromMemory 3).WWW.LoadFromCacheOrDownload 不过现在新版本里www类已经过时。

    1.6K30编辑于 2022-08-29
  • 来自专栏全栈程序员必看

    AssetBundle 详解

    文章目录 AssetBundle 的定义和作用 什么是 AssetBundle 用处 AssetBundle 使用流程图 指定资源的 AssetBundle 属性 构建 AssetBundle AssetBundle.LoadFromFile UnityWebRequest 从 AB 加载资源 加载 AssetBundle 清单 AssetBundle 的卸载 AssetBundle.Unload // 卸载 AssetBundle AssetBundle.Unload(bool); AssetBundle.Unload(true) 卸载所有资源,即使有资源被使用着 卸载从 AssetBundle 修补 AssetBundle 修补 AssetBundle 很简单,只需要下载新的 AssetBundle 并替换现有的 AssetBundle。 应重新下载缺少的 AssetBundle 或已更改版本控制信息的 AssetBundle。 也可以编写一个自定义系统来检测 AssetBundle 的更改。

    3.2K50编辑于 2022-09-07
  • 来自专栏星河造梦坊专栏

    Unity网络交互☀️AssetBundle三、:AssetBundle的内存优化

    卸载AssetBundleAssetBundle.Unload 详细介绍见:地址 卸载从AssetBundle加载的Assets: 对于懂AssetBundle加载的Assets,比如纹理、材质 、音频片段和动画片段有以下两种方式卸载 a、AssetBundle.Unload(true) b、Resources.UnloadUnusedAssets() 该接口会卸载掉所有没有使用的Assets, 需要注意的是: 1)、它的作用范围不仅仅是当前的AssetBundle,而是整个系统 2)、它不能卸载从当前AssetBundle文件中加载的仍在使用的Assets 卸载实例化出的GameObject 属性所加载的AssetBundle对象会被Web Stream数据持有引用, AssetBundle也会引用到从他所加载的所有Assets, WWW和AssetBundle对象只是一个结构指向了Web 如下图所示,即当AssetBundle对象(WWW.assetbundle)和WWW对象释放后,Web Stream数据所占的内存也会被系统自动回收 大家还有什么问题,欢迎在下方留言!

    28410编辑于 2024-08-15
  • 来自专栏sofu456

    unity assetbundle打包

    fbx元素提取 [MenuItem("Avatar/Generate AllData",false,0)] private static void GenerateAllData() { UnityEngine.Object[] res = Selection.GetFiltered<UnityEngine.Object>(SelectionMode.DeepAssets); UnityEngine.Object obj = res.Where(o=>o is DefaultAsset).F

    56020发布于 2020-03-19
  • 来自专栏游戏开发之旅

    AssetBundle使用模式

    应用进入到一个加载场景,完全卸载那个包含老场景的AssetBundle,然后加载包含新的场景的AssetBundle。 这种流程太简单了,而一些项目需要更为复杂的AssetBundle管理。 这两个接口都有个重载,接受一个AssetBundle版本号作为参数。这个数字没有存在AssetBundle中,也不会由AssetBundle系统生成。 用AssetBundle打补丁 给AssetBundle打补丁就是简单的下载一个新的AssetBundle然后替换掉原来那个。 这份依赖项信息用来决定哪些Objects被包含到AssetBundle中。 明确分配到AssetBundle的Objects只会被打包到这个指定的AssetBundleAssetBundle Variants Unity5的AssetBundle系统中一个关键特性就是AssetBundle Variants。

    2.8K20发布于 2019-12-03
  • 来自专栏星河造梦坊专栏

    Unity网络交互☀️AssetBundle二、:如何下载、加载与卸载AssetBundle

    下载AssetBundle Unity提供了两种方式从服务器下载AssetBundle文件: 1、非缓存机制 2、缓存机制 1️⃣ 非缓存机制 通过创建一个WWW实例来对AssetBundle文件进行下载 当把AssetBundle文件从服务器下载到本地后,需要将其加载到内存中并创建AssetBundle文件内存对象。 以下是两种加载AssetBundle文件的方式(Unity原提供4个) 1️⃣ WWW.assetbundle 通过WWW.assetbundle属性创建一个AssetBundle文件的内存对象。 myLoadedAssetBundle = www.assetBundle; } 2️⃣ AssetBundle.CreateFromFile AssetBundle.CreateFromFile AssetBundle名称相同,但不同的是,AssetBundle Variant的AssetBundle之间将有共同的内部id,所以它们可以之间可以任意切换。

    97010编辑于 2024-08-15
  • 来自专栏Unity游戏开发

    Unity-资源打包-AssetBundle

    assetBundle = AssetBundle.LoadFromFile(path + "/StreamingAssets"); //从StreamingAssets文件中获得 ab1 = AssetBundle.LoadFromFile(path + "/" + dps[i]); } AssetBundle ab = AssetBundle.LoadFromFile = AssetBundle.LoadFromFileAsync(path + "/prefab"); yield return assetBundle; action( (File.ReadAllBytes(path)); yield return createRequest; AssetBundle bundle = createRequest.assetBundle ,通过 Resources.UnloadUnusedAssets. 2,场景切换的时候 AssetBundle卸载

    3K21发布于 2019-05-29
  • 来自专栏星河造梦坊专栏

    Unity网络交互☀️AssetBundle四、:最新版如何下载、加载与卸载AssetBundle

    只有在运行的时候本应用可读取 IEnumerator StartLoadBundle_IE() { yield return null; //加载AssetBundle AssetBundle assetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "StreamingAssets = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "cutscenes.1")); // AssetBundle assetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "StreamingAssets = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "cutscenes.1")); //

    52210编辑于 2024-08-15
  • 来自专栏宜达数字

    AssetBundle打包工具实现

    什么是AssetBundle,点击查看 先看一下工具的使用 商用为目的的打包工具 同步读取AssetBundle 创建单例 using System.Collections; using System.Collections.Generic LocalFileMgr.Instance().GetBuffer(@"F:\项目\Unity\YD_Destop_ImmersionClick\Assetbundles\Windows\Role\item.assetbundle "); AssetBundle bundle = AssetBundle.LoadFromMemory(buffer); GameObject go = bundle.LoadAsset MonoBehaviour { void Start () { GameObject obj = AssetBundleMgr.Instance().Load(@"Role\item.assetbundle // 异步加载 AssetBundleLoaderAsync async = AssetBundleMgr.Instance.LoadAsyncObj(@"Role\item.assetbundle

    96710发布于 2020-06-02
  • 来自专栏游戏开发之旅

    Unity AssetBundle的几个加载方式

    (File.ReadAllBytes(path));   yield return request;   AssetBundle ab = request.assetBundle;   GameObject ab = AssetBundle.LoadFromFile("AssetBundles/scene/wall.ab");   GameObject wallPrefab = ab.LoadAsset< (path);   yield return request;   AssetBundle ab = request.assetBundle;   Instantiate(ab.LoadAsset<GameObject 类对象   AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request); //4、用获取到的AssetBundle对象去加载资源泛型是 <GameObject>("Wall");   Instantiate(obj); } 读取Manifest文件,获取它们的依赖关系并且加载出来 AssetBundle manifestAB = AssetBundle.LoadFromFile

    3.6K10发布于 2019-12-02
  • 来自专栏DevOps持续交付

    Unity AssetBundle打包及分包策略

    一、Unity AssetBundle概述 Unity AssetBundle是一种用于加载和管理游戏资源的工具。它将游戏资源打包成二进制文件,以便在游戏运行时动态加载和释放。 例如,所有声音资源可以打包成一个AssetBundle,所有Shader可以打包成一个AssetBundle,所有模型可以打包成一个AssetBundle,所有材质可以打包成一个AssetBundle。 例如,把在某一个时间内使用的所有资源打包成一个AssetBundle,或者按照关卡分,一个关卡需要的所有资源(包括角色、贴图、声音等)打包成一个AssetBundle。 二、实例化AssetBundle加载 在Unity中,可以通过实例化AssetBundle来加载和管理资源。开发者可以根据需要在运行时动态加载和卸载AssetBundle,以实现资源的动态管理和优化。 三、AssetBundle的优化策略 在使用AssetBundle时,开发者还需要关注一些优化策略。首先,要尽可能地减少AssetBundle的数量和大小,以降低游戏体积和加载时间。

    1.8K10编辑于 2023-12-13
  • 来自专栏宜达数字

    Unity3D高级-AssetBundle使用

    1、什么是AssetBundle? 资源需要打包发布,所以Unity提供的打包策略,也就是AssetBundle。这个的方式有自己的压缩格式(LZMA\压缩),其实就是精简你的资源。 ---- 可以通过官方的Demo来进行学习:Unity5 AssetBundle Demo ---- 2、AssetBundle的作用 ? 如果指定mainAsset那么加载后可以通过下面来获取 AssetBundle.mainAsset 如果不指定那么可以通过 AssetBundle.LoadAsset 指定名字读取出来 ---- 官方Demo (PathURL + "Prefab1.assetbundle")); } if(GUILayout.Button("ALL Assetbundle" ()未获取assetBundle资源包,接着就是LoadAsset<>()加载,实例化。

    2.5K20发布于 2020-06-02
  • 来自专栏游戏开发之旅

    Unity打包以及加载AssetBundle思路

    的信息,读取完之后就没用了,我们把它卸载掉,节省内存空间 AssetBundle abManifestBundle = AssetBundle.LoadFromFile(GetFullLoadAbPath 但是这样存在一个问题,就是一个AB包里可能有很多资源,我们加载这些资源的时候,可能会出现重复加载同一个AssetBundle包的情况,这很费时间,所以我们要把加载过的AssetBundle存在内存中,每次加载 = null && cacheMap[deps[i]].request.assetBundle == null)) { AssetBundle 我们每次加载资源时,都先要加载其所在的AssetBundle包,并且要记下加载资源AB包被引用的次数,这样方便我们在卸载AssetBundle时,检测当前这个要卸载的AssetBUndle包还有没有资源引用它 ,如果没有资源引用,我们才启用UnLoad卸载该AssetBundle

    1.8K10发布于 2019-12-02
  • 来自专栏星河造梦坊专栏

    Unity网络交互☀️AssetBundle一、:用途、创建、解读、接口

    具体使用流程: 1、利用脚本创建AssetBundle文件 2、上传到服务器 3、下载到本地 4、加载 创建AssetBundle资源 1️⃣ AssetBundle可打包的资源 a、任意Unity引擎可识别的资源 第二个选项用于设置AssetBundle Variant,用在不同版本资源的使用和动态替换AssetBundle。 注意:AssetBundle标记的名称要小写,可以有后缀,如a.unity3d b、当有很多AssetBundle标记的对象,想要看包含含有某个字符串的AssetBundle(可能有多个)中的资源时,可 ,如果内容为空,则说明AssetBundle没有依赖AssetBundle。 (string) 获取给定AssetBundle的Hash GetDirectDependencies(string) 获取给定AssetBundle直接依赖的AssetBundles AssetBundle

    1.2K10编辑于 2024-08-15
  • 来自专栏Unity3d程序开发

    unity+AssetBundle字节数组加密

    1.加密:对assetbundle的字节数组每位进行与key的异或处理(相同为0,不同为1) using System; using System.Collections.Generic; using = Directory.GetCurrentDirectory(); foreach (var f in new DirectoryInfo(dir).GetFiles("*.assetbundle targetData[i] = (byte)(targetData[i] ^ key); } } } } 把生成的exe放到assetbundle 目录下运行,批量加密assetbundle 2.解密:再次进行一次异或处理,返回原正确的字节数组 stream = File.ReadAllBytes(uri); Encypt(ref stream); bundle = AssetBundle.LoadFromMemory(stream);

    52130编辑于 2023-08-24
  • 来自专栏游戏开发那些事

    【Unity游戏开发】SpriteAtlas与AssetBundle最佳食用方案

    因此进行SpriteAtlas和AssetBundle的正确配合使用调研实在必行。 需要注意的,UGUI的图集,无论新旧,在构建AssetBundle的时候,同一个图集内的所有图元都要放在同一个AssetBundle中,否则,如果同一个图集的图元被分散到多个AssetBundle中,那么每一个 AssetBundle都会包含一份这个图集的Copy,最终的结果就是包体冗余、内存膨胀和加载耗时等问题。    这三个图集分别管理这Sprites目录下的每个子目录中的散图文件,这些散图文件时需要参与打包的(AssetBundle)。 ?    简单来说,就是运行时写的那些业务逻辑不需要关心我这个图元属于哪一张图集,属于哪一个AssetBundle,直接以散图的形式去使用、去获取就可以了。

    9.9K73发布于 2020-12-29
领券