UE 3.UE官方蓝图教程

1.Introduction to Blueprints

打开方式:There is a Palette panel that can be opened by going to Window > Palette in the Blueprint Editor.

The Palette panel contains a list of all nodes that can be used in Blueprints.

At the top of the panel there is a Favorites section that shows the favorite and most frequently used nodes. To set a node as a favorite, right-click on it in the Palette panel and choose “Add to Favorites”.

蓝图节点的执行从红色事件节点开始, 然后从左到右跟随白线, 直到到达最后一个节点。之后, 它将转到另一个已触发的蓝图事件。

The execution of the nodes of a Blueprint starts with a red Event node and follows the white wire from left to right until it reaches the last node. After that, it moves on to another Blueprint event that has been triggered.

节点的白色引脚称为执行引脚。其他彩色引脚是数据引脚。

The white pins of nodes are called execution pins. The other colored pins are the data pins.

下图中,在触发 "BeginPlay" 事件时,值分配给Energy and Lives的变量。

有一些节点根据条件控制蓝图执行路径。(逻辑控制)例如分支节点Branch

There are some nodes that control the flow of execution of the Blueprint. These nodes determine the execution path based on conditions.

For example, the image on the right shows a Branch node that is using as a condition the value of the Boolean variable Is Big Health Pack.

Data wires:当具有数据引脚的节点运行时, 它在完成执行之前使用数据线获取所需的数据。

在下图中, 执行从BeginPlay事件开始。Set 节点为 Energy 变量分配一个新值, 但必须使用连接到乘法节点的数据线获取此值, 该数据线需要使用另一个数据线获取播放机级别变量的值。

2. Basic Blueprint Programming Concepts

简介:

创建变量并修改其属性

显示如何使用算术、关系和逻辑运算符

显示函数、自定义事件、宏及其差异

介绍程序流程

变量

变量类型:

字符串/文本: 用于存储文本。文本变量更可取, 因为它支持本地化。

向量: 包含浮点值 XY Z

转换: 用于存储位置、旋转和缩放。

String / Text: Used to store text. The Text variable is preferable since it supports localization.

Vector: Contains the float values X, Y, and Z.

Transform: Used to store location, rotation, and scale.

细节面板:

选择变量后, "详细信息" 面板可以对变量的名称和类型进行更改。

属性包括:

实例可编辑Instance Editable: 如果选中, 则可以在 "级别" 中的实例中更改变量。

"蓝图只读" Blueprint Read Only: 如果选中, 蓝图节点将无法更改该变量。

工具提示Tooltip: 包含光标悬停在变量上时显示的信息。

Spawning 上公开Expose on Spawn: 如果选中, 可以在生成蓝图时设置变量。

Array, set, and map:属性包括一个按钮, 用于将变量转换为容器container。容器可以存储同一类型的多个元素。

Get/Set:

当一个变量被拖放到事件图中时, 将出现一个菜单, 其中包含 "获取" "设置" 选项。

快捷方式:若要创建 Get 节点, 请在拖放变量时按 Ctrl 键。使用 Alt 键创建 "设置" 节点。

Operators:

Arithmetic operators算术运算符

"+" 运算符接收左侧的两个输入值, 并在右侧引脚给出操作结果。要使用两个以上的输入值, 只需单击 "添加引脚" 选项。

输入值可以直接输入到节点中(常量), 也可以从变量中获取。

Relational operators关系运算符

执行两个值之间的比较, 并返回一个布尔值 ("true" "false") 作为比较的结果。

下图显示了关系运算符和使用分支节点的示例。

logical operators逻辑运算符:

逻辑运算符在布尔值之间执行操作, 并返回布尔值 ("true" "false") 作为操作的结果。主要逻辑运算符如下所示:OR/AND/NOT

Functions, events, and macros函数、事件和宏:

Functions

函数允许在蓝图的各个部分中执行的一组操作, 以便于组织和维护脚本。

可以从其他蓝图调用函数, 并允许使用输入和输出参数。

若要创建函数, 请转到 "蓝图编辑器" 中的 "我的蓝图" 面板, 然后单击 "函数" 标签中的 "+" 符号。

