上周末花时间对我的构建进行了性能分析,发现生成命中效果的粒子消耗的帧时间比预期的要多得多。简单的解决办法是将发射器批量处理。但之后我开始思考我的整个实体组件设置是否对缓存友好,以及是否应该重构它。三个小时后,我在阅读关于数据导向设计的资料,并质疑自己写过的每一个指针间接引用。

问题是,我的游戏运行得很好。它是一个2D动作原型,没什么特别的。在我的笔记本电脑上能达到120帧,而且在我测试过的两台机器上也没有出现任何问题。但优化的冲动总是让我偏离实际的功能开发。

作为软件开发者,我知道这种模式。干净的代码、更好的架构、更快的循环。这些问题看起来是可解决的,而好的游戏设计却未必。我能判断代码何时更快,但无法总是判断游戏何时更有趣。我开始怀疑自己追求性能,是因为它能给我带来明确的胜利感。

好奇是否有其他人也陷入过同样的陷阱。你们是事先设定严格的性能预算,还是只有真正出问题时才进行被动优化?你是否曾发现自己打磨内部实现,而面向玩家的一面却仍半生不熟?