跳转到内容

Blender 3D: 从新手到高手/迷宫游戏引擎教程

来自维基教科书,开放的书籍,为开放的世界

本教程旨在以游戏的形式,对 Blender 游戏引擎进行中级介绍,它是平台游戏:创建与控制的续篇。它需要你熟悉 Blender 的 UI,简单的命令(比如用AKEY选择)和基本的建模技能。我们将在 Blender 中创建的游戏将具有以下特性

  1. 一个由 WASD 键控制的主角
  2. 一个没有墙壁的迷宫表面
  3. 掉出迷宫会死亡
  4. 多个关卡
  5. 动态障碍物
  6. 迷宫中有一个目标,它会把你传送到下一关

本教程是为 2.44 版本编写的,并且已在所有更高版本(截至 2008 年 4 月)中测试过



迷宫表面

[编辑 | 编辑源代码]

现在我们来制作迷宫。当你创建迷宫表面的路径时,请记住你需要一个起点和一个目标。

选择面
  1. 清空场景;选择所有(AKEY),删除选定项目(XKEYENTER
  2. 进入顶视图 (NUM7)
  3. 添加网格 (SPACE → 添加 → 网格 → 网格) 具有 X 和 Y 分辨率为 16
  4. 将网格缩放 24 倍 (SKEY,输入 24,ENTER)
  5. 选择网格后进入编辑模式 (TAB)
  6. 进入面选择模式 (CTRL+TAB)
  7. 开始选择面以制作二维迷宫(使用BKEY绘制选择框)
  8. 选择面后,复制这些面 (SHIFT+DRMB)
  9. 将这些面移开原始网格 (GKEY 或移动小部件 CTR+ALT+GKEY)
  10. 删除原始网格
  11. 使用GKEY或在编辑按钮 (F9) 的“网格”面板中按下“居中”按钮来居中迷宫


你现在应该有一个二维迷宫。在游戏引擎中,我们只看到每个面的一个侧面,所以这个迷宫从下面看时将不会出现,而从迷宫表面本身看时将明显是二维的。这是不可取的,因此我们将通过向下挤出迷宫表面来使我们的迷宫三维化。

挤出的迷宫
  1. 进入侧视图 (NUM3)
  2. 选择所有面 (AKEY)
  3. 向下挤出,-1 个单位 (EKEY区域),按住 CTR 以限制为 1 个单位增量,或者手动输入值 -1,就像你在开始时缩放网格一样。
  4. LMB 接受操作,或 RMB 取消面的移动。如果你取消了它,面将会挤出,但只是不会移动。你可以撤销操作 (CTRL+Z),或删除你已挤出的顶点/面 (WKEY移除重复)。


你的迷宫现在已经完成了,只缺少一个被困在里面的人……

挤出鼻子

我们将创建一个非常基本的角色,足以说明本教程中要传达的概念。你可以根据自己的意愿制作一个复杂或基本的角色,但重要的是始终在你的主角上有一个方向指示器,否则玩家可能会感到困惑。所以,我们将使用一个带有“鼻子”的原始体(即一个从对象中心挤出的面或顶点,以便提供一个旋转参考点)。在本教程中我将使用一个圆锥体,仅仅因为它们不太容易滚动。

旋转到角色将移动的方向
  1. 进入顶视图 (NUM7)
  2. 添加圆锥体 (SPACE网格圆锥体,使用默认值)
  3. 选择圆锥体并进入编辑模式 (TAB)
  4. 进入面选择模式 (CTRL+TAB)
  5. 选择圆锥体侧面上的一个面
  6. 将它挤出大约 1/4 个单位或更少 (EKEY)
  7. 合并挤出的面以使鼻子尖锐 (WKEY合并在中心)
  8. 进入对象模式 (TAB)
  9. 旋转圆锥体,使鼻子与正 Y 轴对齐 (RKEY,与绿色箭头对齐)


你现在已经有了你的角色(不是那种皮克斯风格的,但目前够用了)。现在我们只需要给它动力。


注意:从第 8 点到第 9 点,似乎圆锥体应该旋转,使其“鼻子”与对象模式下的 Y 轴对齐,但在完成此操作后,我发现圆锥体仍然在原始 Y 轴方向(在旋转之前)移动。为了解决这个问题,我改为在编辑模式下进行“鼻子”与 Y 轴的对齐,这似乎解决了问题。

现在我们将通过使用 WASD 键来使角色移动。为了做到这一点,游戏逻辑需要与 WASD 键相关联。复制屏幕截图中看到的配置,注意要包括左上角的凸包多面体碰撞,以及按下“L”按钮,这使得力矩和转矩相对于该对象而不是全局的。如果力是全局的,主角将继续沿直线移动,即使转弯也是如此。


  1. 转到逻辑按钮(紫色吃豆人图标或F4
  2. 添加四个传感器、控制器和执行器。
  3. 最大化逻辑窗口 (CTRL+UPKEY)
  4. 复制下面屏幕截图中看到的配置。

Blender Game logic and Physics in version 2.76 and higher. The "physics" window is to be found by clicking on the last symbol of the properties window (on the right)

(注意:我使用 Actor->Dynamic 进行模拟,因为在 2.49b 中无法同时使用动态和刚体。经过一些测试,它似乎运行正常。)

dLoc/dRot 与 力/转矩

本教程中的角色逻辑与之前平台游戏逻辑非常相似,但不同之处在于它使用力矩和转矩,而不是分别使用 dLoc 和 dRot。这两个之间的区别是,力和转矩在子弹物理引擎中移动和旋转对象,在过程中应用摩擦和碰撞,而 dLoc 和 dRot 移动和旋转对象而不考虑任何其他“actor”(计算到物理引擎计算中的对象)。虽然 dLoc 和 dRot 会在大多数迷宫游戏中起作用,但许多其他情况需要力和转矩。然而,大多数这些情况发生在更复杂的游戏中,这些游戏与动态对象的交互很多。在本教程的后面,我们将向迷宫添加动态对象,使用力的原因将变得清晰。

现在是时候对我们的游戏进行第一次测试了。

  1. 在迷宫上方添加一个光源 (SPACE),在正面视图 (NUM1) 中对齐
  2. 按下NUM5进入透视视图模式,它提供一个真实的视图,而不是对象随距离保持相同大小的视图。确保你在编辑时切换回正投影视图 (NUM5)
  3. 进入纹理模式 (ALT+ZKEY) -- 按下 ZKEY 切换回实体视图模式
  4. 切换到顶视图 (NUM7) 或摄像机视图(在我们安装摄像机后) (NUM0)
  5. PKEY 开始游戏
  6. ESC 退出游戏测试

如果你收到“没有摄像机”错误,请忽略它。我们稍后会添加摄像机。

如果你的角色根本没有移动,请确保你在逻辑面板中绘制了执行器之间的连接“线”,以及将“Actor”的“Dynamic”和“Rigid Body”按钮设置为 True。

你现在应该有一个在迷宫中快速移动的圆锥体。


(新手问题 1:我的圆锥体在我不按 A 或 D 的情况下自行旋转。它还喜欢在迷宫表面寻找隐藏或不存在的凸起。我该如何解决?)

(NQ1 的答案:如果我理解你的问题。如果我使用扭矩来旋转,使用力来向前移动,并按下向前,然后转弯,它就开始失控旋转。我的解决方案是使用旋转而不是扭矩。)

新手问题 2:圆锥体直接穿过了迷宫。我该如何让迷宫阻挡圆锥体?

NQ2 的答案:首先,确保你的圆锥体在游戏引擎启动之前没有完全或部分进入迷宫。其次,选择你的圆锥体(在我的示例中命名为“主角”,然后回到属性窗口中的“物理”属性。如果你没有看到属性窗口,请按N 键,并在屏幕右侧查找。在“物理类型”下,确保在下拉菜单中选择了“动态”或“刚体”。然后,向下滚动到“碰撞边界”,并勾选该框。你还可以从“边界”下拉菜单中选择一个形状,例如“圆锥体”。

坠落

[edit | edit source]

我们现在将实现“从迷宫中掉落时死亡”功能。为了实现这一点,我们将添加一些内容,让我们能够检查圆锥体是否从迷宫中掉落。最简单的方法是使用一个包含整个迷宫的“天空穹顶”对象,虽然有一些更优雅的方法可以实现目标,但我们将使用天空穹顶方法,因为它简单易懂。从现在起,我们需要用启用的一层和二层(SHIFT+2 键)来测试迷宫。

  1. 添加一个新的立方体
  2. 将其调整为巨大比例(S 键,只要大到足以包含迷宫及其内部即可)
  3. 可选:将其移动到第二层(M 键2 键回车键


现在你已经有了巨大的立方体,转到逻辑面板,添加一个传感器、控制器、执行器集,并将它们设置为屏幕截图所示。

  1. 传感器:触摸,在“属性”下输入你的角色名称(这里为“主角”)

如果主角(并且只有主角)碰到地面,这将重启场景。

  1. 控制器:并且
  2. 执行器:场景,重启
  3. 属性:物理(左侧最后一个图标),启用执行器按钮以及“幽灵”和“不可见”

这将允许动态障碍物(稍后添加)穿过并不会卡在那里!


Blender death skydome (Game Logic)


如果你现在测试游戏,你会看到当你从迷宫中掉下来时游戏会重启。正如我们之前讨论的,游戏引擎中的面是一面的,所以你应该看不到立方体。


(新手问题 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]

为了给你的游戏增加紧张感,你可以让地面动起来。它会随着时间推移而升起!

  1. 添加一个静态平面,并将其逻辑面板设置为上面所述。
  2. 添加一个始终传感器,将其连接到一个并且控制器,然后将其连接到一个运动执行器,该执行器具有 0.01 的垂直线性速度(沿 z 轴)。
Blender 游戏逻辑“死亡地面”。它会随着时间推移而升起!

这样它就会慢慢升起。为了让玩家清楚地看到地面在升起,更改其颜色(例如蓝色代表水),并使其再次可见。

你刚刚给你的游戏添加了一些紧张感!如果你时间不够,你会碰到地面并重启!如果你需要更多时间,只需设置一个更低的垂直线性速度即可。

相机

[edit | edit source]

空格键相机靠近主角圆锥体。有两种简单的方法可以实现相机:逻辑相机和子相机。在这种情况下,你可能更适合使用逻辑相机,但这确实是一个个人喜好问题。

  • 逻辑相机:添加到相机的逻辑面板
    1. 传感器:始终
    2. 控制器:并且
    3. 执行器:相机,到对象“圆锥体”(或你的主角的任何名称——当你选择主角时,请查看对象面板下的内容)高度 5,最小 5,最大 10。
  • 子相机:选择相机,然后选择主角(顺序很重要),然后按CTRL+P 键将圆锥体绑定到相机。将相机对准你喜欢的视角,并测试游戏。
  • 第一人称相机:好吧,这个不算是一种新方法,但如果你愿意重新设计你的运动,让它只移动相机而不是角色(只需对相机执行你对角色执行的所有操作),你就可以以第一人称四处走动。或者你可以将相机放在圆锥体中,因为其中一面始终是不可见的(在纹理模式下查看),并将相机绑定到圆锥体。记住:要访问游戏中的相机(在游戏过程中),在你开始之前,按 ctrl 0 或转到(视图 -> 相机)

(新手问题 1:无论我做什么(甚至删除相机!),当我按下 0 或 ctrl+0 时,我总是看到要么只有死亡平面(我在迷宫下方使用了一个平面而不是周围的立方体),要么什么都没有,具体取决于我是否选择了第二层。根据 Oops 图表,只有一个相机(或者没有,如果我删除了它)。出了什么问题?)

(答案:Ctrl+0 将选定的对象分配为相机。要解决你的问题,请选择你的相机并按 ctrl+0,要进入相机视图,请按 0)

美化

[edit | edit source]

Blender 是一款出色的 3D 建模软件,它拥有大量工具供你使用,因此你应该能够使你的游戏比这个看起来更好。

在“漫反射”下有一个白色的字段。单击后,会显示一个颜色面板。你现在可以选择选定对象的颜色。

我们将在每个对象上添加一个或两个纹理。

  1. 选择你要纹理化的对象
  2. 如果你希望你的对象有多种颜色,请进入编辑模式
  3. 选择你要分配颜色的所有面(CTRL+TAB
  4. 转到编辑面板(F9),位于按钮窗口上
  5. 在左侧附近应该有一个面板,上面写着“材质”。单击屏幕截图中突出显示的按钮
  6. 通过单击“漫反射”下的白色字段来调整该材质的颜色。会显示一个颜色选择器。选择你喜欢的颜色!

Maze without materials Maze game with materials

现在它看起来好多了,但当相机几乎处于水平状态时,你可以看到相机在哪里停止渲染迷宫。你可以通过选择相机,并在其编辑按钮中更改其裁剪范围来解决这个问题……但有一个更好的方法。雾。

带有雾和抬高部分

雾会模糊一定距离之外的所有东西,颜色与世界纹理相同,并且可能很方便。我们将为我们的游戏添加一些雾,这样玩家就不会看到太远的地方,从而使游戏变得过于容易。

我们将使雾非常靠近,虽然你可以改变距离。转到材质按钮,然后转到世界子按钮,然后复制屏幕截图中的设置。当你测试它时,请确保你处于纹理模式,以便看到雾。


Adding a mist around your character in Blender version 2.76


(问题:我复制了屏幕截图,但我无法使雾生效。发生了什么事?)

(答案:将“开始”更改为较小的值,例如 15。)

(问题:屏幕截图是否正确,或者我的尺寸是否不同。我发现 10 的雾距离几乎不可见,而 1 的距离却有更好的效果。这是正常的吗?)

(问题:我已经成功创建了雾,并且在启动游戏时可以看到它,但背景颜色仍然是灰色,所以迷宫被遮住了,但其他所有地方仍然是灰色。

关卡

[edit | edit source]

现在,剩下的就是创建下一关,并添加一些障碍物。

  1. 在迷宫的尽头添加一个立方体,正好在地板水平线上方,这样圆锥体就可以碰到它(空格键添加网格立方体
  2. 按场景下拉菜单,选择“添加新”→ 完整复制
  3. 现在可以返回到迷宫表面部分创建新的迷宫网格。
  4. 通过场景菜单返回到第一级。
  5. 选择关卡结束立方体。
  6. 更改其逻辑面板以使其类似于以下内容。


  • 传感器:接触,coneMat
  • 控制器:并且
  • 执行器:场景,设置场景,Scene.001(或你命名的第二级名称)

(新手:当我进入第二级时,我的玩家名称变为coneMat.001,我不得不更改所有目标和大型重新开始立方体的分配。答案:将coneMat.001 重命名为你为第一个场景命名的材质名称 - 这对我来说解决了问题。

(新手:在我的第二级,我的圆锥体击中立方体,但没有任何反应!答案:确保逻辑面板(F4)下的传感器、控制器和执行器选项卡通过线连接。

(新手:当我进入第二级时,我什么也看不见!

场景按钮位于顶部面板上。

为了使多个对象必须被触碰(或被角色获取,可能的话),为每个对象赋予上面描述的逻辑设置,并将执行器类型更改为带有主题“goalget”的消息。如果你想让对象在被收集后消失,在对象的逻辑面板中添加一个类型为“结束对象”的编辑对象执行器,并将它链接到现有的AND控制器。

接下来,选择与角色接触时重新开始关卡的大型立方体。如果你选择不包含这样一个立方体,在关卡开始时创建一个空物体(这样你以后可以很容易地找到它)。为立方体或空物体赋予以下逻辑运算符。

  • 传感器:消息,goalget
  • 控制器:并且
  • 执行器:属性,添加,wincon,-1
  • 传感器:属性,等于,wincon,0
  • 控制器:并且
  • 执行器:场景,设置场景,Scene.001(或你命名的第二级名称)

然后点击“添加属性”,并赋予它类型Int,名称wincon,以及一个等于完成关卡所需收集对象的数量的值(如果全部都需要,则使其等于关卡中包含的数量)。这可以扩展到包括除收集物品之外的其他多种获胜条件,方法是使每个条件的完成从“wincon”中减去。

你现在拥有了一个多级迷宫游戏。可以随意扩展游戏玩法机制和模型,使它们看起来更好。

新手提示:我在我认为所有东西应该去的地方输入了,但它没有做任何事情。我不确定在游戏模式下我应该寻找什么。

动态障碍

[编辑 | 编辑源代码]

本教程的这一部分将假设你已具备更高级的Blender界面和基本命令知识。因此,本节将以更少的具体方式撰写,所有基本命令的快捷方式将不会在此处介绍。从现在开始,本教程将达到中级水平。如果你无法理解本教程的这一部分,可以在之前的教程中学习下面使用的基本功能。

现在我们将添加一些动态障碍。在本例中,它们将构成一个“砖块”墙,你的角色可以穿过它。

  1. 添加一个立方体。
  2. 在编辑模式下将其缩放(GKEY)为1,0.5,0.5的尺寸。
  3. 对其进行倒角(WKEY),递归为1,大小为0.03(按空格键手动输入值)。
  4. 在逻辑面板中,将其设置为Actor,动态,刚体,质量为0.5。
  5. 在下方点击边界,并保持为“盒子”。这使得Blender意识到你添加的是一个盒子,并应该像盒子一样行动(它现在会滑动而不是滚动)。
  6. 将它移动到迷宫中的一个交叉点(GKEY),并重复它,直到你得到一堵砖墙(ALT DKEY,LMB)。

你现在有一个屏障,你的角色可以穿过它。

你现在已经了解了足够的Blender游戏引擎(BGE)知识来创建你自己的游戏。如果你想深入研究Blender游戏,我建议你学习Python,因为试图在BGE的图形界面中制作一个完整的游戏就像试图用牙签的钝端挖坟墓。蒙着眼睛。而且牙签粘在你的额头上。但是,你现在已经踏上了成为游戏制作人的道路!有关Python的基本入门教程,请参阅“开源视频游戏”系列。


如果你有任何问题、疑虑或“新手提示”,请将它们发布在本教程的讨论页面,而不是教程本身。


华夏公益教科书