Functions: Inputs and outputs

若要添加输入或输出参数, 请在 "我的蓝图" 面板中选择该函数, 然后使用 "详细信息" 面板。

Functions:local variables

函数允许使用仅在函数内可见的局部变量。

若要创建局部变量, 请双击某个函数对其进行编辑, 然后查看 "我的蓝图" 面板。在面板的底部, 您将找到一个名为 "本地变量" 的类别, 该类别的名称在括号中。单击 "本地变量" 类别中的 "+" 按钮。

Functions:The Target parameter

Target 参数是多个函数的通用参数, 指示将使用函数调用修改的对象。

默认值为 "self", 它是对拥有正在执行的脚本的 Actor Object 实例的特殊引用

下图显示了使用DestroyActor函数的 Target参数的不同方式。

Custom events

虚幻引擎提供了许多预定义的事件, 但可以创建新的事件在蓝图中使用。这些事件可以从它们当前蓝图和其他蓝图中调用。

若要创建自定义事件, 请在 "事件图" 中右键单击, 展开 "添加事件" Add Event类别, 然后选择 "添加自定义事件..." Add Custom Event

Custom events:input parameters

通过选择 "自定义事件" 节点, 可以管理事件名称和输入参数。事件没有输出参数。

下显示一个名为 "WelcomeMessage" 的自定义事件, 其中包含一个名为 "Name" 的输入参数。

该事件将使用参数name在屏幕上创建和打印自定义消息。

Custom events:delegates

事件的右上角有一个红色的小正方形, 称为委托。这是对事件的引用。某些操作接收事件参数, 使用委托可以实现。

下图中自定义事件"Clock"的委托连接到 Set Timer by Event输入引脚, 因此时钟事件将每秒调用一次。

This is just a reference to the event. Some actions receive an event as a parameter, and using the delegate makes that possible.

In the image, the delegate of the custom event named “Clock” is wired to the Set Timer by Event node’s Event input pin, so the Clock event will be called every second.

Macros宏:

在一个公共位置聚集操作的另一种方法是使用宏。宏类似于节点的折叠图。在编译时, 宏的操作将在正在使用该宏的位置展开。

宏可以有输入和输出参数, 以及多个输入和输出执行引脚。

比较:

宏、自定义事件和函数提供了组织脚本的不同方法。共同点:他们都有输入参数。

宏具有输出参数, 并且可以有多个执行路径。它们不能从另一个蓝图中调用。

事件没有输出参数。它们可以从其他蓝图中调用, 并具有 "委托" 引用。它们支持时间线。

可以从其他蓝图调用函数, 并具有输出参数。函数不支持隐藏操作latent actions, 如延迟操作。

Program flow

Branch node:

分支Branch节点根据布尔输入 "条件" 的值 ("" "") 来指导蓝图的执行流程。

For Loop node:

ForLoop节点为每个索引执行与输出引脚循环体关联的一组操作。

ForLoop 节点完成其执行时, 将触发输出引脚完成。

Sequence node序列节点

序列节点可用于帮助组织其他蓝图操作。触发时, 它按顺序执行连接到输出引脚的所有节点,

可以使用 "添加引脚 +" 选项添加输出引脚。若要删除引脚, 请右键单击引脚, 然后选择 "删除执行引脚" 选项

3.Building and Using Actor Classes

简介:

显示如何将组件添加到蓝图引入构造脚本

展示各种类型的事件

演示如何生成、销毁和引用参与者实例

显示如何执行输入映射

Components

组件是可在蓝图中使用的现成类。蓝图中使用组件则可以包含多个功能。

若要将组件添加到蓝图, 请使用蓝图编辑器中的 "组件" 面板。

右侧的图像显示新蓝图的 "组件" 面板, 其中包含按下 "添加组件" 按钮时显示的一些组件选项。

Components: viewport

可以在视口中看到组件的可视化形式。

下图显示了第三人模板Third Person template中的 "第三角色" ThirdPersonCharacter 蓝图中的组件。名称旁边有 "(继承)" 的组件是从 "角色" 类继承的。

CapsuleComponent 用于碰撞测试。

