虚拟文件系统的 mod 机制

1,944次阅读
没有评论

上次谈游戏引擎的虚拟文件系统是去年 10 月了。最近我们又做了一些修改。

我们的虚拟文件系统有两个工作模式。一种模式主要用于编辑器和开发环境,所有的文件名和路径都基于原生文件系统,我们叫它编辑器模式;另一种模式被称为运行时模式,主要用于运行时环境。文件均用类似 git 仓库的形式,用文件内容的 hash 值作文件名,储存在一颗 Merkle tree 上,并通过一个专门的 file server 为运行环境提供资源的更新服务。

在编辑器模式下,并不是直接映射原生文件系统的整棵目录树的,而是增加了一个 mount 配置,可以把很多不同的目录装配在一起。当初这么设计是希望提供一定的灵活度,方便游戏项目可以把引擎提供的基础功能和资源组装进来。

最近做了一些改动。把这个 mount 机制改成了 mod 机制。

mod 机制在很多游戏中都能见到。即,可以指定一个 mod 目录,这个目录下有着和游戏主目录相同的结构。游戏运行的时候,这个目录下的文件有着比游戏主目录下同名文件更高的优先级。游戏程序想读取某个文件时,会优先读取 mod 目录下的文件,如果文件在 mod 目录下不存在,才会查找游戏的主目录。

mod 目录通常可以有多个,可以定义优先级次序,一级级查找。

Paradox 的游戏都支持 mod ,玩家可以方便的用这种方式扩展游戏。我就维护着群星的一个非官方汉化 mod 。我最近玩的较多的 factorio 和 rimworld 都采用类似的机制。相信还有更多游戏也是。我记得我第一见到类似的东西是在 Quake 中,它的补丁文件就是一个个用 zip 打包的相同结构的文件目录。每次发行新的补丁,只需要把新增和改变的文件打包放在游戏目录下。

我们公司的项目也是如此,比如现在正在运营的三国志战略版也使用了这个方案。

我最近觉得,这种 mod 方案比更灵活的 mount 机制(可以随意拼装不同的目录结构)更容易维护,更方便非技术人员使用。如果这个机制直接做在引擎的底层,应该在虚拟文件抽象层就支持好。

一个最显而易见的好处是方便开发人员的开发调试。比如美术想修改一下美术资源看看效果,他就不用破坏本地仓库,把修改版本放在 mod 目录就够了。如果修改本地仓库,便会面临同步的问题。对策划也是如此,很多配置表格的修改都是暂时的,不希望提交。有专门的 mod 目录,甚至几个 mod 目录,比学会用 git 切换分支更容易。

有 mod 机制后,引擎也方便提供更多的默认选项。我们可以把最常见的配置都写好直接放在引擎的主干中。还可以把一些扩展功能放在独立子仓库中,以插件形式提供。这些插件子仓库有和引擎相同的目录结构,插件功能可能包含一些着色器、脚本、原本需要配置在引擎目录结构下的不同目录中。

具体游戏项目只是对引擎提供的默认项目的一个 mod ,把需要修改的文件改写好即可。做新的游戏,就是对已有的游戏打个 mod ,这对开发人员来说也比较容易理解。

或者应该这么说:游戏引擎游戏引擎要做的事情不应该是提供零件让开发者组装成游戏;而是应该做好游戏,让开发者去制作 mod 。

上次谈游戏引擎的虚拟文件系统是去年 10 月了。最近我们又做了一些修改。

我们的虚拟文件系统有两个工作模式。一种模式主要用于编辑器和开发环境,所有的文件名和路径都基于原生文件系统,我们叫它编辑器模式;另一种模式被称为运行时模式,主要用于运行时环境。文件均用类似 git 仓库的形式,用文件内容的 hash 值作文件名,储存在一颗 Merkle tree 上,并通过一个专门的 file server 为运行环境提供资源的更新服务。

在编辑器模式下,并不是直接映射原生文件系统的整棵目录树的,而是增加了一个 mount 配置,可以把很多不同的目录装配在一起。当初这么设计是希望提供一定的灵活度,方便游戏项目可以把引擎提供的基础功能和资源组装进来。

最近做了一些改动。把这个 mount 机制改成了 mod 机制。

mod 机制在很多游戏中都能见到。即,可以指定一个 mod 目录,这个目录下有着和游戏主目录相同的结构。游戏运行的时候,这个目录下的文件有着比游戏主目录下同名文件更高的优先级。游戏程序想读取某个文件时,会优先读取 mod 目录下的文件,如果文件在 mod 目录下不存在,才会查找游戏的主目录。

mod 目录通常可以有多个,可以定义优先级次序,一级级查找。

Paradox 的游戏都支持 mod ,玩家可以方便的用这种方式扩展游戏。我就维护着群星的一个非官方汉化 mod 。我最近玩的较多的 factorio 和 rimworld 都采用类似的机制。相信还有更多游戏也是。我记得我第一见到类似的东西是在 Quake 中,它的补丁文件就是一个个用 zip 打包的相同结构的文件目录。每次发行新的补丁,只需要把新增和改变的文件打包放在游戏目录下。

我们公司的项目也是如此,比如现在正在运营的三国志战略版也使用了这个方案。

我最近觉得,这种 mod 方案比更灵活的 mount 机制(可以随意拼装不同的目录结构)更容易维护,更方便非技术人员使用。如果这个机制直接做在引擎的底层,应该在虚拟文件抽象层就支持好。

一个最显而易见的好处是方便开发人员的开发调试。比如美术想修改一下美术资源看看效果,他就不用破坏本地仓库,把修改版本放在 mod 目录就够了。如果修改本地仓库,便会面临同步的问题。对策划也是如此,很多配置表格的修改都是暂时的,不希望提交。有专门的 mod 目录,甚至几个 mod 目录,比学会用 git 切换分支更容易。

有 mod 机制后,引擎也方便提供更多的默认选项。我们可以把最常见的配置都写好直接放在引擎的主干中。还可以把一些扩展功能放在独立子仓库中,以插件形式提供。这些插件子仓库有和引擎相同的目录结构,插件功能可能包含一些着色器、脚本、原本需要配置在引擎目录结构下的不同目录中。

具体游戏项目只是对引擎提供的默认项目的一个 mod ,把需要修改的文件改写好即可。做新的游戏,就是对已有的游戏打个 mod ,这对开发人员来说也比较容易理解。

或者应该这么说:游戏引擎游戏引擎要做的事情不应该是提供零件让开发者组装成游戏;而是应该做好游戏,让开发者去制作 mod 。

 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)

文心AIGC

2023 年 3 月
 12345
6789101112
13141516171819
20212223242526
2728293031  
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026 Jay 2025-12-22 09...
面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25 鹭羽 2025-12-13 22:37...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...
商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1 十三 2025-12-15 14:13:14 ...
跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026 一水 2025-1...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地

预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地

预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地 henry 2025-12-11 10:27:...
Meta公开抄阿里Qwen作业,还闭源了…

Meta公开抄阿里Qwen作业,还闭源了…

Meta公开抄阿里Qwen作业,还闭源了… Jay 2025-12-11 11:48:25 来源:量子位 Ja...
MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这

MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这

MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这 西风 2025-12-11 15:...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...