zoukankan      html  css  js  c++  java
  • Unity配置数据打包与解析

    这里使用Csv格式进行解析与使用。

    一、首先对于Unity的数据读取有这么几种方法:

        在Resources目录下Resources.load直接读取,是只读的。也可以通过C# 流的方式进行读取,而且可以写。

        在StreamingAssets目录下,一般是对文件进行压缩,因为数据量比较庞大,压缩以减少安装包大小。压缩方式采用UnityAssetBoudle的模式进行打包。

    二 对数据打包

    Unity资源 什么是Asset : Mesh ,material ,texture,Audio ,txt等

    Assets、Resources 、StreamingAssets、AssetBundle 。

       Assets文件夹:只有被引用的资源会被打包。 适合存放静态资源,不能动态加载。

       Resources :支持动态加载、Resources.Assets文件2G限制,随安装包完全下载、无法动态更新。

      StreamingAssets:不同平台放置位置不同。保持文件原始格式(比如存放原始jpg文件,而不导入成内部格式),随安装包完全下载集合,压缩,动态加载,动态更新。

      4.x的做法:

     依赖关系导致资源重复。 先将重复使用的资源打包成一个ab ,然后在打包别的资源。

    打包策略 :尽可能的减少冗余资源 ,减少AppSize,减少网络下载流量

          分类打包

                       按类型,或者用途打包

          AssetBundle 代销尽量不超过1M ,减少IO压力。

     如何处理复杂依赖关系: 使用数学方法分析,有向图。 入度 ,出度。 一个资源是有向图的一个节点。有一个资源依赖与它就有一个指针指向它,这叫“入度”,当这个资源依赖于另一个资源这叫“出度”。

     获取依赖关系:

        AssetDataBase.GetDependencies(string)

      首先以每一个资源为一个节点,以最低粒度构造有向图

       

     资源入度大于等于2的情况一般是资源重复

    迭代处理

      先构建有向图,得到依赖关系以图的形式构建,找到入度为o的源点,入度节点为一的可以删掉,找到入度大于等于2的共享资源,从源点开始深度遍历有向图。 保存依赖关系,然后按依赖关系 加载:

          

     5.X的 资源打包

     手动配置Asset和 AssetBundle的映射关系

    配置好后 使用 BuildAssetBundles(string outputPath)   CollectDependencies总是开启。 如果存在共享资源仍可能存在资源重复。

     使用脚本进行: 

      

    直接收集哪些入度为0,哪些入度为1,哪些入度为2

    加载卸载 ,manifest 文件依赖关系在这里面 ,全局和每个manifest文件

       ①打包编码,他打包的原理和Rar zip压缩一样,底层用的是zip的方式。对于加密可以把打包出来的文件二进制化,然后对二进制的bit进行加密,然后解密。5.0后也有加密方式,也可以自行加密。

       unity 资源管理小结:AssetDatabase 对资源的操作基本都是通过这个类来实现。

       将所有csv文件转化为byte文件,创建一个asset,把打包出来的文件做成ScriptObject,更容易序列化和反序列化。

       使用ScriptObject序列化。

      ② 打包的依赖性。

        打包处理: 建立Assets到AssetBundle的映射 : 

       脚本方式: Assetimporter.assetBundleName 将映射关系保存在 Asset Database、meta file中

       普通的Assets

        一个Asset 只能标记到 一个AssetBundle 

        不能标记script

      场景(Scene)

                不能Sence和普通的Asset标记在同一个AssetBundle

      文件夹

               包含他及其所有子文件夹的Assets

      使用相对路径

     完全从脚本打包 BuildPipeline.BuildAssetBundles(

                                                       string outputPath,

                       AssetBundleBuild[] builds,

                       BuildAssetBundleOptions options,

                       BuildTarget targetPlatform);

    管理Assets 到 AssetBundle的映射 AssetDataBase

     AssetBundle创建选项 这些是始终启用的: CollectDependencies

                                                             CompleteAssets

                                                            DeterministicAssetBundle

    不变的 DisableWriteTypeTree

              UncompressedAssetBundle

    新的AssetBundle创建选项 ForceRebuildAssetBundle

                                        IgnoreTypeTreeChanges

                                        AppendHashToAssetBundleName(当AssetBundle变化时产生不同的名字,易于检测哪些AssetBundle是需要重新上传到CND)。

    查找AssetBundle ,AssetBundle的Search filter 

             b 可以与其他Search Filter共同使用 

             t    类型

             l    标记

             b   AssetBundle

    AssetBundle 的 hash值 考虑从一下各项产生: Asset files 、Type trees、BuildTarget、BuildOption、Callbacks...

  • 相关阅读:
    EFCore数据库迁移命令
    EF基本操作
    EF执行存储过程
    [vue]element-ui使用
    [vue]vue-router的使用
    [vue]使用webpack打包
    [vue]插槽与自定义事件
    [vue]计算属性
    [vue]axios异步通信
    [vue]组件
  • 原文地址:https://www.cnblogs.com/bambomtan/p/5148101.html
Copyright © 2011-2022 走看看