unity--AssetBundle

为啥C#脚本不能会直接更新?

因为计算机中的CPU只认识二进制码,所以CPU执行的都是一串串的二进制码。对于C#而言,它的编译和执行过程如下:

1.C#通过编译器(CSC)生成程序集(dll/exe),程序集内部是由微软中间语言(MSIL)组成。在这个过程中,CSC会检查错误,看是否符合C#的语言规范。

2.当运行程序集的时候,公共语言运行时(CLR)中的JIT会将程序集中的中间语言(MSIL)转换成本地平台的CPU指令,然后将指令传给CPU执行。

3.CPU运行该指令,程序开始运行。

 

c#运行时需要编译,经过编译后转化为CIL程序集(通用中间语言(Common Intermediate Language,简称CIL),再通过JIT(即时编译(JIT)是指字节码在CPU执行时被立即转换成机器码)转换为平台可识别的机器码。编译过程移动平台时是无法完成的。

热更新实现方式:

1.使用lua脚本,通过脚本调用C#方法。lua跨平台,无序编译。

2.使用C#Light

3.使用C#反射技术


1.AssetBundle(简称AB包)是一个资源压缩包,包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;
2.AssetBundle自身保存着互相的依赖关系;
3.压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
4.把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;

它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file 和 resource files。(序列化文件和源文件)

  • serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)

  • resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载,可以Editor上读取,方便查看它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用。

https://blog.csdn.net/qq_35361471/article/details/82854560

https://www.jianshu.com/p/5226659533cd

 

编辑器扩展代码需要放在Assets/Editor 目录下

[MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if(!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, 
            BuildAssetBundleOptions.None, 
            BuildTarget.StandaloneWindows);
    }
void Start()
    {
        AssetBundle bundle = AssetBundle.LoadFromFile("Assets/AssetBundles/a/b");
        GameObject obj = bundle.LoadAsset<GameObject>("Cube");
        Instantiate(obj);
        // Object[] assets = bundle.LoadAllAssets();
        // foreach (var obj in assets)
        // {
        //     Debug.Log(obj.name);
        //     Instantiate(obj);
        // }
    }

AssetBundle分组策略:

  1. 经常更新的包放在一个包里,不经常的包分离。
  2. 需要同时加载的资源放在一个包里面,相互依赖的会打包在一起,重复问题。
  3. 共享资源放在一起
  4. 同一资源多个版本,后缀区分。
BuildAssetBundleOptions
  • None:使用LZMA算法压缩,压缩包下,但是加载时间长,需要整体解压。一旦解压,可以用LZ4二次压缩到本地,不会整体解压。下载时使用LZMA,下载后在使用LZ4保存到本地。
  • UnCompressedAssetBundle:不压缩。
  • ChunkBasedCompression:使用LZ4压缩,加载指定资源,不整体解压。

AssetBundles.manifest------对应设置的信息

被压缩物体的路径以及依赖物体的路径。

void Start()
    {
        //需要把依赖的包也进行加载,否则丢失依赖数据
        AssetBundle bundle1 = AssetBundle.LoadFromFile("Assets/AssetBundles/test/res");
        AssetBundle bundle = AssetBundle.LoadFromFile("Assets/AssetBundles/profabs/cube2");
        GameObject obj = bundle.LoadAsset<GameObject>("Cube2");
        Instantiate(obj);
       
    }

load的方式

  • AssetBundle.LoadFromMemoryAsync
  • AssetBundle.LoadFromFile
  • AssetBundle.LoadFromStream
  • WWW.LoadFromCacheOrDownLoad(舍弃)
  • UnityWebRequest

卸载资源:

  • AssetBundle.UnloadAllAssetBundles() true:卸载所有,false卸载未使用的包
    
  • Resource.UnloadAsset /UnloadUnusedAssets 

文件校验 CRC  MD5  SHA1

 

问题:

图集重复。不指定packing tag 默认打包在一起。

 

搜索工具:Asset Bundle Browser

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity AssetBundle Browser是Unity引擎的一款插件,它可以帮助游戏开发者在编辑器内浏览和管理AssetBundle资源。AssetBundle资源是游戏制作过程必需的一种资源,它可以将一些预制件、贴图、声音和代码等打包成二进制文件,并在运行时通过代码加载到游戏,从而实现动态加载资源和减少加载时间的效果。 Unity AssetBundle Browser插件提供了一个可视化的资源管理界面,用户可以通过它对资源进行打包、解包、浏览、删除等操作。在使用AssetBundle资源时,由于资源文件的二进制格式与编辑器内资源格式不同,开发者需要将资源文件打包成AssetBundle进行加载。Unity AssetBundle Browser将这个过程简化了,用户只需选择需要打包的资源,设置相关参数,并点击打包按钮,就可以轻松地创建AssetBundle文件,并将其加载到游戏。 此外,Unity AssetBundle Browser还支持实时预览AssetBundle资源,开发者可以通过它快速地浏览预制件、纹理、材质球等资源,从而提高开发效率。总的来说,Unity AssetBundle Browser是一款十分实用的插件,它为开发者提供了一种便捷的方式去管理和使用AssetBundle资源,使游戏制作变得更加高效和便捷。 ### 回答2: Unity AssetBundle Browser是一个Unity扩展工具,用于在IDE浏览和管理AssetBundle。AssetBundle是一种Unity资源包,可以使开发者轻松创建和管理资源,如纹理、声音和模型等。 Unity AssetBundle Browser可以让开发者直观地查看AssetBundle文件的内容,包括资源列表、依赖关系和预览功能。此外,它还提供了打包、解包、压缩和解压缩AssetBundle文件的功能,使开发者可以更灵活地使用AssetBundle,以满足项目需求。 使用Unity AssetBundle Browser,开发者可以快速地浏览和编辑AssetBundle,节省了大量的时间和精力。它还可以帮助开发者更好地理解AssetBundle的工作原理,为开发者深入学习Unity提供了一个重要的工具。 总之,Unity AssetBundle Browser是一个非常有用的工具,可以帮助Unity开发者更高效地管理和使用AssetBundle,提高项目开发效率和质量。 ### 回答3: Unity AssetBundle Browser是Unity游戏引擎的一个工具,可以用于浏览和导出AssetBundle资源包。AssetBundle是一种Unity的资源打包方式,可以将游戏的资源打包成一个文件,方便后续的版本管理和部署。 使用AssetBundle Browser可以很方便地管理和处理AssetBundle资源包,包括在游戏动态加载和卸载资源,减小游戏的内存占用和优化游戏性能。通过AssetBundle Browser,我们可以查看和编辑资源包的资源,例如模型、贴图、音频等,并提供了一套完整的编辑工具,支持资源导入、复制、删改等操作。 在游戏开发,AssetBundle Browser可以用于优化游戏的资源处理方式,提高游戏性能,同时也可以帮助开发者更加高效地管理和打包游戏资源。值得注意的是,AssetBundle Browser只适用于Unity游戏引擎,需要Unity开发环境的支持。因此,开发者在使用AssetBundle Browser时,需要提前了解Unity的相关知识和技术,否则会影响到开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值