- 第三章:创建并开动: 手把手创建关卡初级教程
- 指南3.1——创建您的第一个房间。
- 指南3.2——向您的关卡添加第二个房间
- 指南3.3——连接您的房间
- 指南3.4——照亮关卡
- 指南3.5——测试关卡
- 指南3.6——向全图几何体添加材质
- 指南3.7——在关卡中放置静态网格物体
- 指南3.8——添加走廊网格物体
- 指南3.9——在走廊网格物体周围放置重点光照
- 指南3.10——创建您的第一个粒子发射器
- 指南3.11——建立基本发射器模块
- 指南3.12——增添附加发射器模块
- 指南3.13——将蒸气发射器置于关卡中
- 指南3.14——添加一个InterpActor(Mover)与触发器
- 指南3.15——创建第一个Kismet序列
- 指南3.16——用Matinee设置InterpActor
- 指南3.17——创建物理对象
- 指南3.18——创建并应用一个物理材质
- 指南3.16——将高度雾添加至关卡中
第三章:创建并开动: 手把手创建关卡
初级教程
文档摘要: 由于全书正在完善中,故本节内容可能在全书出版的过程中发生变化。
使用Unreal Engine进行游戏设计是振奋人心的,想象力有多丰富,设计就有多精彩。当您第一次决定使用Unreal技术创建一个游戏时,指尖的能量是无可抗拒的。 游戏设计者的任务,就是抓住这一领域无限的可能性并缩小其范围,从而制作出精彩的游戏;但是正如游戏领域中的任何一位专业人士所言,说出从何下手是很困难 的。要做到"正确"!,您需要大量的不同领域的技能。这就是本章中我们设计这个简单的入门级关卡的目的,使您能够尽快掌握UnrealEd使用的各个方面进行关卡创建的技巧。
本章不对每个操作动作进行深入解释,而只是提供一个Unreal编辑器的超级速成课程,让您熟悉本书讲解的所有操作动作。本章还能帮助UnrealEd的早期版本用户找出Unreal Engine3.0发行后对老版本的改进之处。
强烈推荐您完整地阅读本章内容,而不是断章取义地从中间选取一个指南。请记住,这是一个入门章节,目的是带您快速浏览UnrealEd,并尽可能多而简单地阐释本书中的所有概念。
注意: 本章指南旨在使读者能够大体识别UnrealEd用户界面的主要区域。要深入查看UnrealEd用户界面,请查看附录A: UnrealEd用户手册。
指南3.1——创建您的第一个房间。
1. 运行UnrealEd。可以在可执行文件末端添加标志"editor"来运行UnrealEd。如果不确定,请参照以下步骤(Windows):
- 右键拖曳安装文件夹中的可执行文件图标至安装文件夹的空白区域并选择关联菜单中的 Create Shortcuts Here(在此创建快捷方式) 。
- 右击新快捷方式,选择关联菜单中的 Properties(属性) 。
- 在属性窗口的"目标"一行中,在本行末尾添加一个空格,并键入 editor 即可。
注意: 最终的"目标"属性应与此相似:
C:UE3UnrealEngine3BinariesUTGame.exe editor
图3.1——UnrealEd用户界面。
2. Generic browser可能随UnrealEd一起运行。若如此,点击右上角的关闭按钮将其关闭,然后在UnrealEd主菜单中选择File > New。
图3.2——主菜单中的"New"(新建)选项。
3. 弹出New Level(新建关卡)对话框,从中可以选择创建一个添加型或挖空型场景几何体。选择"Subtractive"(挖空型),然后点击OK。这样就创建了一个实心世界(如同我们位于山的中央),从中可以抠出我们的关卡。
图3.3——New Level(新关卡)对话框。
4. 在屏幕左侧(工具箱内),您将看到Cube(立方体)按钮。 右击此按钮。屏幕中央将出现一个包含各种维度属性的窗口。
图3.4——画刷(brush)构建器——"Cube"(立方体)属性窗口。
5. 分别于X(长)与Y(宽)的属性键入值1024,以及值512 于Z(高)。参见下图3.5。
点击"Build"(创建)按钮,然后在完成时点击"Close"(关闭)按钮。现在你已经设置出了相应造型的红色画刷生成器。然而,如果您注意到在一些视口中看不到画刷,请不用慌张。您可能需要在视口中使用相机环绕浏览,直到看的见红色画刷!
图3.5——如图所示在Cube(立方体)属性窗口中键入相应值。
注意: 任何未明确告知需要进行属性设置的保留其默认值即可!
6. 从工具箱中(还是位于屏幕左侧),选择CSG:Subtract按钮 。这将使用刚才的红色画刷的形状与位置来创建一个挖空型画刷。创建此挖空型画刷的目的是在我们的实心世界中"抠"出一个房间。然而,由于目前我们在关卡中没有任何光照,一切还都是漆黑不可见的。
7. 点击透视视口顶部工具栏中的Unlit按钮 。这将以不加入任何光源的形式显示您的关卡。由于在我们的关卡中没有光源,这是目前为止查看或者开展工作的简便方法!请随意转动浏览透视视口,以查看您的房间。
提示: 按住鼠标左键拖曳以进行物体的前移、后移及旋转。按住鼠标右键拖曳以旋转相机。鼠标左键及右键同时按下拖曳以进行物体的向上、向下、向左及向右滑动。
图3.6——第一个房间的当前进展。
祝贺您已经在一个Unreal关卡中创建了第一个房间!然而现在它看起来并不怎么样。在下一篇指南中,我们将现有的房间加点东西并使它变成更加有趣的关卡!
[next]既然您已经知道了如何从关卡中抠出一个房间,那么您尽管可以按照相似的流程十分方便地添加更多的房间。然而,为使这些房间相互连通且使关卡中的几何体更为简洁与有效,您必须特意关注每个房间的准确位置,并确保每个画刷精确对齐。
指南3.2——向您的关卡添加第二个房间
1. 在工具箱中右击"Cylinder"(圆柱体)按钮 。在Cylinder属性窗口中,为Z键入1024,其它保持默认值,如图3.7所示。点击"Build"(构建)点击"Close"(关闭)按钮完成。这样红色画刷就转变为一个高六面体。
图3.7——使用此设置创建圆柱体画刷。
2. 在为我们的六面体房间创建一个挖空型画刷之前,我们应当将红色画刷摆放恰当。所以就要用到平移控件(Translation Widget) ,可以在UnrealEd的主工具栏中找到平移控件。您可以把这个控件看作是3ds Max和Maya等很多类似3D制作软件中的平移操纵器。
左键点击红色画刷。现在您应该注意到不仅画刷是以大红色高亮显示,同时平移控件也在其内部可见。
注意:确保您不仅选取了平移控件,同时也选取了位于左边的Show/Use the Widget图标 。若此键未激活,控件则不可见。
图3.8——平移控件。
3. 为了确保在编辑器中的所有移动是精确的,我们需要检验一下拖曳网格设置,因为这控制了当我们移动对象时的对齐(或者说是瞬间跳跃)单位。这些设置在软件界面底部的控制台栏靠近右下角的地方 可以找到拖曳网格设置。确认该复选框被选中,且"Drag Grid"设置为16。若您需要更改拖曳网格设置,只需点击邻接拖曳网格设置的小黑箭头,并从菜单中选取16。
图3.9——拖曳网格设置菜单。
注意: 通常将"Drag Grid"设置成打开状态是个好习惯。这能使您在移动画刷时能准确的与网格首尾对齐,以保持关卡中BSP几何体的整洁,这极为重要。需要BSP的更多信息,参见 第六章 。
4. 在此步骤中,确认你选中了Top(俯)视口(位于界面左上窗口)。将红色画刷缩小至完整视图。确保画刷已选取,并且能看见平移控件窗口。点击并拖曳控件窗口上的红色箭头(X轴),向上移动红色画刷以使其最底部距离立方体的顶部两个网格的位置。
由于您的拖曳网格设置为16,两个网格的间距相当于立方体与六边形之间有32个单位(16 x 2)的空间。 等会儿这会变得很重要。
图3.10——立方体及六面圆柱体于俯视口中正确的放置状态。
小技巧:如果您没办法确定立方体与六边形之间到底应该有多少个单位,您可以使用鼠标中键沿网格拖曳,这样就可以看到一个测量工具。
5. 接下来,查看Side(侧方)视口(位于界面右上窗口)。您会注意到圆柱体画刷的底部低于立方体画刷的底部。需要对此进行调整,否则在关卡中会产生一个非常不平整的地面,导致玩家进入此圆柱体房间时会有一个门户大开的陷坑!
继续查看侧视口,然后使用平移控件中的蓝色箭头柄沿Z轴向上移动圆柱形红色画刷,使其底部与立方体房间的底部相平。
图3.10——注意将两个房间的底部对齐。
6. 在确认六边形房间墙壁与立方体房间墙壁之间的距离为32个单位,且两个房间的底部保持水平之后,点击CSG: Subtract按钮 抠出第二个房间。
7. 在俯视口中使用平移控件移开红色画刷,以使您可以更容易地从perspective(透视)视口中查看房间。请注意,现在两个房间之间没有走廊供玩家通过。
图3.10——在此可以看到当前的两个房间。但是如果您仔细看,将发现它们没有相互连通的。
8. 选择主菜单中的File——选择Save Current Level,将您的关卡保存为PrimerMap_01。
现在关卡中有两个独立的房间了,但是此刻我们无法从一个房间到达另一个房间。在下一篇指南中,我们将在两个房间中创建走廊以解决此问题。
指南3.3——连接您的房间
1. 如果您已关闭了刚才的文件,请打开在上一指南中保存的PrimerMap_01。现在我们要在两个房间中创建走廊以连接这两个房间。
2. 右击立方体按钮 。 在相应属性栏中键入以下值,然后点击"Build"(构建)和"Close"(关闭)按钮。
- X: 32
- Y: 256
- Z: 256
小技巧:您可以在构建刷属性窗口中使用Down Arrow(方向键下)来移动输入区域。
3. 在俯视口中,使用平移控件为红色画刷定位,使其精确配合立方体和六棱柱房间。确认居中红色画刷,使其边缘同时与两个房间都相连,并且水平对齐(还是在俯视图中)从而与立方体画刷的边缘精确配合,如下图所示。
图3.11——本图显示了正确对齐创建走廊的红色画刷。
4. 既然红色画刷在顶部视图中已经对齐,您还需要在侧方视图中将它对齐。否则,您的走廊底部将会悬在空中几英尺的地方!在Front(前方)视口(右下区域)中,使用平移控件移动红色画刷,使其底部与两个房间的底部相平。
5. 一旦确认了红色画刷的位置,点击CSG: Subtract按钮在两个房间中抠出一个走廊。但是您可能需要将相机拉入其中一个房间为了可以在透视视口中看到此走廊。
图3.12——现在在我们两个房间中有一个走廊了!
制作我们需要的关卡是一件十分复杂的事情。然而,如果现在试图播放此关卡,我们会发现一无所有!这是因为当前在关卡中没有任何光照。在下一指南中,我们将通过在关卡中添加光源解决此问题。
指南3.4——照亮关卡
1. 如果您已关闭了刚才的文件,请打开在上一指南中保存的PrimerMap_01。
[next]2. 创建光源的方法很多。在本例中,我们将使用简单的快捷方法。在俯视口中,按住L键然后在立方体房间的中心左击。这将在房间中央添加一个光源。
3. 现在,您无法看到光源的效果。在透视视口工具栏中,点击Lit(点亮)按钮 ,这样您就可以看到光源的样子了。
图3.14——现在您可以看到光照的结果。
4. 选中该光源,按F4键,打开光源的属性窗口。该窗口被分为几个可展类别。首先,点击Light(光源)类别。在它之下,您将看到叫LightComponent 的子类别。点击此子类别将展开一长列属性,它们会影响到光源的外观与行为。
图3.15——光源属性窗口。
5. 在LightComponent 子类别的设置列表中,设置以下属性(这些属性所起作用的技术性解释将在 第13章 中进行叙述):
- Brightness(亮度): 设置为 0.25
- CastDynamicShadows(投放动态阴影): 选中此框
- LightingChannels(光照通道): 击名称左侧的黑色箭头展开该子类别,并勾选 Dynamic (动态)框
- LightShadowMode(光源阴影模式): 使用下拉框将其设置为LigthShadow_Modulate (调制光源阴影)
完成属性设置后,关闭属性窗口。
6. 现在我们需要此光源的一个副本,用来照亮圆柱体房间。仍然选中此光源,按住Alt键,并在俯视图中使用平移控件将该光源沿X轴向上移动到圆柱体房间中央。在您移动时确保按住Alt键以产生选中对象(此光源)的副本。
7. 选中新复制的光源,按F4键打开其属性窗口。如果需要,再次展开光源类别,然后展开LightComponent 子类别。将 Radius(半径) 属性设置为768。
图3.16——现在两个房间都照亮了。
8. 务必进入主菜单栏的File > Save Current Level,保存您的更改!
现在您的房间已照亮了!这样,就可以很方便地对其测试并环伺其内部进行观察。在下一指南中,我们就要进行此操作!
指南3.5——测试关卡
1. 如果您已关闭了刚才的文件,请打开在上一指南中保存的PrimerMap_01。
2. 在我们真正进入关卡前,我们首先需要编译它。在编辑Unreal关卡时,编译是您要所做最重要的事情之一。它允许UnrealEd将您的几何体、光源以及其它项目编译成一个可运行环境。总而言之,在您测试一个关卡前,您需要将您改变的任何东西重新进行编译。
据此,只要点击Build All(编译所有)按钮 (主工具栏中),这样会一次编译所有内容。对于编译一个如此简单的关卡而言,这应该是一个相对快速的过程。但请记住在您重新编译之前,您可能无法看到关卡的精确显示!
图3.17——Building Map(正在构建地图)对话框显示了您当前构建操作的进度。
3. 一旦全部构建完成,就应该测试您的关卡了。有两种方法来测试关卡。第一种方法是将一个PlayerStart(玩家启动)actor放置在您所希望玩家进 入关卡的位置。第二种方法是简单地点击关卡某处(最好在地面上)并告诉UnrealEd,希望从此处开始播放关卡。对于首次测试,我们将使用第二种方法。
右击立方体房间的底部,并从关联菜单中选择Play From Here(从此播放)。In Editor Game(编辑器内运行游戏)窗口将出现,您可以运行关卡,就像您在游戏中播放它。结束后,按Esc返回编辑器。
注意: 在底部右击后,您在点击Play From Here(从此播放)选项时可以按住Ctrl。这将使您能够以旁观者的身份测试地图,这意味着您的相机可以自由移动,而不是附着于某一角色身上。
4. 现在我们将使用PlayerStart(玩家启动)actor测试该关卡。了解玩家进入该关卡的某个特殊位置,这一点非常重要。右击关卡的底部开始测试。从关联菜单中,选择 Add Actor > Add PlayerStart。
您可以使用平移控件将PlayerStart(玩家启动)定位于您钟爱的位置。注意到从PlayerStart 图标伸出向外的小箭头?这使您能够控制该玩家进入关卡时的方向。使用Rotation Widget(旋转控件)对其自由旋转,这样玩家将按照您的意愿,面对某个特定方向。
图3.18——PlayerStart actor已置于关卡中。
5. 现在进入主工具栏的Build(构建)菜单并选择Play Level(播放关卡),您就可以对该关卡进行测试。如果您在此操作前没有事先添加入一个PlayerStart actor,您将会收到错误信息。
当您完成关卡测试后,按Esc返回编辑器。务必保存您的关卡!
现在关卡中的几何体已经建立完毕,也已经旋转了一些光源,这样我们可以浏览此关卡了。但是,当前我们看到都只是默认材质,并不娱人耳目。在下一指南中,我们将向关卡的墙壁,地面以及天花板添加一些材质,开始真正地改变环境。
指南3.6——向全图几何体添加材质
1. 如果您已关闭了刚才的文件,请打开在上一指南中保存的PrimerMap_01。
2. 在我们向关卡添加材质之前,我们需要打开一个文件包,该文件包目前包含了在创建关卡过程中所需使用的所有材质及网格物体。从主菜单栏中选择View > Browser Windows > Generic 。
图3.19——进入View(视图)菜单您就能够找到Generic browser。
3. 在Generic browser内,从菜单栏选择File > Open。找到PrimerLevel.upk文件,该文件应该已经在运行Unreal安装时从您的DVD复制到Content/Packages文件夹 中去了。如果还没有复制,此文件包在本书配套DVD的本章中的文件包文件夹中。
[next]一旦打开该文件包,它就列在Generic browser左下方的文件包列表中。在它边上是一个小的加号图标。点击它展开文件包,并选择Materials 组。这将对您的Generic browser进行过滤,从而只看到PrimerLevel文件包中的材质。
图3.20——在本图中,您可以看到展开了的Generic browser,仅仅显示所选文件包中的材质。
4. 在透视视口中,引导相机使其位于立方体房间中。然后,使用鼠标左键,点击该房间的一面墙。注意墙已变为蓝色。这表示该表面已选中。
按住Ctrl键的同时,点击立方体房间的所有墙壁及天花板,就能同时选中它们,以及走廊的所有表面,但请排除地面。
图3.21——立方体房间的墙壁当前已选中。
5. 返回Generic Browser,点击mat_wall_plates材质。这将会使该材质应用于所有的选中表面上。如果您现在随便点击其中一面墙壁,就会在透视视口中取消对所有表面的选取,这样就能看到材质应用的效果了。
图3.22——第一个材质现在已应用于立方体房间的墙壁上。
6. 选择立方体房间的地面,并在Generic browser中点击 mat_wall_screws ,将其应用于地面。也将此材料应用于走廊的地面。
7. 进入圆柱体房间,并选择所有的墙壁以及天花板。您可以只选择一面墙壁,然后按下Shift-B作为快捷键选择所有与此画刷一致的表面。然后,按住Ctrl并点击地面取消选对它的选取,只保留墙壁与天花板的选取。
一旦选中这些表面,进入Generic browser并点击 mat_stone_mossy 材质将其应用于表面之上。
8. 使用您学得的技巧,将 mat_stone_dark 材质应用于圆柱体房间的地面上。
图3.23——已应用材质的圆柱体房间。
9. 测试您的关卡,结束时请务必保存!
我们的关卡正在开始真正成型!有了墙壁,有光源开始发光,而且我们还在墙壁上添加了一些"画"。然而,总体看上去仍然是乏味的。我们需要在关卡中放置一些东西,为它添加更多的特性。在下一指南中,我们将开始用静态网格物体丰富我们的关卡,这些静态网格物体是从外部3D应 用程序如3ds Max 或者Maya构建的模型。据此目的,这些网格物体创建完成了。如果您想获得更多关于创建静态网格物体的知识,请参见 DVD中包含的静态网格物体创建教学视频 。 关于静态网格物体的技术信息,请查阅 第XX章: 静态网格物体 。
指南3.7——在关卡中放置静态网格物体
1. 如果您已关闭了刚才的文件,请打开在上一指南中保存的PrimerMap_01。
2.选择View > Browser Windows > Generic。确保您已经加载PrimerLevel.pkg文件,该文件包含在教材相关DVD中的本章的文件包文件夹中。
从Generic browser左边的文件包列表中,确保您已经展开PrimerLevel 文件包,这样您就可以看到它内部的Meshes(网格物体)组。
3. 点击PrimerLevel 文件包中的Meshes(网格物体)组, 您将看到该文件包中所有的静态网格物体出现在浏览器中。现在我们将其中一个网格物体放置于场景中。点击浏览器中的 sm_pipe_straight 网格物体。要将该网格物体放置于关卡中,必须在浏览器中选中。
图3.24——Meshes(网格物体)类别被选中,Generic browser将只显示包含在文件包中的静态网格物体。
4. 在透视视口中,引导相机进入大的立方体房间。右击靠近墙壁的地面(具体是哪面墙没有关系,虽然之后可能需要对一些对象进行旋转调整,使其面向房间中心)并从关联菜单中选择以下内容: Add Actor > Add StaticMesh: StaticMesh PrimerLevel.Meshes.sm_pipe_straight 。放置选中的静态网格物体于鼠标右击的位置。确保在俯视口中该网格物体距离墙壁大约32个单位(两个网格的距离);如有需要,用平移控件移动该网格物体。
注意: 根据您当前在Generic browser中选中的静态网格物体的不同,关联菜单中的Add StaticMesh: 选项将发生改变。
图3.25——第一个静态网格物体已放置,看上去是一根从地面竖起的垂直管道。
5. 接下来,在Generic browser中选择 sm_pipe_joint mesh 。调整您的透视相机位,可以看到刚刚添加的垂直管道的顶部,以便于置放。右击该网格物体末端的上表面并从关联菜单中选择 Add Actor > Add StaticMesh: StaticMesh PrimerLevel.Meshes.sm_pipe_joint 。将一个小的接头网格物体放置在管道的最顶部。
如有需要,在俯视口(左上区域)中移动该接头网格物体,确保它与管道网格物体对齐。您可能还需要在侧视口或者前方视口中确认该接头网格物体是否正好垂直放置在管道顶端。
图3.26——在此您可以看到接头网格物体已正确放置于垂直管道网格物体的顶端。
6. 在Generic browser中选择 sm_pipe_corner 静态网格物体,右击您刚刚添加的静态网格物体的顶部,并从关联菜单中选择 Add Actor > Add StaticMesh: StaticMesh PrimerLevel.Meshes.sm_pipe_corner 将此静态网格物体添加到地图中。
[next]该网格物体应该正好出现在接头网格物体的顶部,尽管您可能需要旋转使其背朝墙壁。要进行此操作,选择位于工具栏中的旋转控件 。然后,只要拖曳蓝色旋转轴(Z 轴) 旋转该网格物体,直至它指向房间内部。
注意: 按住Ctrl,您能够全选三个网格物体,然后将它们作为一个整体进行旋转。
小技巧: 敲击空格键,可以在平移,旋转及缩放控件之间切换!
7. 如果您立刻点击Build All(编译所有)按钮 , 您将注意管道网格物体还没有影子。这是因为阴影是基于surface-by-surface(面到面)计算的,而网格物体后墙壁表面的阴影分辨率不够锐利。主要是因为阴影散射过多而无法再将其表现出来。现在需要进行如下修改:首先点击网格物体后面的墙壁,使其蓝色高亮显示, 然后按下F5键, 打开Surface Properties(表面属性)对话框。
图3.27——当您按下F5键时,Surface Properties(表面属性)对话框就出现了。
8. 在Surface Properties(表面属性)对话框中,找到Lighting(光照)组,然后从Lightmap Resolution(光源影射分辨率)下拉框中,选择值8.0。这将锐化管道网格物体后的阴影,使其可见。完成后点击"Build All"(编译所有)按钮 查看效果。
图3.28——在此您可以看到Lightmap Resolution(光源影射分辨率)下拉框展开了。
Lightmap Resolution(光源影射分辨率)属性看上去有反常识,因为您选择的值越小,阴影就越锐利。思考一下以Unreal单位数值计算的单点阴影的数值。因此较小的数值将加强阴影。同时,更少的阴影点要求放置更多的点去创建一个连续的阴影。这就意味着较低的Lightmap Resolution(光源影射分辨率)设置要求更高的处理能力并可能拖慢您的关卡性能。一定要小心不要对过多的表面进行此操作!
9. 现在可以测试您的关卡。完成时请务必保存您的工作!此外,如果愿意,您可以随意添加该网格物体的多个副本,用一系列连通的管道来丰富您的空间。
图3.29——请注意管道后的阴影现在已经可见。
我们已经将第一个静态网格物体放置在关卡中,但是我们可以做得更好。在一个真实关卡中,您通常会放置许多静态网格物体贯穿于整个场景。通常的想法是:您的关卡的基本布局部分用世界几何物体创建,而实际的丰富细节及组装的对象都用静态网格物体创建。自然,您可以在您的关卡中有上百个静态网格物体。然而, 基于静态网格物体是如何计算的性质,同一网格物体的多个实例仅仅比一个实例对处理能力的要求略微提高。这意味着您可以在一个关卡中放置一个网格物体的很多备份而不会为您的电脑带来巨大的开销。
我们还有更多的一些网格物体。在下一指南中,我们会将剩下的静态网格物体放置在关卡中,包括当我们接近时就会打开的门。
指南3.8——添加走廊网格物体
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。现在我们将添加走廊网格物体,用来包围分隔两个房间的门。
2. 打开Generic browser,展开PrimerLevel文件包,并选择Meshes组。点击sm_doorway静态网格物体。
3. 在透视视口中,在两个房间当中的走廊中间点右键 。从关联菜单中选择以下内容: Add Actor > Add StaticMesh: StaticMesh PrimerLevel.Meshes.sm_doorway 。将走廊网格物体放置于走廊中,可能需要对齐。在前视口中使用平移控件走廊网格物体与走廊完全贴合。同时在透视视口中务必确认与之对齐。
注意: 如果您是在不同方向创建了房间,即在俯视口中查看时,它是边到边而不是由上到下的移动,那么您可能需要通过使用旋转控件来旋转走廊网格物体90度,使其与走廊完全贴合。
图3.30——正确放置关卡中的走廊网格物体。
4. 点击"Build All"(编译所有)按钮 ,确认您的关卡显示出正确的光照及阴影。
5. 保存并测试您的地图。
注意: 我们还没有在走廊中放置能够打开与关闭的真实的门。不要因为已经放置了一个静态网格物体而试图跳到下一步骤!稍后我们将使用不同的actor类型创建一个真实的门,该actor类型能够产生真实门的动画!
现在我们已经将所有的静态网格物体放置此简单关卡中。下面我们将在走廊中添加一些简单的重点光照,使得需要发光的区域看上去确实是在发光。目前,它们仅仅依靠材质的发光效果发出橙色光,但是在关卡中还没有任何光源的存在。如果希望它们发光,我们必须通过有策略地放置一些重点光源"模拟出"该效果。
指南3.9——在走廊网格物体周围放置重点光照
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。现在我们将添加走廊网格物体,它用来包围隔开两个房间的门周围。
2. 在透视视口中,引导相机使您靠近走廊网格物体。接下去,在按住L键的同时,左击走廊网格物体左上角的发光橙色楔状物体。这将在该形状的表面创建一个新的光源。
图3.31——您的第一束重点光源就位。
3. 使用平移控件,将该光源移离走廊网格物体几个单位。精确并不是真正考虑的因素,所以只要将其拉出,使得该图标不是正好位于表面上,但是不要太远,这样光照效果会被破坏。大约32个单位应该够了。
4.保持该光源被选中,按 F4打开属性窗口。展开Light标签与LightComponent 类别,然后设置以下属性:
[next]- Brightness(亮度): 0.25
- CastDynamicShadows(投放动态阴影): 点选此框
- LightColor(光源色彩):
- B: 91
- G: 198
- R: 255
- LightingChannels(光照通道): 展开并点选Dynamic复选框
- LightShadowMode(光源阴影模式): 调制光源阴影
- Radius(半径): 96
5. 按住Alt,使用平移控件复制出一个副本并移动其平移穿过走廊到另一边, 这样就在相反的发光楔状物前创建了一个光源副本。
6. 按住Ctrl并将两束新光源一起选中,然后,按住Alt的同时,将它们向下拖曳,同时在底部楔状物前创建两个的副本。
图3.32——现在您可以看到该光源的全部四个副本。
7. 现在,再次按住Ctrl并选择上面的两束光源,这样您就选中了所有的四束光源。然后再次按住Alt,在俯视口中移动光源穿越走廊,在走廊相对的一边创建光源的四个副本。
8. 点击Build All"(编译所有) 按钮,为新光源重新计算光照。然后测试并保存您的地图。
重点光源是逼真的关卡中的一个重要方面。在关卡中恰当运用能够产生光晕效果的材质发光,是强而有力的工具。然而,添加光源创建实际的照明可以使您的关卡看上去更接近于现实。在接下去的几个指南中, 我们将通过以蒸气形式粒子效果,来丰富现有的关卡!
粒子是一种可以在空间中创建各类效果的点,其效果可以从蒸气、烟雾、火焰、灰尘甚至到碎片!粒子设置在Unreal中可以非常简单,也可以变得异常复杂。但是,在此入门章节中,我们只讲解最基础的东西,并把所有的深入讨论保留到 第X章: 粒子效果中 。
指南3.10——创建您的第一个粒子发射器
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。现在是用一些粒子效果来装饰我们的关卡的时间了!
注意: 随着您逐步深入本指南,请记住,在很多时候您可能看到的不是粒子的真实样子。在您能够开始查看效果前,需要添加和设置许多属性。事实上,只到深入到下一指南之前,您可能根本不会真正地看到任何粒子效果!
2. 打开Generic browser,右击预览窗口的空白区域。打开一个对象创建关联菜单,从中选择" New ParticleSystem "(新建粒子系统),然后New Object(新建对象)对话框出现了。
图3.33——具有关联菜单的预览区域。
3. 在"新建对象"对话框中,确认作为文件包名PrimerLevel可见,然后键入Emitters作为组名称,以及part_steam作为名称。完成后点击OK。
图3.34——已填入合适字段的"New Object"(新建对象)对话框。
UnrealCascade (简称为Cascade) 粒子系统编辑器将出现, 您的新粒子系统已经加载完毕并可以开始编辑。要深入查看Cascade 界面,请参阅 UnrealEd 用户手册 。
图3.35——Cascade粒子编辑器界面。
4. 右击Emitter列表 (Cascade 编辑器右上黑色区域) 并从关联菜单中选择New ParticleSpriteEmitter。出现一个新的粒子发射器节点。这是真正将粒子发射至我们关卡中的对象,而且也是我们在创建各种效果时必须编辑的对象。
图3.36——一个新的粒子发射器已经就绪并可以进行编辑了。
5. 在发射器列表顶部点击选中粒子发射器节点。变为橙色表示被选中,您还将注意到它的属性出现在Cascade编辑器左下的属性区域内。我们将开始向发射器添加材质。
在Cascade窗口的属性区域点击材质特性,并点击"Show Generic Browser"(显示Generic Browser)按钮 显示Generic browser。展开PrimerLevel文件包,并选择mat_steam材质。返回Cascade编辑器,点击"Use Current Selection in Browser"(使用浏览器当前已选项)按钮 将该材质应用于您的粒子。
图3.37——在本图中您可以看到Use(使用)按钮被高亮显示。
6. 我们需要在发射器上设置各类属性,以获得预期效果。在属性区域,展开RequiredModule类别,并进行如下操作:
- 展开SpawnRate(生成速率),之后展开Distribution(分布)子类别。在其中,将Constant(常量)设置为25。使得发射器每秒发射25个粒子。
- 将InterpolationMethod(插值方法)设置为 PSUVIM_Linear_Blend 。这样做是因为蒸气贴图是由几幅不同图像组成的,而且这将使得粒子按顺序在不同图像间混合。
- 将SubImages_Horizontal(子图像水平值)与SubImages_Vertical(子图像垂直值)属性都设置为2。这是由于多幅蒸气贴图的图像放置于2x2的网格中。
7.您需要保存目前的进展。但是,您只是更改文件包,而不是地图。您可以打开Generic Browser,选择PrimerLevel文件包,并从浏览器的菜单栏中选择File > Save……完成此操作。
我们现在已经创建了发射器,但是为了获得预期效果,还需要设置许多属性。在粒子系统中有很多属性可供选择,然而我们必须添加需要应用于发射器各种属性。如果对一个发射器应用全部的属性,其属性列表的长度将无法控制!在Unreal中,在粒子系统上执行特定功能的属性组被称为模块。有些模块已经存在于默认的粒子系统中,其它的则需要添加。在下一指南中我们将设置发射器中的默认模块,之后我们将添加新模块。
[next]指南3.11——建立基本发射器模块
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
- 打开Generic browser, 并展开PrimerLevel文件包。
- 点击Emitter组。
- 双击part_steam发射器。
2. 我们从对已添加于粒子系统的基本模块设置其属性开始。在发射器列表(Emitter List)(仍然位于右上区域),点击Lifetime模块。该模块的属性将出现于左下属性区域内。在Distribution(分布)类别下设置以下属性:
- Min(最小) 至1.25
- Max(最大) 至2.0
图3.38——属性区域所见的Lifetime(生命期)属性。
3. 返回Emitter List,选择Initial Size(初始大小)模块,并在分布特性中设置以下属性:
- Max(最大) X,Y和Z 至150.0
- Min(最小) X,Y和Z 至75.0
图3.39——"Properties"(属性)区域中所见的"Initial Size"(初始大小)属性。
注意: 当您执行此步骤时,您将在预览窗口中看到粒子系统开始出现了!
4. 现在选择"Initial Velocity"(初速度)模块,并设置如下属性:
- 最大X和最大Y: 40
- 最大Z: 200
- 最小X和最小Y: -40
- 最小Z: 175
5. 保存您的文件包。
现在我们的基本模块已经设置完成,但是要达到预期效果,所需要的不仅仅发射器附带的基本模块。在下一指南中,我们将向我们的粒子系统添加一些模块,并为每一模块建立相应的属性。
指南3.12——增添附加发射器模块
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
2. 现在我们将添加第一个模块。在Emitter列表中,右击Initial Velocity模块下的空白处。从关联菜单中选择 SubUV > SubImage Index 。把SubImage Index模块添加到列表中。确保选中新建模块,然后在Properties区域,设置如下属性:
- 点击Distribution类别。蓝箭头 Create A new Object(新建对象) 按钮 (请仔细看,非常小)将出现在属性区域的远端右侧,点击之。从关联菜单中选择 DistributionFloatConstantCurve 。这样将创建一个曲线,粒子系统将读取该曲线,以控制粒子图像相互混合的方式。通过向此曲线添加"点"并控制各点的值,能够控制曲线的形状。
- 展开新的Constant Curve类别,然后点击points边上的省略号("…")。" Add New Item "(新建项)按钮 将出现于右侧远端。点击两次。这将向您的常量曲线添加两个点,命名为[0]与[1]。
- 展开点[1]并将InVal属性设为1.0,然后将OutVal属性设为3.0。
图3.40——在此您可以看到已添加了DistributionFloatConstantCurve。
3. 返回Emitter列表,右击SubImage Index模块下的空白处。从关联菜单中选择Size > Size By Life。添加一个新的Size By Life模块于列表中。
注意: 当您进行此操作时,将注意到在预览窗口中的粒子消失了。不用着急,这完全正常。因为现存的粒子还未被指定大小。
4. 与SubImage Index的操作一样,点击Distribution类别,然后点击"Create A new Object"(新建对象)按钮 。从关联菜单中选择 DistributionVectorConstantCurve 。像之前一样,现在已经创建了一个内部曲线,控制了于其生命周期内粒子从一个尺寸至另一尺寸的流动方式。这次的曲线变得复杂得多,带有更多的点。
在Distribution类别中,完成下列步骤:
- 展开新创建的ConstantCurve 类别。
- 点击Points类别中的省略号("…"记号)。再次显示"Add New Item"(添加新项)按钮 。点击该按钮四次向曲线添加四个点。
- 展开point[0]。展开OutVal类别。设置 OutVal 的 X , Y , 与 Z 的属性至0.2。
- 展开point[1]并设置InVal至0.6。展开 OutVal 类别,并对 OutVal 的 X , Y , 与 Z 属性至1.5。
- 展开point[2]并设置InVal为0.85。展开 OutVal 类别,并对 OutVal 的 X , Y , 与 Z 属性至0.75。
- 展开point[3]并设置InVal为1.0。展开 OutVal 类别,并确认 OutVal 的 X , Y , 与 Z 属性为0.0。
注意: 当您完成这些步骤,可以看到您的粒子系统又在预览窗口中开始工作了。
图3.41——Cascade中所见的蒸气粒子系统的最终状态。
5. 现在您可以关闭Cascade窗口。保存当前的文件包进度。
至此您已经创建了粒子发射器, 尽管目前它还不在您的关卡中。这是创建粒子的标准工作流;您将使用Cascade窗口创建您预期的效果类型。当您完成后,发射器已放置于关卡中,以真正将效果添加于关卡中。在下一指南中,将完整进行此操作。
指南3.13——将蒸气发射器置于关卡中
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
2. 在Generic browser中,打开PrimerLevel文件包并选择Emitters组。现在您应该在预览窗口中看到 part_steam emitter 。确保选中之。
[next]3. 在透视视口中,右击现在指向房间内的管道拐角末端。从关联菜单中选择 Add Actor > Add Emitter: part_steam ,将此发射器放置于关卡中。
图3.42——发射器图标就是五个紧邻的小点。
4. 此时,您可能无法在视口中看到发射器的效果。您可以点击位于视口工具栏最左侧的"Real Time"(实时演算)按钮 来解决此问题。
图3.43——现在我们的管道网格物体看来正在释放蒸气!
5. 保存并测试您的关卡。作为一项挑战,看看您是否能够调整粒子系统的必要值,使得蒸气能从管道向外喷出并上升!在此给出一个提示;您可以从Initial Velocity模块开始!如果您做出任何更改,务必保存您的文件包!
为创建一个如此基本的关卡我们走了很长的一段路,但是在结束前,仍然有许多元素要添加。下一步骤是在走廊中添加一扇能够真正打开与关闭的门。这将用 到Matinee(如果您使用过老版本的Unreal,可能会在创建游戏中影片及脚本序列时记起它)以及Kismet,Unreal Engine 3.0中的新型可视事件脚本系统。
指南3.14——添加一个InterpActor(Mover)与触发
器
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
2.创建穿越关卡移动的对象的第一个步骤是添加适当的网格物体。然而,不是将它添加为不会运动的静态网格物体,我们将其添加为 "Interpolation actor"(通常称为"mover")。使其通过使用Matinee系统中指定的动画达到在空间中移动的目的。 在Generic browser中展开PrimerLevel软件包并选择Meshes组。
在Generic browser中展开PrimerLevel软件包并选择Meshes组。
图3.44——PrimerLevel文件包中所有的网格物体都显示了出来。
3. 选择 sm_door 网格物体。在透视视口中,右击走廊内或者附近的地面并从关联菜单中选择Add Actor > Add InterpActor: StaticMesh PrimerLevel.Meshes.sm_door。这将赂您的地图添加一个InterpActor而不是静态网格物体。
4. 在俯、前方和侧视口中分别使用平移控件,确保门网格物体与走廊正确对齐。需要时使用旋转控件将门旋转90度。
图3.45——走廊网格物体已正确放置。
5. 为了使其表现正常而不出现问题,我们需要对门进行一些设置。在您的视口中选中门mover的情况下,按下F4并进行如下设置:
- 展开 DynamicSMActor 标签。然后展开 StaticMeshComponent 类别。在Lighting标签下,将 bCastDynamicShadow 设置为false(未点选)。这将避免门在打开时穿越墙壁投射出一个阴影。
- 关闭 DynamicSMActor 标签。打开Collision 标签。
- 确认在下拉列表中CollisionTyper设置为COLLIDE_BlockAll。这将确保玩家不能够穿透此门。
- 关闭属性窗口。
6. 现在我们必须添加引起门打开的"开关"。在Unreal中,这样的开关叫做触发器(Triggers)。和光源一样,它们存在于关联菜单中的Add Actor中。
在门网格物体中央右击并选择 Add Actor > Add Trigger 。于关卡中新建了一个触发器。
图3.46——在此您可以看见触发器已添加至房间中央。
7. 选中Trigger,按F4打开触发器的属性窗口(Properties Window)。展开Trigger标签,然后展开CylinderComponent类别。
将 CollisionHeight (碰撞高度) and CollisionRadius (碰撞半径) 属性都设置为96.0。
8. 选中触发器并使其在俯视口中可见,按C键显示触发器的碰撞几何体。然后,使用平移控件沿投影视口将触发器放置于门的正中央位置。确保碰撞几何体从门的两侧都突出来。
注意: 碰撞几何体的可见性在每个视口中都是独立的。这意味着如果在一个视口中按C键打开,而在其它视口中没有按C键的话,是看不见的。可以通过再次按下C键将其关闭。
图3.47——如果正确地放置了触发器,其碰撞将会从门的中央平展出来。
9. 保存您的关卡。
我们的InterpActor与触发器已经放置在关卡中了。但是,在门进行实际工作前,我们还需要两个元素使效果动起来:一个Kismet序列,以及一个Matinee 序列。从本质上说,Matinee将"侦听"触发器的输入动作(在这种情况下,玩家已经键入了碰撞半径)。然后Matinee将告诉InterpActor需如何动作。然而,整个信息交换过程在没有Kismet序列的帮助情况下是不可能实现的。在下一指南中,在您创建第一个基本序列时,我们将介绍Kismet,用以加入到适当的Matinee动画与其联系起来。
简而言之, Kismet就是一个可视的脚本系统,允许您仅通过连接一系列节点进行联网工作,就能够创建出复杂的事件。当深入到序列中时,您将发现自己正在创建越来越复杂的节点网络。请记住,关于如何在Kismet中创建各种序列的问题可以很容易就发展成一整本教科书。但是,在本指南中,我们将创建其中最简单可行的序列之一。
指南3.15——创建第一个Kismet序列
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
[next]2. 点击UnrealEd界面顶部主工具栏上的"Open Kismet"(打开Kismet)按钮 ,打开UnrealKismet (简称为Kismet)编辑器。我们将在编辑器内创建Kismet序列。
图3.48——Kismet编辑器界面。
3. 确认在关卡中选中触发器,然后在主工作空间右击(占据Kismet窗口上部的大区域) 并从关联菜单中选择 New Event Using Trigger_0 > Touch 。这将新建一个Touch序列对象并自动关联到Trigger_0中。
图3.49——一个新的Touch 序列对象已经创建。
4. 浏览Kismet工作空间,调整Touch序列对象位于窗口左侧。然后在Touch序列对象右侧空白区域右击并从关联菜单中选择 New Matinee 。
图3.50——现在的Matinee序列对象是可见的,该对象紧邻原始Touch序列对象旁边。由于这些连接方向为从左到右,将它们对齐会使得连接变得更为容易。
5. 将您的鼠标移动过紧邻Touch 序列对象上的Touched 输出属性柄,使其黄色高亮显示。然后,按住鼠标左键拖曳,将来源于Touch 序列对象上的Touched 输出与Matinee 序列对象的Play输入属性用一条"线"来连接。这意味着Matinee序列将在触发器被碰触时进行"播放"。实际上,这意味着一旦玩家步入触发器的碰撞半径,门就打开了。
6. 使用步骤5中的技巧,将来自Touch 序列对象UnTouched输出特性与Matinee 序列对象的Reverse 输入属性用线连接。此连接设定后,一旦玩家不再碰触触发器, Matinee动画将倒回(或者回放)。现在当玩家离开时,门会自动关闭。
图3.51——被"线接"在一起的两个序列对象。
7. 最后,选择Trigger_0 Touch序列对象,并在属性区域中将MaxTriggerCount属性设置为0。这样触发器能够进行无数次触发,因此使得此门在玩家身后关闭并在其再次接近时仍然打开。
8. 保存关卡的当前进度。现在无须对地图进行测试,因为没有进行过任何可播放的更改。
我们已经在关卡中建立了InterpActor,并通过使用Kismet设置一个序列,使得当玩家碰触触发器时,发生某一事件。然而,我们还没有完全设定具体的发生事件。在下一指南中,我们将用Matinee来设置InterpActor,使得当Kismet序列触发时,门会进行移动。
指南3.16——用Matinee设置InterpActor
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
2. 在Kismet编辑器中,双击Matinee对象。打开Matinee编辑器,该编辑器非常类似于一个非线性视频编辑器环境。
图3.52——Matinee界面。
注意:非常重要!在一个视口中,确定您已经选中了mover (通过紫色线框可以确认)。如果您的mover没有选中,下一步骤将不能正常进行!
3. 右击Group列表(位于Matinee窗口左上区域中的宽浅灰色栏)。从关联菜单中,选择" Add New Group "(新建组)。将弹出一个命名对话框,为此组命名为 SteamRoomDoor 。
图3.53——您可以看到新建组已经出现在界面的左上角。
4. 接下去,右击 SteamRoomDoor 组并从关联菜单中选择" Add New Movement Track "(新建移动轨迹)。
图3.54——一个新建行动轨迹现在已经添加到该组中。
5. 在Matinee窗口中,选择新建的Movement track。然后,您需要在Matinee轨迹区域底部运行的有数字覆盖的灰色条上拖动,将时间滑块设置为0.0。
注意: 起初您可能看不到时间滑块。只要沿标尺上的任意位置点击并拖动鼠标,并确认左侧绿色文本随时间滑块的移动更新为新位置。结束时,确保将时间滑块设置回0.000/5.000。
图3.55——时间滑块跨越了轨迹视图的底部。
时间滑块位于0.0时,点击"Add Key"(添加关键帧)按钮 ,在此时间点上设置一个关键帧。为了使门具有动画效果,现在我们需要第二个关键帧。
6. 将时间滑块移动至1.0并点击"Add Key"(添加关键帧)按钮 ,设置第二个关键帧。但是,由于第二关键帧只记录了门的同一位置,而门仍然没有运动。从效果上讲,相当于我们将门的动画设置为在1秒钟内保持静止状态。
图3.56——两个关键帧以指向朝上的小三角形式出现。
7. 在运动轨迹位于时间指数为1.0时,点击同一行中的橙色小三角形,选中新建的第二关键帧。在透视视口左下角应该有 ADJUST KEY 2 字样。
在俯视口中,将门向左移动128个单位(如果您的Drag Grid(拖曳网格) 仍然设置为16,则此距离就是8个网格)。现在您已经记录了第二关键帧的新位置,这样门的动画就设置为在1秒钟内进行打开。
图3.57——在此透视视口的截图中,您可以看到门已经被移动到打开位置。注意左下角的提示,我们正在调整第二关键帧.
8. 保存您的地图并进行测试。现在门在您接近的时候打开,而在离开的时候则关闭。如果您移动得过快,会发现门仍然会阻止您进入,直至其完全打开为止。
现在我们的门在关卡中已经能起作用了。对于使用过老版本的Unreal用户而言,仅仅为了把门打开这一简单动作就费了九牛二虎之力,但是此新系统对比老版本的优势在于,它可以提供多种新的功能。而且,一旦您学会此工作流,对mover的设置将会是小菜一碟了。
[next]在下一指南中,我们进一步通过添加一些能与玩家互动的动态对象,并根据对现实世界中物理现象的模拟推倒它们。这是一个两步走的过程。首先,我们将设置物理对象,然后再对其应用一个物理材质,此物理材质控制其对象对外部作用力的反应方式。
指南3.17——创建物理对象
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
2. 在Generic browser中,展开PrimerLevel文件包并打开Meshes组。在Generic browser中选择 sm_crate 网格物体。
3. 在透视视口中浏览立方体形房间,然后右击地面某一点并选择 Add Actor > Add RigidBody: StaticMesh Basic_Room.Meshes.sm_crate 。将箱子作为刚体添加,此箱子是一个特殊的actor,可以对外部作用力做出反应。
图3.58——关联菜单中的添加刚性物体选项。
4. 按住Alt,使用平移控件复制出第一个网格物体副本并将其紧贴原始物体安放。重复该过程直至产生四个盒子相邻成直线,如下图所示。
5. 使用相同技巧选取前三个盒子,复制出三个排成直线的盒子,置于第一行顶部。然后再重复复制第二行的前两个盒子,之后是单独的一个盒子。如图所示创建一个由10个盒子组成的金字塔。
图3.59——盒子以金字塔形堆放。注意对一些盒子进行单独旋转,使得此堆放更具个性。
6. 完成该金字塔的建立后,选中所有的箱子并将它们作为一个整体进行移动和/或旋转,使其位于走廊前方,以阻挡玩家进入圆柱体房间。
7. 保存您的关卡。
既然我们已经放置了物理对象,我们需要控制其对外力作用的反应,比如玩家与其发生碰撞或者移动它们时的作用力。在下一指南中,我们将应用一些实际控制刚性物体的物理材质。
指南3.18——创建并应用一个物理材质
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
2. 打开Generic browser。在预览窗口的空白区域右击, 并从关联菜单中"New PhysicalMaterial"(新建物理材质)。打开"New Object"(新建对象)对话框。键入下列值:
- Package(文件包): PrimerLevel
- Group(组): Physics
- Name(名称): physMat_crate
图3.60——正确设置"New Object"(新建对象)对话框。
3. 这将创建一个新的物理材质并显示当前属性进行编辑。从中设置以下值:
- Density(密度): 0.25
- Friction(摩擦): 0.5
4. 确认在Generic browser中仍然选中physMat_crate材质, 然后在透视视口中全选10个箱子。按F4打开其属性窗口。设置以下值:
- 展开 DynamicSMActor 标签。然后展开 StaticMeshComponent 。
- 进入Physics部分并点击 PhysMaterialOverride 属性旁边的字符"None"。在窗口的右侧远端点击Use(使用)按钮 ,将physMat_crate 材质应用到所有的箱子上。
图3.61——现在能够在关卡中与箱子进行物理互动!
5. 保存您的文件包,然后保存并测试您的地图。走向箱子并按住鼠标右键,您可以举起这些箱子。如果您快速移动鼠标并在中途放开鼠标右键,就可以将盒子抛出房间!尽情享受乐趣吧!
既然我们已经在关卡中放置了一些物理对象,那么只需再添加一项效果就可以完成我们这一简易的关卡设计了。我们将放置一些高度雾效果,以赋予关卡一种朦胧的感觉。
指南3.16——将高度雾添加至关卡中
1. 继续上一指南,或打开在上一指南中保存的PrimerMap_01。
2. 在主菜单栏中选择View > Browser Windows > Actor Classes。打开Actor类浏览器,向您列出一个完整的可用于关卡中的所有actor列表。
图3.62——Actor类浏览器界面。
3. 在Actor类浏览器中,展开Info并选择HeightFog。
4. 右击立方体形房间的地面并从关联菜单中选择"Add HeightFog Here"(在此添加高度雾)。在点击的位置放置高度雾。
5. 双击HeightFog actor图标打开其属性窗口,然后进行以下操作:
- 展开 HeightFog 标签,然后展开 Component 类别。
- 将 Density 属性设置为0.0015
图3.63——HeightFog 属性窗口。
6. 使用平移控件将HeightFog actor移动至您希望的雾化起始高度。将它移动到屋顶将会使得整个房间充满雾。或者可以使其停留于靠近地面的地方。请随意调整密度。
图3.64——请注意HeightFog图标处于真实雾的顶部。将它向上移动将增加雾化等级。
7. 保存并测试您的关卡。
这样,您的基本关卡就完成了。但是本章为何在此停止了?本章末尾的几个指南已经向您展示了很多东西,只要您对生活中观察到的事物进行实验,您就已经能够创建出一些引人入胜的关卡了!
图3.65——这就是我们的测试关卡,只是单纯依照本章教程所述的一系列元素制作出来的。
贯穿本书剩余的部分,我们将进一步扩展与补充本章所陈述的概念。然而请记住,本指南中学得的所有技巧都是至关重要的,它们能使大家加快对本书剩余章节的理解步伐。
,
评论