游戏引擎的虚拟文件系统
💡
原文中文,约3000字,阅读约需7分钟。
📝
内容提要
该文章介绍了游戏引擎中使用的虚拟文件系统(VFS)的设计和实现,讨论了编辑器对VFS的修改需求,提出了解决方案。文章还介绍了VFS的自举问题和版本管理机制,以及Ltask多任务框架和Fileserver工具的使用。
🎯
关键要点
- 游戏引擎主要用 Lua 开发,包含游戏资源和代码。
- 虚拟文件系统(VFS)设计用于将开发机文件映射到手机设备,并支持版本管理。
- 自举问题涉及更新机制和自恢复机制,因特殊环境导致实现复杂。
- 更新问题通过重新打包和发布 app 或在内存中更新 VFS 解决。
- VFS 设计为只读,目录结构使用 Merkle tree 实现版本管理。
- 编辑器需求打破了 VFS 只读的假设,需要修改本地文件。
- 开发了两个版本的 VFS 模块以适应不同需求,导致行为不一致。
- 编辑器的修改操作不必直接写入文件系统,依赖于内存中的资源管理。
- 资源模块依赖 VFS 路径而非 VFS 系统本身,避免了对文件系统的直接修改。
- fileserver 为 C 端提供数据,需将自身代码快照存储在 cache 中以支持离线工作。
➡️