网格组件是在视觉上表示角色的骨骼网格。

"后相机FollowCamera" 组件是将用于查看游戏的相机。

"CharacterMovement" 组件包含用于定义移动的各种属性。

Construction Script构造脚本

构造脚本是一个特殊功能, 当蓝图首次添加到Level , 当其属性发生更改时, 或者在运行时生成类时, 所有参与者蓝图都将执行该函数。构造脚本有一个单独的图形, 可以在其中放置要执行的操作。

需要注意的是, 当游戏开始时, 构造脚本不会在放置的Actors身上运行。

Construction Script: example

右侧显示的构造脚本使用 "设置材质" 功能, 根据在可编辑可变材料类型中选择的材质定义静态网格组件的材质类型。

每当修改 "材质类型" 变量时, 构造脚本将再次运行, 并使用新材质更新对象。

Events

Begin play event

事件允许虚幻引擎和参与者之间的通信。一个常见的示例是 " Begin play " 事件。

Actors的游戏开始时, 将触发 " Begin play " 事件。如果Actors是在游戏中间生成的, 则生成时会立即触发此事件。

tick event

"Tick" 事件, 称为游戏的每一帧。例如, 在以每秒60帧的速度运行的游戏中, Tick 事件在一秒钟内调用60次。

Tick 事件具有" Delta Seconds " 的参数, 其中包含自最后一帧以来经过的时间量。

在右侧所示的 Tick 事件中, Actor以每秒100厘米的速度沿 X 轴移动。

仅在必要时使用 Tick 事件, 因为它可能会影响性能。

Collision events

当两个参与者碰撞或重叠时, 将触发碰撞事件。

当两个参与者开始重叠, 并且两个参与者的 "生成重叠事件Generate Overlap Events " 属性设置为 "true" , 将执行Event ActorBeginOverlap

当两个参与者停止重叠时, 将执行Event ActorEndOverlap重叠。

如果碰撞中的其中一个参与者的模拟生成命中事件Simulation Generates Hit Events属性设置为 "true", 则将执行Event Hit

Mouse Interaction

有一些与Actor和鼠标交互相关的事件。

当鼠标光标在演员身上移动时, 将调用Event ActorBeginCursorOver

当鼠标光标移出演员时, 将调用Event ActorEndCursorOver

当鼠标单击演员时, 将调用Event ActorOnClicked

当释放鼠标按钮且鼠标光标仍在 "参与者" 上方时, 将调用Event ActorOnReleased

Actor Instances

Spawning actors

Spawn Actor from Class是使用指定的类和transform创建 Actor 实例的函数。

Collision Handling Override输入定义了如何在创建时处理碰撞。输出参数 "返回值" 是对新创建的实例的引用。

在右侧的示例中, 当按下空格键时, 将在当前蓝图的同一位置 (transform) 创建 Blueprint Effect Explosion类的实例。

Destroying actors

DestroyActor函数在运行时从Level中删除Actor实例。必须在Target参数中指定要删除的实例。

右侧的图像显示一个名为 "测试运行状况" 的函数, 该函数将检查运行状况变量的值是否小于零。如果 "true", 则此蓝图的当前实例 ( "self") 表示 ", 将被销毁。

Get all actors of class

Get All Actors Of Class是一个函数, 它获取当前Level中属于指定类的所有参与者的引用。

Actor Class参数指定搜索的类。

Out Actors输出参数是一个数组, 其中包含对在Level中找到的指定类的 "参与者" 实例的引用。

在右侧的图像中, Get All Actors Of Class返回一个 BP_Coin Actors数组, 然后使用 ForEachLoop 节点将数组中每个Actors在游戏中的 "设置参与者隐藏Set Actor Hidden In Game " 功能中的 "新建隐藏New Hidden " 属性设置为 "true"

这是开销很大的操作。不要在帧事件中使用它。

Referencing actors

在蓝图中, 可以创建引用对象Object / Actor的变量。

下图显示了引用Blueprint_Chair类实例的变量创建。对象引用指向 Level 中的Actor

创建时, 变量为空。给变量设置实例的一种方法是检查 Instance Editable属性, 将此蓝图添加到 Level, 然后在 "详细信息" 面板中选择Level中的Actor设置。

