Unity Assets 笔记:
2020-08-25 本文已影响0人
魁犸
视频: https://www.bilibili.com/video/BV1Wv41167i2?from=search&seid=14522483669421657296
Assets 的产生方式
-
MAYA (3D 模型) 、PS(图片)、 音效、Unity (prefab)
-
meta 文件 和 prefab 文件
- prefab 是文件信息数据,meta 是文件的补充信息数据
- YAML 格式数据文件
- YAML 是和JSON、XML 一样的数据文件格式 ,具有自引用的特点
- 可以通过修改.prefab 或者meta 的方式来修改frefab 的状体
-
Unity 中的资源无论是什么格式怎么设置,都不会改变源文件 而是在Libiary 中生成对应平台的文件
- 音效文件在工程中使用wav 无损文件比较好
- Libiary 中编译速度
Assets 技巧
- 在项目Assets目录中,文件名末尾带'~'的不会被编译
- 如果文件夹名称为:hide~ 则改文件夹不会被编译
AssetBundle
-
原理
- AssetBundle 就是一种压缩包,是Unity的一种虚拟文件系统
- 既然是一种文件压缩格式为什么部用文件读写,为什么还要用真么复杂的东西管理呢?
- AssetBundle 可以管理文件引用关系
- 跨平台考虑
- 既然AssetBundle 是一种压缩文件 所以像一般的压缩文件格式一样大致包含2部分:
- 头文件(立即加载)
- 内容 (按需加载)
-
生成AssetBundle
- 正常打AssetBundle 所有信息全部打进 AssetBundle 包中(Bundle 文件大)
- 打Bundle 文件时 关闭TypeTree (Bundle 文件小,占内存少)
TypeTree 是什么,干什么用的?什么时候可以关闭,什么时候必须开启?
- TypeTree 是Unity 内部为了兼容不同版本打出的AssetBundle 文件 额外生成的一部分标识文件
- 如果我们保证是同版本打包并发布 则不需要开TypeTree,如果打包AssetBundle 和 发布不是一个版本则需要TypeTree 避免Unity 编译时报错
- TypeTree 是AssetBundle 跨版本兼容文件
-
打包策略
一个AssetBundle 多大合适,这个要根据使用的场景决定,移动设备的网络状况 其实和台式设备比试比较偏差的。所以决定了如果需要网络下载AssetBundle 则文件不能太大。
另外 AssetBundle是一种压缩格式,所以要注意 头文件 和 内容 之间的分配- 结论:
- 需要网络下载 1M~2M
- 本地使用 5M~10M
- 结论:
-
加载
- profiler 使用时注意:
- 运行时 资源是按需加载
- 编辑器环境下 优先保证Unity的流畅性
所以查看性能时需要真机查看,比较准
- 序列化 和 反序列化
- 运行时尽量使用prefab
- 使用prefab 对于 内存和 Runtime 相对于普通物体都有提升
- 同步 和 异步
- 同步(快,但是主线程会卡, 可以采用分针同步)
- 异步 (尽量不卡(有可能会卡),至少比同步慢一帧)
- 同步和异步同时使用会出现问题
- 资源加载unity中 2个重要的管理类
- PreLoad 和 Presisten
- PreLoad 任务调度(生成)
- Presisten 是 从磁盘读取 文件,分配 Id(这个必须locked)
- PreLoad 和 Presisten
- profiler 使用时注意:
- 卸载
- UnLoadUnusedAssets
- Secen 会自动调用
- 不能并行
- 同步执行(会卡顿)
- AssetBundle.UnLoad
- AssetBundle.UnLoad(true) Assetbundle 和资源全部卸载
- AssetBundle.UnLoad(false)只卸载Assetbundle
- UnLoadUnusedAssets