C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

游戏引擎基础(九)(现成产品与定做的游戏引擎设计工具,游戏特定主题)

9部分: 现成产品与定做的游戏引擎设计工具,游戏特定主题


现成产品与定做的设计工具
  我们从第8部份的脚本引擎来到这一章节中的许多主题,我们认为那些铁杆游戏玩家和有志成为游戏开发者的那些人将会发现它们相当有趣。我们将开始讨论现成产品与定制的设计工具。

  你的工具的选择是你引擎设计的一个非常重要的部份,因为这是你将用来给你的游戏产生内容的东西,是最耗时的部份。在这个过程中有助于节省时间和资源的任何东西都是好的。那些不能的东西就是糟糕的。在那里,那是容易的。

  当然没有那么容易。有比这更多的事情可能会立刻被注意到。你的工具集的选择,和从工具到游戏的资产路径比它听起来更有技巧得多,并受到很多因素的影响,比如,是否适宜手边的工作,费用,内容生产者的熟悉,市场渗透,工具支持等等。当考虑选择现货成品工具,或者即使当开发你自己的工具时,记得开发者实际在做工作,最好能够做需要借助工具做的。一些现货成品工具能在价格上达到那里,当你陷入多个拷贝许可时,费用猛涨。

  然后就有诱人的可能性从头制造你自己的工具,为你游戏和引擎的需要而设计。这当然需要时间,和程序员大量的努力来产生在开发者友好方式中所需要的东西。快速打造基于窗口的文件转换器是一回事情,从头建造一个完整的关卡设计工具又是另外一回事情。另一方面,如果你确实选择这条道路,最后你会有游戏开发者地带其他人没有的工具,因此你的东西将会看起来是独特的。如今与众不同是一件非常值得想望的事情,而且从群众这些天起突出是一件非常令人想要的事物,产生所有的竞争。

  当然由于内部的工具开发,你需要某人来做所有那些不可避免的小的改变和修正。但这里真正的意义是这是可能的。使用现成的工具,工具开发者会很少因为你需要的一些特征而改变他们的输出文件格式。这样你的东西最后看起来更加通用一些,否则你必须采用额外的步骤使用另外的工具来得到想要的结果,当然会花费开发者更多的时间。

  值得记住的是如今许多有名的3D工具已经有一段时间的历史了,并且正在产生简直没有错误的产品,更重要的是,对他们所做的已经有一定程度的经验了。

  如果你选择建造你自己的工具,多半你是,a 重新创造车轮到某种程度 b 陷入那些建造现成工具的人们已经遇到过的相同的问题之中,只是他们已经解决了这些问题。时常人们建造一个单一特定的工具花费了相当的时间和努力,并产生了一个远远超出你自己的个人需求的工具。还有,他们有代表性地收编了一些你或者认为是没有用的,或者没有时间自己实现的特征。加上他们典型地有吸收特征你或会没有想有用,或没有时间实现你自己. 这是第三方软件无法争辩的。


插件和目的建造工具
  通常大多数的游戏开发过程最终都是这样的混合,自己开发的文件转换器工具,现成的内容创造工具,和通常那些要增加一些必须的特殊功能的工具的一些附加插件。现成工具在提供你不可避免会需要的功能方面有很长一段时间了,但是正如不可避免,总有一些很有用的,有帮助的,或者完全必须的东西你不能得到。一个小的插件可能是一个很好的替代品,而且时常那就是所走过的路。为特定目的建造的预处理程序也是可用的,比如把TGA文件转换为一个对PS2友好的格式,或者那些相关的东西。

  如果你或你的公司打算建造某种类型游戏的工具,那么这些工具一般是从一个项目到一个项目地演变发展,而不是每次都从头重新建造。如果你变换游戏类型,很好,那些产生具有每个多边形命中能力的高分辨率模型的工具明显地不是一款RTS(即时战略)风格游戏所必须的。

  Gil GribbRave Software的技术带头人,对现成的工具自己动手建造的问题是这么说的:

  "自己开发的工具有能够根据自己产品的需要进行定制的优势,你拥有代码,可以修正任何错误或者增加任何的改进。

  自制工具的缺点是建造和维护它们是非常昂贵的,通常成本要比现成工具高很多。在许多情况下,由于应用程序范围的缘故,建立自己的工具是完全不可能的,比如说3D建模和动画软件包或者位图编辑软件。"

  当然,如果你想要游戏玩家能够修改你的游戏,而且你自己建立了所有的工具,那么你就必须要向世界发布这些工具。这可能会引起一点点疑惑,记住建立你自己的工具的部分原因是你可以领先你的竞争者。有时侯发布这些工具的源代码甚至可能让你获益匪浅,这确实提供了一种创造内容的方法。再次,Gil Gribb阐述这个主题:

  "我是支持发布几乎所有的源代码。我认为我们没有任何来自我们的竞争者的害怕的事情,合法的业务不会想到窃取知识产权。游戏迷,业余游戏制作者,以及游戏的普及都能够从发布的源代码获益。"

  好,我们的游戏引擎剖析系列到这里,当然我们已经特别讨论了许多和引擎相关的主题,下面让我们继续讨论一些与游戏特定相关的部分。