另一种方法是使用Spawn Actor from Class的返回值。

Player Input

Input Mappings

可以创建新的输入事件, 表示在游戏中有意义的操作。

例如, 与其为鼠标左键创建触发开枪的输入事件, 不如创建一个名为 "Fire" 的操作事件, 并映射可触发此事件的所有键和按钮。

若要获得输入映射input mappings, 请在 "级别编辑器Level Editor " 菜单中, 转到 "编辑" > "项目设置..." Edit > Project Settings, 然后在 "引擎Engine" 类别中选择 "输入" 选项。

Action mappings

操作映射用于按键和按钮。

右侧的图像显示了来自 "第一人称" 模板的操作映射的示例。

在此示例中, 创建了一个名为 "跳转" 的操作, 该操作可由空格键、游戏板的底按钮或运动控制器的左触发器触发。

axis mappings

轴映射Axis mappings允许具有连续范围的输入, 例如鼠标的移动或游戏板的模拟棒。

键盘和按钮也可以在轴映射中使用。下例中, MoveRight 操作映射到 "D" , Scale

属性的值设置为 "1.0", 并映射到 "A" , 其值设置为 "–1.0", 表示相反的方向。

input action events

所有操作映射action mappings都可在context菜单中的 "输入 > 操作事件Input > Action Events " 下的 "蓝图编辑器" 中找到的。

按下或释放与之关联的键盘或按钮时, 将生成 "输入操作InputAction" 事件。

下图是 InputAction 事件的示例。

input axis events

所有axis mappings都可在context菜单中 "输入 > 轴事件Input > Axis Events " 下的 "蓝图编辑器" 中使用。

" InputAxis " 事件持续报告轴的当前值。

下图是 InputAxis 事件的示例。

本节介绍了组件和构造脚本, 并演示了如何将各种类型的事件添加到蓝图中。

它还解释了如何管理 Actor 实例以及如何执行输入映射

4. Gameplay Framework Classes

识别游戏框架Gameplay Framework

显示游戏模式Game Mode类及其默认类

解释玩家控制器Player Controller玩家状态Player State

显示Pawn类和一些子类

介绍游戏实例Game Instance游戏会话Game Session

公共类Common Classes

创建蓝图时, 您将看到一个通常用作蓝图父类的类的列表。这些公共类是游戏框架的一部分, 用于表示玩家、角色、控制器和游戏规则。

右侧的图像显示公共类的层次结构。箭头指示右侧的类正在从左侧的类继承。虚幻中有一个称为 Object 类的基类。

Game Mode

Game Mode类用于定义游戏规则。游戏模式还指定将用于创建Pawn, Player Controller, Game State, HUD 和其他类的默认类, 如下图像所示。

每个Level可以有不同的游戏模式。如果未为 Level指定 Game Mode, 它将使用为项目设置的 "游戏模式"

在多人游戏中, Game Mode仅存在于服务器上, 不会复制到客户端。

Assigning a Game Mode

若要指定项目的默认游戏模式, 请去Edit > Project Settings...。在 Level EditorProject类别中, 选择 Maps & Modes  选项。在 Default GameMode  属性的下拉列表中选择 "游戏模式", 如下图。

若要指定Level的游戏模式, 请单击  Level Editor中的 Settings按钮, 然后选择 World Settings选项。在GameMode Override属性的下拉列表中选择 "游戏模式", 如下图所示。

级别的 "游戏模式" 将覆盖项目的默认游戏模式。

Game state

Game State类用于跟踪表示游戏当前状态的变量, 并在多人游戏中与所有客户端共享。

基本的想法是, Game Mode定义服务器上的规则, Game State管理游戏中那些变化的信息, , 需要发送到客户端。

若要使用基于Game State类的新蓝图, 必须将自定义Game State类分配给Game ModeGame State Class参数。

游戏状态类扩展了游戏状态基类, 并添加了一些多人游戏功能。

Player Controller

控制器类有两个主要子类。Player Controller类由人的玩家使用, AI Controller类使用人工智能来控制Pawn

