资源管理一直是游戏开发中非常关键的一环,作为游戏最底层的一个模块,可以说它很大程度上影响了游戏的稳定性和开发的效率。即使是使用Unity引擎开发游戏,资源管理仍然是需要开发者自己解决的重要问题。然而这么重要的一个问题要想完美的跨过却并不那么简单,除了需要清楚的了结Unity资源管理的机制、内存模型和相关的API之外,趟坑也是必不可少的。而一套完善稳定的资源系统将大大节省开发的时间,避免走入不必要的弯路。
ResSystem
Qarth框架中的资源系统正是尝试去解决这么一个问题,这套系统已经有多个线上项目使用,理论上大家可以直接使用也可以借鉴改造。如果有任何Bug和建议欢迎反馈。
作为框架中最基础也是最核心的一个模块,它也是其它模块的基石。类似UI系统,音频系统都需要依赖资源系统的支持。
资源系统的代码在Engine/ResSystem目录下, 内部抽象了一套可扩展的、面向接口的资源管理模型,开发者完全可以方便的添加对任何可以当资源对待的对象的支持。当然对Unity的资源管理仍是其内置的主要职责。为了方便描述后面用ResSystem直接指代整个系统。
当前已实现的功能包括:
- 基于引用计数的资源管理(同时支持AssetBundle和Resources下资源)
- 同时支持资源的同步&异步加载
- 内建资源清单,上层无须关注资源依赖、资源在哪个AB,是AB资源还是Resources资源的问题等问题
- 基于资源包的设计,默认既支持资源分包、多语言资源包等应用场景
- 内建直接支持资源热更(不限于AssetBundle文