游戏控制机制
  控制机制能够对开发中的游戏带来巨大的差别,有时甚至表明你正在建立的游戏的种类或者风格。

  尝试在某个时候用gamepad玩一个即时战略类游戏--它不只没有乐趣。有时当你被限制在一个特定的输入装置的时候,例如鼠标和键盘,为你的游戏发明新的控制方法会是一个令人筋疲力尽的过程。当Raven开始开发Heretic II时他们决定做的第一件事情之一就是为用鼠标使用第三人称照相机尝试和找出一个直观的方法。在这以前,大多数游戏采用的是Tomb Raider风格的照相机(第三人称预兆的追逐)他们发现这时常不能正确地工作,在很多情形下会给玩家带来挫折。照相机时常会得到任意的视角,如果可能的话移动相机,而且有时改变玩家的方向。

  假定他们的目标对象是FPS游戏人群,Raven需要找到一个对FPS游戏玩家来说直观的控制乌鸦座(Corvus)的方式。他们这样做了,但确实花费了一些时间,和一些不同的方式他们应当让照相机固定在一个方向吗,或者让它是浮动的吗?大多数游戏开发努力除非一个确定类型游戏的一个没有虚饰的实现倾向于花费一些研发找出物理控制装置和游戏需要的内部控制机制的最直接的合并。这里是一个暗示一旦你发现一个方式很起作用,就坚持下去。用这种方式控制游戏内在的东西能把视野,直觉,甚至游戏的焦点完全改变成你从未想要过的东西。发现起作用的东西,证明它起作用,然后就别管它。过分设计控制会导致特征偏离和可察觉的游戏概念问题。

  像这类特征偏离的一个很好的例子可以在Independence War中看到。这款游戏有着如此多的模式,按键,等等,仅仅熟悉和操纵游戏都不可能。

  很明确这里的关键是简单。一个好的经验法则是,在正常的游戏中,如果你的游戏需要比在普通的gamepad的按键或者你手上的手指更多的按键,那么一些事情需要被重做。注意, 我不是说一款游戏不应该有灵活性—Soldier of Fortune必定有许多可能的按键设定。但通常,当你认为它们大多数实际上都是不需要的时候Quake引擎有一个很好的方式。是的,你可以选择你想要使用什么武器,但你不是必须这样。游戏将会自动地为你那样做。这就是灵活性和过度设计之间的不同。如果游戏需要你按下某个键来选择一个武器,那将会有问题。你理解这个了吗?

  控制机制不能被过高估价 -- 一款游戏时常将会根据玩家觉得他们对事件或者主要角色有多少控制而获得成功或失败。如果控制被改变,重新定向,或仅仅简单地从他们哪儿移除,它能导致游戏自身缺乏参与,不用说,那是一件很糟糕的事情。在这上面花费时间并让它保持简单,将会有巨大的帮助。


