最近在项目中进行资源优化. 我们的项目一直以来都是以传统的电子表格配置为中心的资源驱动加载方法, 拿角色携带的特效要播放出来这个case来具体点说就是:
1. 技能部分的特效可以遍历动作表播放的所有特效id, 提前预载
2. buff类特效是动态确定的,无法分析. 需要通过角色表添加资源id在加载角色时加载特效
这种做法的缺点:
当角色特效效果调整时, 美术和策划需要调整特效id表. 多出来不用的特效也加载是感觉不出来的, 分析也是很困难的
所以这种以传统的电子表格配置为中心的方式在Unity3D里, 内存, 包优化会是个大问题.
那么, 什么是Unity3D的开发核心思想?
除了组件思想外, 就是Prefab, 贯彻整个编辑器及引擎自始至终
处理角色携带特效加载后播放的这个case, 用Prefab为中心的资源管理来做的话, 大概就是这样:
1. 程序编写一个角色特效列表脚本, 把List暴露出来可以在编辑器里使用
2. 美术在做技能时, 把要用到的特效拖拽到List中
3. 特效无需再编制全局ID编码
4. 策划根据这个角色挂接的特效索引, 在配置表里添加播放指令
这样做的优点:
角色引用到的资源才会被打到最终游戏包内, 不使用的资源是不会被加载的
类似的, 在UI特效里, 也应该是将要播放的特效挂接到对象中, 而不是动态通过代码去加载
在Unity3D中, Prefab将图片,Shader, 特效, 脚本等一切平等看待, 只要有引用, 一次性加载.
同时, 也可以通过静态工具分析Prefab.
如果是通过代码加载的效果, 则只能让程序员做优化, 这种过程无法让Unity3D官方后期提供的工具进行优化
所以, 推荐使用Prefab为中心的资源管理模式