Pawn Character类只有在被Player Controller拥有时才会接收输入事件。

被玩家控制器所拥有的Pawn类可以在游戏中更改。下图来自一个Level蓝图, 显示了 Possess函数的使用。在本例中, 当按 Enter 键时, Player Controller将拥有Pawn Actor in the Level

Player state

玩家状态类用于跟踪需要在多人游戏中与其他客户端共享的特定玩家的信息。

Player Controller仅存在于客户端上, Player State则从服务器复制到所有客户端。

若要使用基于玩家状态类的新蓝图, 必须在Game ModePlayer State Class 参数中对其进行设置。

Pawn

Pawns是可以由Controllers (玩家或 AI) 控制 (拥有) Actors

Pawn类表示物理主体, Controller类表示大脑。

下图是从 Pawn 类继承的一些参数。Pawn类可以使用拥有它的Controllerrotation值。

其他属性指示控制器如何拥有Pawns

Pawn: Character

Character类是 Pawn 类的一个子类, 用于表示可以行走、奔跑、跳跃、游泳和飞行的双足角色。此类已经有一系列组件来帮助实现此目标。

下图是Character类中存在的组件。

CapsuleComponent 用于碰撞测试。

ArrowComponent指示Character当前方向。

Mesh组件是在视觉上表示Character的骨骼网格。网格组件的动画由动画蓝图控制。

CharacterMovement 组件用于定义各种类型的角色运动, 如行走、跑步、跳跃、游泳和飞行。

Character movement

CharacterMovement组件是用 C++ 编写的, 可处理多人游戏中的移动以及复制和预测。

对于各种类型的运动, 有很多属性可以在组件上进行调整。

Pawn: Vehicle

轮式车辆Wheeled Vehicle类是 Pawn 类的子类的另一个示例。

它包含一个以 C++ 编写的VehicleMovement组件, 并具有用于模拟车辆行为的代码。它有许多参数用于定义车辆的运动和物理。它还可以处理多人游戏中的复制和预测。

下图是VehicleMovement组件的某些属性。

HUD

HUD 类用于创建heads-up display (HUD), 这是一种屏幕显示, 可快速访问重要信息。HUD 在游戏中用于向玩家显示各种信息, 如他们的分数、时间、能量等。

在虚幻引擎中, HUD 类是一个基类, 其中包含一个画布, 它是一个可以绘制图基元primitives (如文本和纹理) 的对象。

HUD 类包含一个名为 "Receive Draw HUD" 的事件, 用于绘制每个帧的基元。

HUD 类只存在于每个客户端上, 不会复制。

Game instance

Game Instance类的实例在游戏开始时创建, 并且仅在游戏关闭时才被删除。

每次加载Level, Level中的所有Actors和其他对象都将被完全销毁并重新计时。

Game Instance类及其包含的数据在Levels之间保持不变。

Game Instance仅存在于每个客户端上, 不会复制。

若要分配要在游戏中使用的Game Instance, 请通过 "编辑 >项目设置 > 地图和模式 Edit > Project Settings > Maps & Modes."来修改项目的设置。

Game session

简单地说, Game Session是在服务器上运行的游戏的界面, 客户端可以使用它来发现和加入游戏。

下一些可用于管理会话session的蓝图函数。

5.Simple Game Example

简介:

实现一个简单的游戏

展示如何使用Game Mode类定义游戏规则

提供如何使用宏、自定义事件和函数的示例

演示计时器在游戏中的使用

Game classes

创建的游戏基于第三人模板。游戏使用四个主要的蓝图类:

ThirdPersonCharacter: 一个表示玩家的Pawn子类, 是第三人模板的一部分。此类分配给Game ModeDefault Pawn Class参数。

BP_Statue: 代表雕像的Actor类。它检查与玩家的碰撞, 并有定期改变位置的逻辑。

BP_Guide_GameMode: 控制游戏的状态并存储一些变量, 如时间、分数和级别。它还定义基类, ThirdPersonCharacter

BP _ GUIDE _ HUD: 负责在屏幕上绘制时间、分数和Player Level值。

游戏规则Game rules

玩家必须在时间用完之前收集屏幕上出现的小雕像。

