Choose your operating system:
Windows
macOS
Linux
设计游戏及其关卡时,你可能会发现在场景中定位某个 Actor 十分麻烦。无论是关卡布景、几何体、NPC、敌人、交互对象,还是场景道具,场景中可能包含数百个 Actor 。从中找到某个 Actor 就好比"大海捞针"。
但是,你可以使用 世界大纲视图(World Outliner) 以帮助缩小场景中某个 Actor 的搜索范围(如下图所示)。
在上图中,世界大纲视图(右)展示了所有放置在关卡中的Actor。点击世界大纲视图中的一个Actor后,该Actor会在关卡视图中高亮显示。你可以点击 Actor 或 类型(Type),将Actor按照名称或类型进行排序(你可以点击类型框中的向下箭头,将二级类别从类型改为其他过滤条件)。
在世界大纲视图中选中某个Actor,然后点击关卡视图,双击该Actor或直接按下 F,可直接将窗口 对准 该Actor。
请参阅 世界大纲视图 文档,了解有关在场景中定位 Actor 的详细信息。
尽管你可以借助 世界大纲视图(World Outliner) 在编辑器中查找某个 Actor,但如何通过蓝图来查找 Actor 以便修改它呢?本"操作指南"将介绍如何设置各种标准,以便在场景中搜索 Actor。
实现指南
项目设置
在本教程中,你将使用 Get All Actors of Class 节点在关卡中找到Actor。此节点受到调用时,它将检索关卡指定类(Class)中的所有Actor,并将它们放置在 数组(Array) 中。然后,你可以根据筛选条件从该数组中检索Actor。然后,你可以访问Actor的属性,或者根据你要实现的功能以某种方式修改它们。
首先,点击 新建(New) > 游戏(Games) > 第三人称(ThirdPerson) > 蓝图项目带初学者内容包(Blueprint Project With Starter Content),创建名为 FindingActors 的项目。
找到 编辑(Edit) > 项目设置(Project Settings) >引擎(Engine) > 输入(Input) >绑定(Bindings) > 操作映射(Action Mappings) ,然后点击 添加(Add) (+),创建名为 FindActorPressed 的新操作映射,然后将 关键值 设置为 1 。
创建蓝图FireEffect Actor
初学者内容包(Starter Content) 文件夹提供了完整的FireEffect Actor,其中包括表示火焰效果的 粒子组件(Particle Component) 和用于声音效果的 音频组件(Audio Component) 。此Actor将用作从Get All Actors of Class节点查找的Actor基类。
找到 内容(Content) > StarterContent > 蓝图(Blueprints) ,然后将 Blueprint_Effect_Fire 实例拖到世界中。
第三人称角色:设置FindingActor按下事件
找到 内容(Content) > ThirdPersonBp > 蓝图(Blueprints) 文件夹,并双击 ThirdPersonCharacter 打开其 类默认值(Class Defaults) 。
右键点击 事件图表(Event Graph),然后在 操作(Actions) 菜单中搜索 FindActorPressed 操作键事件。
在 FindActorPressed 节点键事件,从 Pressed 引脚拖出,然后从 操作(Actions)菜单 搜索 Get All Actors Of Class 节点。
在 Get All Actors of Class 节点内,点击 Actor类(Actor Class),然后在下拉列表中选择 Blueprint_Effect_Fire 类。
从 Out Actors 引脚拖出,然后在 操作(Actions) 菜单中搜索 ForEachLoop 。
从 Get All Actors Of Class 节点的 执行(Execution) 引脚拖出,并将其插入 For Each Loop 节点的 执行(Exec) 引脚。
从 ForEachLoop 节点拖出 数组元素(Array Element) 引脚,然后在 操作(Actions) 菜单中搜索 Get P_Fire 。
从 数组元素(Array Element) 引脚拖出,并在 操作(Actions) 菜单中搜索 Get Fire Audio 。
从 P Fire 引脚拖出,然后在 操作(Actions) 菜单中搜索 Deactivate 节点。
从 火焰音频(Fire Audio) 引脚拖出,并将其连接到 Deactivate 节点的 目标(Target) 引脚。
点击 编译(Compile) 和 保存(Save) 。
完成的蓝图
最终结果
找到 工具栏(Toolbar) ,并点击 运行(Play) (PIE)。
当按下数字1键时,你应该注意到,火焰效果粒子将熄灭,并且不再听到从音频组件发出的音效。
获取带标签的特定Actor
你使用了Get All Actors of Class节点来获取指定类的Actor数组。但是,你也可以在Actor上使用 标签(Tags) ,根据不同的条件筛选数组结果,以便从数组中获取特定的Actor或单个Actor。示例,
找到 内容(Content)> StarterContent > 蓝图(Blueprints) ,并选择 Blueprint_Effect_Fire 。
在 细节(Details) 面板中,找到 标签(Tags) 分段,然后点击 添加(Add)(+)将标签添加到Actor。
在 0 元素字段中,在文本字符串中输入"FindActorTag"。
在 MyCharacter 蓝图中,从 ForEachLoop 的 数组元素(Array Element) 引脚拖出,然后在 操作(Actions) 菜单中搜索 Get Tags 。
从 标签(Tags) 引脚拖出,然后在 操作(Actions) 菜单中搜索 Get 节点。
此处,我们正在"获取"索引0处的标签,我们已在上文中将其设置为 FindActorTag 。
在图表中 右键点击,并在 操作(Actions) 菜单中搜索 Branch 节点。
从 Branch 节点的 条件(Condition) 引脚拖出,然后添加 Actor Has Tag 节点。
将 Get 节点的 输出(out) 引脚连接到 Actor Has Tag 节点上的 标签(Tag) 引脚。
将 ForEachLoop 节点的 数组元素(Array Element) 引脚连接到 Actor Has Tag 节点上的 目标(Target) 引脚。
从 ForEachLoop 引脚的 数组元素(Array Element) 拖出两次,获得 P_Fire 和 Fire Audio 节点,并将它们连接到 Deactivate 节点。
点击 编译(Compile) 和 保存(Save) 。
在 关卡视口(Level Viewport) 中选择你的 Blueprint_FireEffect 之一,然后在 细节(Details)面板 中,找到 标签(Tags) 变量,找到 FindActorTag 字段并打开下拉菜单,然后选择 删除(Delete) 删除标签变量。
为了演示功能,我们特意留下了一个没有标签的火焰效果。
找到 工具栏(Toolbar),按 运行(Play)(PIE) 。
最终结果
当按下数字1键时,你应该注意到,所有带有ActorsToFindTag的Bluprint_Fire_ Effect粒子均熄灭,而没有标签的火焰效果仍然存在。