您的位置:首页 > 其它

实体系统是MMOG开发的未来——第一部分

2013-01-09 14:58 89 查看
原文地址:http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/

几年前,实体系统(entity-systems)(或称组件系统component systems)是一个热门话题。尤其是当 Scott Bilas 在GDC上做了一个关于在Dungeon Siege中使用这项技术的非凡演讲之后。实体系统的主要优点有:

当设计人员需要修改游戏逻辑的时候无需开发人员参与
避免在项目一开始就将所有实体硬编码而导致的“不可能”问题
容易实现那些会违背传统OOP对象开发的游戏设计
更快的 编译/测试/调试 周期
更敏捷的编写代码

我第一次在愤怒中使用实体系统是在2001-2003年,我负责编写MMOG服务器的中间件。我们当时面临着MMOG开发中最令人痛苦的几个难题,其中一个就是在游戏发布后持续地修改游戏逻辑的困难,这将我们领向了实体系统。我了解到实体系统在极大的提升多数MMOG开发速度上堪称完美的解决方案,同时你可以在只付出极小代价的情况下几乎不受限制地重写游戏特性。

最后一个难题是一款MMOG成功的关键:当一个MMOG发布后,它在长期运营中的成功与否在很大程度上起决于开发团队在一个又一个月的时间内能不能不断地将游戏迭代成为一个更好的产品。

我在第一次碰到这些难题的时候学到了很多东西,更多的是关于:什么事情会导致使用实体系统开发变得困难,而不是使其变得更简单。我们同时还发现,性能很容易成为首要的问题——尽管实体系统非常灵活和动态,缺乏pre-compiled lookups和优化使得其运行时性能差到让人失望(甚至无法接受)。为什么?主要是因为每次调用一个方法时跳转和检查的总量太大了(但我会在以后深入的讨论这个问题的细节和解决方法)。

我继续前行,不再考虑这些问题,直到去年。2006年我以首席网络工程师的身份加入了Operation Flashpoint 2团队,当时我们试着开发一款规模不可预知的MMO-FPS游戏,随后我发现开发团队在考虑使用一个实体系统来驱动整个游戏。吸引OFP2团队的是该系统的其他方面——主要是使用实体系统可以提升内存管理和引入面向流编程(stream-oriented coding)(这对在PS3上开发来说至关重要)——结果发现这是开发MMOFPS中“MM”和“O”部分的银弹(Massive
Multiplayer Online)。作为网络程序员,发现实体系统可以成为其他所有子系统的连接器(interconnect)是极大的宽慰:使用实体系统意味着我可以在对其他游戏子系统代码干扰极小的前提下实现复杂的延迟隐藏(latency hiding)和预测(prediction)技术。当一个团队有20名以上的程序员的时候,你绝对不会想将自己置身于为了使他们的代码能对网络友好(network friendly)而重新为他们设计所有代码的境地上。

我在OFP2工作的同时,我认识了Scott,并就实体系统未来的发展前景充分交换了意见,包括该系统的额外应用,以及如何将知识更广泛的分享出去。他鼓励我建立一个博客(这确实是我在一年后建立 T=Machine 这个博客的主要原因),所以我想现在是一个不错的时机,来开始(终于)写一些关于entities的东西了。

“感谢”Scott,是他导致了这个博客的出现。。。

从那以后,我对实体系统和其使用在MMOG开发中的适当性进行了大量的思考。只有这一次——感谢OFP2和他们发现的一些问题——我现在对如何使用实体系统来提升而不是降低性能有了更好的主意,也遇到了一些他们很便捷就能解决了的主要问题。很明显,他们在为PS3创造奇迹。在了解PS3的基础架构是如何工作的情况下,我不能马上说出除了一个完整的实体系统,你还能用什么来为其开发游戏。这头怪物(PS3)的马力如此强劲,你当然可以使用多种方式来为其开发游戏,但实体系统特别适合它。

因为如此,我开始认为次世代的MMOG将变得几乎无法开发,除非开发工作是基于围绕一个核心实体系统(core entity-system)来进行的。“几乎”是关键字——除非你愿意为你的开发工作花上1亿美元。

“Anything is possible”,当然,也有例外的可能性——但我认为没有团队可以绕开它进行开发同时不遭受巨大的痛苦。

我认为大多数人会同意我的看法。但是,在游戏行业最近的邮件讨论列表中——还有就我在游戏公司与那些能力远胜我的程序员共事的经验来看——让我意识到人们对这些系统普遍的忽视,还有一些人没有发挥出系统的全部潜能。所以,如果你感兴趣,请继续阅读吧。

2010年12月更新:我建立了一个wiki来记录文档和提供关于简单实体系统的源代码;请先阅读以下文章再返回wiki。
第一部分——介绍(你正在阅读它)
第二部分——什么是实体系统
第三部分——更多的关于什么“是”,什么“不是” 一个实体系统
第四部分——MMO开发实践介绍
第五部分——初始化,存储和数据
…终将来临:序列化,反序列化和分布状态(distributed state)管理
关于实体系统的最新文章(包括例子,开源代码等等)

以下翻译略

欢迎转载,转载请注明出处





This work is licensed under a
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 China Mainland License.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: