Blender 3D: 从新手到高手/迷宫游戏引擎教程
适用 Blender 版本:2.49。 |
本教程旨在以游戏的形式,对 Blender 游戏引擎进行中级介绍,它是平台游戏:创建与控制的续篇。它需要你熟悉 Blender 的 UI,简单的命令(比如用AKEY选择)和基本的建模技能。我们将在 Blender 中创建的游戏将具有以下特性
- 一个由 WASD 键控制的主角
- 一个没有墙壁的迷宫表面
- 掉出迷宫会死亡
- 多个关卡
- 动态障碍物
- 迷宫中有一个目标,它会把你传送到下一关
本教程是为 2.44 版本编写的,并且已在所有更高版本(截至 2008 年 4 月)中测试过
现在我们来制作迷宫。当你创建迷宫表面的路径时,请记住你需要一个起点和一个目标。
- 清空场景;选择所有(AKEY),删除选定项目(XKEY → ENTER)
- 进入顶视图 (NUM7)
- 添加网格 (SPACE → 添加 → 网格 → 网格) 具有 X 和 Y 分辨率为 16
- 将网格缩放 24 倍 (SKEY,输入 24,ENTER)
- 选择网格后进入编辑模式 (TAB)
- 进入面选择模式 (CTRL+TAB → 面)
- 开始选择面以制作二维迷宫(使用BKEY绘制选择框)
- 选择面后,复制这些面 (SHIFT+D,RMB)
- 将这些面移开原始网格 (GKEY 或移动小部件 CTR+ALT+GKEY)
- 删除原始网格
- 使用GKEY或在编辑按钮 (F9) 的“网格”面板中按下“居中”按钮来居中迷宫
你现在应该有一个二维迷宫。在游戏引擎中,我们只看到每个面的一个侧面,所以这个迷宫从下面看时将不会出现,而从迷宫表面本身看时将明显是二维的。这是不可取的,因此我们将通过向下挤出迷宫表面来使我们的迷宫三维化。
- 进入侧视图 (NUM3)
- 选择所有面 (AKEY)
- 向下挤出,-1 个单位 (EKEY → 区域),按住 CTR 以限制为 1 个单位增量,或者手动输入值 -1,就像你在开始时缩放网格一样。
- LMB 接受操作,或 RMB 取消面的移动。如果你取消了它,面将会挤出,但只是不会移动。你可以撤销操作 (CTRL+Z),或删除你已挤出的顶点/面 (WKEY → 移除重复)。
你的迷宫现在已经完成了,只缺少一个被困在里面的人……
我们将创建一个非常基本的角色,足以说明本教程中要传达的概念。你可以根据自己的意愿制作一个复杂或基本的角色,但重要的是始终在你的主角上有一个方向指示器,否则玩家可能会感到困惑。所以,我们将使用一个带有“鼻子”的原始体(即一个从对象中心挤出的面或顶点,以便提供一个旋转参考点)。在本教程中我将使用一个圆锥体,仅仅因为它们不太容易滚动。
- 进入顶视图 (NUM7)
- 添加圆锥体 (SPACE → 网格 → 圆锥体,使用默认值)
- 选择圆锥体并进入编辑模式 (TAB)
- 进入面选择模式 (CTRL+TAB → 面)
- 选择圆锥体侧面上的一个面
- 将它挤出大约 1/4 个单位或更少 (EKEY)
- 合并挤出的面以使鼻子尖锐 (WKEY → 合并 → 在中心)
- 进入对象模式 (TAB)
- 旋转圆锥体,使鼻子与正 Y 轴对齐 (RKEY,与绿色箭头对齐)
你现在已经有了你的角色(不是那种皮克斯风格的,但目前够用了)。现在我们只需要给它动力。
注意:从第 8 点到第 9 点,似乎圆锥体应该旋转,使其“鼻子”与对象模式下的 Y 轴对齐,但在完成此操作后,我发现圆锥体仍然在原始 Y 轴方向(在旋转之前)移动。为了解决这个问题,我改为在编辑模式下进行“鼻子”与 Y 轴的对齐,这似乎解决了问题。
现在我们将通过使用 WASD 键来使角色移动。为了做到这一点,游戏逻辑需要与 WASD 键相关联。复制屏幕截图中看到的配置,注意要包括左上角的凸包多面体碰撞,以及按下“L”按钮,这使得力矩和转矩相对于该对象而不是全局的。如果力是全局的,主角将继续沿直线移动,即使转弯也是如此。
- 转到逻辑按钮(紫色吃豆人图标或F4)
- 添加四个传感器、控制器和执行器。
- 最大化逻辑窗口 (CTRL+UPKEY)
- 复制下面屏幕截图中看到的配置。
(注意:我使用 Actor->Dynamic 进行模拟,因为在 2.49b 中无法同时使用动态和刚体。经过一些测试,它似乎运行正常。)
dLoc/dRot 与 力/转矩
本教程中的角色逻辑与之前平台游戏逻辑非常相似,但不同之处在于它使用力矩和转矩,而不是分别使用 dLoc 和 dRot。这两个之间的区别是,力和转矩在子弹物理引擎中移动和旋转对象,在过程中应用摩擦和碰撞,而 dLoc 和 dRot 移动和旋转对象而不考虑任何其他“actor”(计算到物理引擎计算中的对象)。虽然 dLoc 和 dRot 会在大多数迷宫游戏中起作用,但许多其他情况需要力和转矩。然而,大多数这些情况发生在更复杂的游戏中,这些游戏与动态对象的交互很多。在本教程的后面,我们将向迷宫添加动态对象,使用力的原因将变得清晰。
现在是时候对我们的游戏进行第一次测试了。
- 在迷宫上方添加一个光源 (SPACE → 灯 → 灯),在正面视图 (NUM1) 中对齐
- 按下NUM5进入透视视图模式,它提供一个真实的视图,而不是对象随距离保持相同大小的视图。确保你在编辑时切换回正投影视图 (NUM5)
- 进入纹理模式 (ALT+ZKEY) -- 按下 ZKEY 切换回实体视图模式
- 切换到顶视图 (NUM7) 或摄像机视图(在我们安装摄像机后) (NUM0)
- PKEY 开始游戏
- ESC 退出游戏测试
如果你收到“没有摄像机”错误,请忽略它。我们稍后会添加摄像机。
如果你的角色根本没有移动,请确保你在逻辑面板中绘制了执行器之间的连接“线”,以及将“Actor”的“Dynamic”和“Rigid Body”按钮设置为 True。
你现在应该有一个在迷宫中快速移动的圆锥体。
(新手问题 1:我的圆锥体在我不按 A 或 D 的情况下自行旋转。它还喜欢在迷宫表面寻找隐藏或不存在的凸起。我该如何解决?)
(NQ1 的答案:如果我理解你的问题。如果我使用扭矩来旋转,使用力来向前移动,并按下向前,然后转弯,它就开始失控旋转。我的解决方案是使用旋转而不是扭矩。)
新手问题 2:圆锥体直接穿过了迷宫。我该如何让迷宫阻挡圆锥体?
NQ2 的答案:首先,确保你的圆锥体在游戏引擎启动之前没有完全或部分进入迷宫。其次,选择你的圆锥体(在我的示例中命名为“主角”,然后回到属性窗口中的“物理”属性。如果你没有看到属性窗口,请按N 键,并在屏幕右侧查找。在“物理类型”下,确保在下拉菜单中选择了“动态”或“刚体”。然后,向下滚动到“碰撞边界”,并勾选该框。你还可以从“边界”下拉菜单中选择一个形状,例如“圆锥体”。
坠落
[edit | edit source]我们现在将实现“从迷宫中掉落时死亡”功能。为了实现这一点,我们将添加一些内容,让我们能够检查圆锥体是否从迷宫中掉落。最简单的方法是使用一个包含整个迷宫的“天空穹顶”对象,虽然有一些更优雅的方法可以实现目标,但我们将使用天空穹顶方法,因为它简单易懂。从现在起,我们需要用启用的一层和二层(SHIFT+2 键)来测试迷宫。
- 添加一个新的立方体
- 将其调整为巨大比例(S 键,只要大到足以包含迷宫及其内部即可)
- 可选:将其移动到第二层(M 键,2 键,回车键)
现在你已经有了巨大的立方体,转到逻辑面板,添加一个传感器、控制器、执行器集,并将它们设置为屏幕截图所示。
- 传感器:触摸,在“属性”下输入你的角色名称(这里为“主角”)
如果主角(并且只有主角)碰到地面,这将重启场景。
- 控制器:并且
- 执行器:场景,重启
- 属性:物理(左侧最后一个图标),启用执行器按钮以及“幽灵”和“不可见”
这将允许动态障碍物(稍后添加)穿过并不会卡在那里!
如果你现在测试游戏,你会看到当你从迷宫中掉下来时游戏会重启。正如我们之前讨论的,游戏引擎中的面是一面的,所以你应该看不到立方体。
(新手问题 1:当我这样做时,我的圆锥体一直掉下来。当我将立方体移回第一层时,它工作正常。我是否遗漏了什么?) (新手说明:好吧,我每次都遇到同样的问题,只是在第一层,但当我在第一层时,我只是不断掉下来)
(答案:教程说要创建第二层的立方体,但层级并不重要。确保你在选择了一层和二层的情况下测试游戏。还要仔细检查“天空立方体”的逻辑)
(答案 2:我遇到了同样的问题。我通过用网格替换立方体解决了这个问题,网格的比例和位置都在迷宫下方。网格具有上面提到的触摸逻辑。)
(答案 3:这里也是一样。我以为我会从材质引用中移除“主角”,但这行不通,如果砖块掉下来碰到立方体,它只会重启关卡……解决方案:在圆锥体中创建一个属性,一个名为“isCone”的布尔值(=true),然后在立方体中添加一个“碰撞”传感器,它会检查对象的属性“isCone”,并将其余部分保持为所示。)
(答案 4(当块碰到立方体时重启):按照图片所示操作,右键单击圆锥体,转到链接和管道,并将 MA: 重命名为圆锥体或你想要的任何名称,然后右键单击立方体,然后在触摸传感器中,将 MA: 重命名为你调用另一个 MA: 的任何名称。:D 这是在 24.9b 中)
(答案 5:对于 Blender 2.57a,你需要在迷宫下方放置一个平面或其他东西。然后赋予它(触摸 -> 并且 -> 场景(重启))游戏逻辑。如果它不起作用,请确保在物理选项卡下选择了执行器。)
(问题 2:我该如何让盒子半透明?现在我所看到的,包括测试时,只有天空盒。此外,当我将盒子放在迷宫下方时,它工作正常,但所有物体都没有阴影,而当不显示第二层时,所有物体都有阴影。谁能提供解决方案?这是在 2.48a 中)
(答案:要使某个东西透明,请按F5;按“材质按钮”按钮;在链接和管道选项卡下,按光晕和 Z 透明度,取消选中阴影缓冲;在材质下,将 A 设置为 0.000。)
死亡地面
[edit | edit source]为了给你的游戏增加紧张感,你可以让地面动起来。它会随着时间推移而升起!
- 添加一个静态平面,并将其逻辑面板设置为上面所述。
- 添加一个始终传感器,将其连接到一个并且控制器,然后将其连接到一个运动执行器,该执行器具有 0.01 的垂直线性速度(沿 z 轴)。
这样它就会慢慢升起。为了让玩家清楚地看到地面在升起,更改其颜色(例如蓝色代表水),并使其再次可见。
你刚刚给你的游戏添加了一些紧张感!如果你时间不够,你会碰到地面并重启!如果你需要更多时间,只需设置一个更低的垂直线性速度即可。
相机
[edit | edit source]空格键 → 相机靠近主角圆锥体。有两种简单的方法可以实现相机:逻辑相机和子相机。在这种情况下,你可能更适合使用逻辑相机,但这确实是一个个人喜好问题。
- 逻辑相机:添加到相机的逻辑面板
- 传感器:始终
- 控制器:并且
- 执行器:相机,到对象“圆锥体”(或你的主角的任何名称——当你选择主角时,请查看对象面板下的内容)高度 5,最小 5,最大 10。
- 子相机:选择相机,然后选择主角(顺序很重要),然后按CTRL+P 键将圆锥体绑定到相机。将相机对准你喜欢的视角,并测试游戏。
- 第一人称相机:好吧,这个不算是一种新方法,但如果你愿意重新设计你的运动,让它只移动相机而不是角色(只需对相机执行你对角色执行的所有操作),你就可以以第一人称四处走动。或者你可以将相机放在圆锥体中,因为其中一面始终是不可见的(在纹理模式下查看),并将相机绑定到圆锥体。记住:要访问游戏中的相机(在游戏过程中),在你开始之前,按 ctrl 0 或转到(视图 -> 相机)
(新手问题 1:无论我做什么(甚至删除相机!),当我按下 0 或 ctrl+0 时,我总是看到要么只有死亡平面(我在迷宫下方使用了一个平面而不是周围的立方体),要么什么都没有,具体取决于我是否选择了第二层。根据 Oops 图表,只有一个相机(或者没有,如果我删除了它)。出了什么问题?)
(答案:Ctrl+0 将选定的对象分配为相机。要解决你的问题,请选择你的相机并按 ctrl+0,要进入相机视图,请按 0)
美化
[edit | edit source]Blender 是一款出色的 3D 建模软件,它拥有大量工具供你使用,因此你应该能够使你的游戏比这个看起来更好。
我们将在每个对象上添加一个或两个纹理。
- 选择你要纹理化的对象
- 如果你希望你的对象有多种颜色,请进入编辑模式
- 选择你要分配颜色的所有面(CTRL+TAB → 面)
- 转到编辑面板(F9),位于按钮窗口上
- 在左侧附近应该有一个面板,上面写着“材质”。单击屏幕截图中突出显示的按钮
- 通过单击“漫反射”下的白色字段来调整该材质的颜色。会显示一个颜色选择器。选择你喜欢的颜色!
雾
[edit | edit source]现在它看起来好多了,但当相机几乎处于水平状态时,你可以看到相机在哪里停止渲染迷宫。你可以通过选择相机,并在其编辑按钮中更改其裁剪范围来解决这个问题……但有一个更好的方法。雾。
雾会模糊一定距离之外的所有东西,颜色与世界纹理相同,并且可能很方便。我们将为我们的游戏添加一些雾,这样玩家就不会看到太远的地方,从而使游戏变得过于容易。
我们将使雾非常靠近,虽然你可以改变距离。转到材质按钮,然后转到世界子按钮,然后复制屏幕截图中的设置。当你测试它时,请确保你处于纹理模式,以便看到雾。
(问题:我复制了屏幕截图,但我无法使雾生效。发生了什么事?)
(答案:将“开始”更改为较小的值,例如 15。)
(问题:屏幕截图是否正确,或者我的尺寸是否不同。我发现 10 的雾距离几乎不可见,而 1 的距离却有更好的效果。这是正常的吗?)
(问题:我已经成功创建了雾,并且在启动游戏时可以看到它,但背景颜色仍然是灰色,所以迷宫被遮住了,但其他所有地方仍然是灰色。
关卡
[edit | edit source]现在,剩下的就是创建下一关,并添加一些障碍物。
- 在迷宫的尽头添加一个立方体,正好在地板水平线上方,这样圆锥体就可以碰到它(空格键 → 添加 → 网格 → 立方体)
- 按场景下拉菜单,选择“添加新”→ 完整复制
- 现在可以返回到迷宫表面部分创建新的迷宫网格。
- 通过场景菜单返回到第一级。
- 选择关卡结束立方体。
- 更改其逻辑面板以使其类似于以下内容。
- 传感器:接触,coneMat
- 控制器:并且
- 执行器:场景,设置场景,Scene.001(或你命名的第二级名称)
(新手:当我进入第二级时,我的玩家名称变为coneMat.001,我不得不更改所有目标和大型重新开始立方体的分配。答案:将coneMat.001 重命名为你为第一个场景命名的材质名称 - 这对我来说解决了问题。
(新手:在我的第二级,我的圆锥体击中立方体,但没有任何反应!答案:确保逻辑面板(F4)下的传感器、控制器和执行器选项卡通过线连接。
(新手:当我进入第二级时,我什么也看不见!
为了使多个对象必须被触碰(或被角色获取,可能的话),为每个对象赋予上面描述的逻辑设置,并将执行器类型更改为带有主题“goalget”的消息。如果你想让对象在被收集后消失,在对象的逻辑面板中添加一个类型为“结束对象”的编辑对象执行器,并将它链接到现有的AND控制器。
接下来,选择与角色接触时重新开始关卡的大型立方体。如果你选择不包含这样一个立方体,在关卡开始时创建一个空物体(这样你以后可以很容易地找到它)。为立方体或空物体赋予以下逻辑运算符。
- 传感器:消息,goalget
- 控制器:并且
- 执行器:属性,添加,wincon,-1
- 传感器:属性,等于,wincon,0
- 控制器:并且
- 执行器:场景,设置场景,Scene.001(或你命名的第二级名称)
然后点击“添加属性”,并赋予它类型Int,名称wincon,以及一个等于完成关卡所需收集对象的数量的值(如果全部都需要,则使其等于关卡中包含的数量)。这可以扩展到包括除收集物品之外的其他多种获胜条件,方法是使每个条件的完成从“wincon”中减去。
你现在拥有了一个多级迷宫游戏。可以随意扩展游戏玩法机制和模型,使它们看起来更好。
新手提示:我在我认为所有东西应该去的地方输入了,但它没有做任何事情。我不确定在游戏模式下我应该寻找什么。
本教程的这一部分将假设你已具备更高级的Blender界面和基本命令知识。因此,本节将以更少的具体方式撰写,所有基本命令的快捷方式将不会在此处介绍。从现在开始,本教程将达到中级水平。如果你无法理解本教程的这一部分,可以在之前的教程中学习下面使用的基本功能。
现在我们将添加一些动态障碍。在本例中,它们将构成一个“砖块”墙,你的角色可以穿过它。
- 添加一个立方体。
- 在编辑模式下将其缩放(GKEY)为1,0.5,0.5的尺寸。
- 对其进行倒角(WKEY),递归为1,大小为0.03(按空格键手动输入值)。
- 在逻辑面板中,将其设置为Actor,动态,刚体,质量为0.5。
- 在下方点击边界,并保持为“盒子”。这使得Blender意识到你添加的是一个盒子,并应该像盒子一样行动(它现在会滑动而不是滚动)。
- 将它移动到迷宫中的一个交叉点(GKEY),并重复它,直到你得到一堵砖墙(ALT DKEY,LMB)。
你现在有一个屏障,你的角色可以穿过它。
你现在已经了解了足够的Blender游戏引擎(BGE)知识来创建你自己的游戏。如果你想深入研究Blender游戏,我建议你学习Python,因为试图在BGE的图形界面中制作一个完整的游戏就像试图用牙签的钝端挖坟墓。蒙着眼睛。而且牙签粘在你的额头上。但是,你现在已经踏上了成为游戏制作人的道路!有关Python的基本入门教程,请参阅“开源视频游戏”系列。
如果你有任何问题、疑虑或“新手提示”,请将它们发布在本教程的讨论页面,而不是教程本身。