初始时间设置为30秒。

比赛在没有时间的时候结束。

每收集5个雕像, 玩家级别将增加, 时间将增加15秒。

玩家从玩家级别1开始, 玩家可以达到的最大级别是玩家级别5

方案中有三个定期更改位置的图态。

当雕像出现在一个位置时, 它将在那里停留一段时间, 这取决于当前的玩家级别。雕像改变位置所需的秒数是表达式 "6–级别" 的结果。

当玩家得到一个雕像, 另一个生成。

收集到的雕像的分数由 "10 x " 的表达式确定。

时间、分数和Player Level值将在屏幕上绘制。

Creating the project

使用带有起始内容的第三人模板创建新项目。

删除场景中间的Static MeshText Render Actors, 只留下地板和侧壁, 如图所示。

在内容浏览器中, 创建一个名为 "BP _ Guide" 的新文件夹, 该文件夹将存储所有新的蓝图。

BP_Guide_gamemode

创建新的蓝图类, 并选择 Game Mode Base 作为父类。将其重命名为 BP_Guide_GameMode

创建以下整数变量:

Level: 在游戏中存储当前Player Level

Score: 存储玩家的分数。

StatueCount: 跟踪收集到的雕像数量。

Time 存储游戏结束前的剩余时间。

创建以下布尔变量:

GameOver: 指示游戏是否已结束。

BP_Guide_gamemode: Start Game Macro

"我的蓝图" 面板中, 创建一个名为 "StartGame" 的宏。

此宏负责初始化控制游戏状态的变量。

StartGame 宏的 Details面板中, 创建一个名为 "In" 的输入参数, 并将类型设置为 "Exec"。创建一个名为 "Out" 的输出参数, 并将类型设置为 "Exec"

宏将设置变量的初始值。

Set Timer 函数创建一个 Timer 对象, 该对象将每1.0秒调用一次名为 "Clock" 的自定义事件。

BP_Guide_gamemode: using the Macro

BP_Guide_GameMode蓝图中, BeginPlay事件中调用 Startgame 宏。

创建一个名为 "RestartGame" 的自定义事件, 该事件也称为 StartGame 宏。

当玩家按 enter 键时, ThirdPersonCharacter蓝图中调用 RestartGame 自定义事件, 如下图

BP_Guide_gamemode: clock event

Clock是计时器每秒调用的自定义事件。它的职责如下:

将时间变量的值减少 "1"

检查 Time 变量的值是否为 "0";如果为 "true", 则执行以下操作:

将布尔GameOver变量的值设置为 "true"

清除计时器, 使其停止调用 Clock 事件

BP_Guide_gamemode: Statue Collected

"Statue Collected雕像收集" BP_Guide_GameMode中的一个函数, 当玩家获得雕像时, 它被 BP_Statue类调用。

函数的第一部分执行以下操作:

·将玩家收集雕像时获得的积分添加到Score变量的值中,计算方式为 "10 x 级别"

·将值 "1" 添加到StatueCount变量中, 该变量存储收集的雕像数量。

"收集的雕像" 函数的第二部分执行以下操作:

测试 StatueCount 变量的值是否为5的倍数。如果为 "true", 则执行以下操作:

将值 "15" 添加到 Time 变量。

将值 "1" 添加到级别变量, 级别变量的最大值限制为 "5"

这意味着, 每收集五个雕像, 玩家推进一个级别, 并获得额外的15秒的时间。

模量 (%)运算符返回除法的余数。

BP_Guide_HUD

创建新的蓝图类, 并选择 "HUD" 作为父类。将其命名为 "BP _ Guide _ HUD"

创建一个名为 "My_Guide_GameMode" 的变量, 其类型为 "BP_Guide_GameMode Object Reference "

下图展示BeginPlay事件获取对游戏模式的引用, 转换成BP_Guide_GameMode的引用, 并将该引用保存在变量中。

此引用将用于访问将在屏幕上绘制的变量。

BP_Guide_HUD: screen coordinates

