
一个价值数十亿美元的设计决策,是怎样从一张白纸开始的一、开篇:如果让你从零设计,你会怎么做?假设现在是2004年。你是Unity引擎的初创工程师之一。你面前有一张白纸,一杯咖啡,和一个看似简单的需求:“我们需要一个系统,能把游戏对象保存到文件里,然后再从文件里还原回来。”你想了想,觉得这不难。不就是把数据写到文件里嘛?fwrite一下就完了。但你的技术总监走过来,在白纸上又写了几行需求:要支持几十种内置类型(Transform、MeshRenderer、Camera……),每种类型有不同的字段要支持用户自定义的C#脚本,字段完全未知要支持二进制格式(运行时高效加载)和文本格式(编辑器可读可diff)要支持版本兼容——用旧版Unity保存的文件,新版Unity必须能打开要支持对象之间的引用关系(A引用B,B引用C)要支持深拷贝(Instantiate)要支持Undo/Redo要支持热重载(修改脚本后不丢失数据)要支持跨平台(Windows、Mac、iOS、Android、主机……字节序可能不同)要足够快——编辑器中每秒可能触发数百次序列化操作要足够稳——一个bug可能导致用户丢失整个项目