实体和照相机
  现在我们来到了引擎不太令人愉快的部份,也是定义得最少的部分。当游戏运行的时候,游戏在这个部分能变得极端地多出错,耗时间,或仅彻底的极限。

  在这里我们所谈论的是游戏引擎的 "游戏" 部份。这个部分使用所有的其它技术让一些事物显示在屏幕上,到处移动,让它对你产生反应并且让你对一些事物产生反应。这个系统有许多方法,但现在我将紧扣Quake的方法因为那是我最熟悉的。

  让我们从实体开始。这些可以被定义为游戏对象。现在那不仅仅意谓你在屏幕上看见的模型,虽然实体确定地控制这些 -- 实体也可能是其他的事物。基本上它是游戏在任何给定时间需要知道的任何事物,例如让事情继续进行的定时器,模型的碰撞检测盒,特效,模型,游戏玩家,等等。

  甚至照相机都可能是实体(在几乎所有Raven的产品中都是这样)。照相机在世界中被分配一个有角度的原点,它们每幀都被刷新并告知渲染器应该从哪里得到它的视野数据,and off we go。典型地实体是为了返回到游戏早先的状态而被存储和装载的那些东西。通常在装载过程中使用的方法是把游戏地图装载进来,好像你正在重新开始一个关卡一样,然后装载所有存储的实体,这样他们就返回到游戏存储时它们的状态。Voila,即刻返回一个存储的游戏。当我理解Heretic II的方法时这并不是那么的容易装载/存储几乎比其他任何事情带给我的问题还多,特别是在协作模式。

照相机有许多形式:

  自由形式:照相机能去任何地方
  脚本:照相机可以沿着一条设定的路径前进
  游戏时间:照相机有必须要遵循的定义的行为

  仅仅说"嗯,我将仅仅跟随主要的角色"是不够的。这意谓你也可能需要让照相机穿过墙壁,或让它按一些方式移动以致甚至引起一些胃的恶心。让它沿着一些定义的上下运动路径前进也有益处,如同任何玩Descent游戏超过一小时的人可以告诉你的一样。身体和头部习惯于上下是一个静态的变量,并当它不是时,他们不喜欢它。制作Quake 1 Mike Abrash,曾经告诉我即使当它被定义,他仍然处理 的麦可 Abrash 地震 1,曾经告诉我即使当它被定义,他仍然从他们正制作的游戏感到运动恶心。他提到,对于他来说,离开制作Quake 1一年时间才让他的胃安定下来。啊哈,我们所作出的牺牲。


武器系统
  游戏模块的另外一个部份是武器系统。大多数的游戏有武器系统或类似的东西。 这是在世界中影响其他的物体,而且使他们对给定情形产生反应的东西,--比如说被射击。通常武器系统由许多不同的类型组成;攻击扫描,基于飞弹的,以及范围形式。

  攻击扫描是直接攻击武器。在屏幕上他们产生的效果只是那样,一个效果。当使用它的时候,和武器的实际操作没有任何关系。当你用手枪开火时,子弹被认为立即穿过世界并直接击中在它运动轨迹上的任何人/事物。

  基于飞弹的武器有一个占用有限时间穿越世界的真实射弹,从而带给对方一些可以躲避的时间。

  基于范围的武器像手榴弹和炸弹一样的东西,不必击中就可以伤害到你;你只是必须处于爆炸范围内。处在那种爆炸范围内的玩家受到飞溅损害。熔岩是另外一种形式的基于范围的武器。

  那么你如何决定什么被击中而什么没有被击中呢?很好,这个问题把我们带到了追踪,我们将在接下来的物理学和人工智能章节更多的接触追踪。这是一组函数例程,当给定世界中一条从A点到B点的直线时,比如从枪的末端到预先定义的距离,它告诉游戏什么被击中。追踪很棒,但很昂贵,因为他们必须对那条线上的所有多边形进行碰撞检测来看是否有什么地方被击中,更不用说模型和其它对象了。这也是一些物理学的工作方式,从一个给定的角色做一个笔直向下的跟踪可以知道地板位于什么地方。肆意的滥用追踪如,在游戏的一幀中多次使用它们 -- 对于今天许多游戏的速度下降是有责任的。在Jedi Knight IIOutcast,他们的光刀战斗已经遇到了这个问题,因为他们不仅需要知道光刀是否击中了某处的什么和它现在的位置,而且对于它们之间的所有点都得这样,他们对光刀做了多次追踪。


  好吧,又一个章节结束了,仅仅剩下两个章节了。下面我们介绍人工智能和搜索的更多细节。

posted on 2007-12-04 13:28 梦在天涯 阅读(3608) 评论(0)  编辑 收藏 引用 所属分类: Game/OpenGL


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1795556
  • 排名 - 5

最新评论

阅读排行榜