Unity打包iOS图集教程与打包流程

这里使用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压力。

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

unity 打包ios 图集设置 unity如何打包_游戏unity 打包ios 图集设置 unity如何打包_游戏_02


获取依赖关系:

AssetDataBase.GetDependencies(string)

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

  unity 打包ios 图集设置 unity如何打包_游戏_03

unity 打包ios 图集设置 unity如何打包_数据库_04


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

unity 打包ios 图集设置 unity如何打包_数据库_05

unity 打包ios 图集设置 unity如何打包_unity 打包ios 图集设置_06

unity 打包ios 图集设置 unity如何打包_unity 打包ios 图集设置_07

unity 打包ios 图集设置 unity如何打包_依赖关系_08



迭代处理

unity 打包ios 图集设置 unity如何打包_数据库_09

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

unity 打包ios 图集设置 unity如何打包_依赖关系_10

unity 打包ios 图集设置 unity如何打包_依赖关系_11

5.X的 资源打包

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

unity 打包ios 图集设置 unity如何打包_数据库_12

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

使用脚本进行:

unity 打包ios 图集设置 unity如何打包_数据库_13

unity 打包ios 图集设置 unity如何打包_数据库_14

unity 打包ios 图集设置 unity如何打包_c#_15



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

unity 打包ios 图集设置 unity如何打包_c#_16

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

unity 打包ios 图集设置 unity如何打包_数据库_17

unity 打包ios 图集设置 unity如何打包_依赖关系_18

出来的文件二进制化,然后对二进制的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...


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空