在这个游戏中, 将用于绘制的唯一操作是Draw Text函数。此函数接收一些输入值, 其中包括两个参数Screen X” and “Screen Y的输入值, 这两个参数取决于屏幕的分辨率。例如, 1280 x 720 是一种常见的分辨率。

这些值表示将在其上绘制文本的屏幕的座标。屏幕的左上角位置是原点, 其中屏幕 X 和屏幕 Y 的值为 "0"。下图显示了这两个参数的值如何决定文本的绘制位置。

Score, Time, and Level变量使用的Screen Y值为 "10", 因此关联的文本将显示在屏幕顶部。

使用的Screen X值是 "10" Score变量, "300" Time变量, "550" Level变量。

BP_Guide_HUD:receive draw hud

若要在屏幕上绘制, 必须将Receive Draw HUD事件添加到 "事件图表" 中。此事件仅在基于 HUD 类的蓝图中可用。

HUD 类的Draw Text函数用于在屏幕上打印分数, 如图所示。

函数用于生成一个字符串, 其中包含文本 "Score:" +分数变量的当前值。生成的字符串将传递给Draw Text函数的Text参数。

"时间" "级别" 变量绘制文本的设置与 "分数" 变量的绘图文本的设置非常相似。

"绘制文本" 函数中的唯一更改涉及参数 "文本""文本颜色" "屏幕 X"

Receive Draw HUD事件测试的最后一部分。是否GameOver变量的值为 "true",如果是, 则在屏幕上绘制字符串 "游戏结束" " Enter"

BP_Statue

创建新的蓝图类, 并选择 "演员" 作为父类。将其重命名为BP_Statue

添加Static Mesh组件。在 Static Mesh组件的 "详细信息" 面板中, Static Mesh属性设置为SM_Statue"

Materials类别中的Element 0属性设置为M_Metal_Gold

"冲突预设Collision Presets " 属性设置为OverlapAllDynamic

编译并保存蓝图类。

BP _ 雕像蓝图的三个实例添加到Level的任何位置。

BP_Statue:Event begin play

右侧的图像显示了BeginPlay事件获取对Game Mode的引用, 转换为对BP_Guide_GameMode的引用, 并将该引用保存在变量中。

之后, 调用函数InitStatue

BP_Statue:Function Init statue

InitStatue函数中, 有两个主要节点:

Teleport: 此节点为雕像设置新的位置。位置由一个向量 (XYZ) 表示, 其中 X Y 参数的值是随机的。X Y 参数的最小值和最大值表示游戏的区域。

Set Timer by Function Name: 此计时器表示雕像更改位置所需的时间 (以秒为单位)。当这一次到期时, 将调用InitStatue函数来设置新的位置。Time 参数的值是表达式 "6–级别" 的结果。"级别" My_Guide_GameMode类中的一个变量, 表示Player Level

BP_Statue:Actor Begin Overlap

当游戏中的演员与雕像重叠时, 就会触发演员重叠碰撞事件。

传递给 "分支" 节点的条件输入参数的值是表达式的结果, 该表达式检查重叠雕像的演员是否为玩家角色, 以及游戏模式中的 "游戏" 变量是否未设置为 "true"。只有在这两个条件都是正确的情况下, 才会收集雕像。

如果收集雕像, 则调用My_Guide_GameMode类的 Statue Collected函数来管理玩家的分数和游戏级别。

之后, 目前的雕像被摧毁, 并创造了一个新的雕像。

Setting the game mode

打开BP_Guide_GameMode, 然后单击Class Defaults按钮。将Default Pawn Class类属性设置为 "ThirdPersonCharacter", HUD 类属性设置为 "BP _ Guide _ HUD"

Level Editor, 单击 "设置" 按钮, 然后选择 "世界设置"。在 "世界设置" 面板中, GameMode Override属性设置为 "BP_Guide_GameMode"

游戏现在已经准备好了。

如果一切都正确, 在玩游戏时, 玩家将控制一个角色, 必须得到雕像。

方案中有三个定期更改位置的图态。

当玩家与雕像重叠时, 他们将获得分数, 雕像将重新出现在另一个位置。

有倒计时, 没有时间的时候比赛就结束了。

每收集5个雕像, 玩家级别将增加, 时间将增加15秒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章