想要编写一个有趣且充满动作的单人任务吗?在这里你可以找到可使用工具的相关说明。 开始之前: 要能够使用本指南中的信息,你需要先创建一个具备基本设置的单人地图。你可以找到创建地图的相关说明。你应该能够从编辑器中启动你的地图(编辑器内运行),以便进行地图创建。使用编辑器中的“运行”按钮,记得将玩家数量设置为1,假设你已正确设置了玩家出生点,那么你应该能够在基地建造建筑并移动单位。关于这方面的更多信息可以找到。你可能也希望地图上有一些村庄和资源点,因为它们是游戏中获取资源的主要方式。 任务 首先,你可能需要给玩家一些任务。确保玩家至少有一个活跃任务总是好主意,这样他们就会知道当前的目标和要做什么。 你可以使用基础游戏中的任务,但我们建议为你的模组地图创建自己的任务数据。要做到这一点,你需要一个数据表。在内容浏览器中右键点击,选择【杂项】->【数据表】,将其添加到你的模组内容中。

选择【Anc Quest Data】结构作为此数据表的基础结构。

好的,现在我们需要配置关卡以实际使用此数据表。打开世界设置窗口,在【Anc世界设置】选项卡中勾选【覆盖任务数据表】复选框,然后将新创建的数据表关联到【覆盖任务数据表】属性。

现在,是时候创建你的第一个任务了!从简单的任务开始,了解我们任务系统的核心机制,例如“移动到这里”。你需要打开任务数据表,添加新行(可通过点击小“加号”按钮实现),并填入所需数据。

行名称:任务的唯一标识,玩家不可见。 是否为支线任务:若该任务非必须完成,则会以不同字体颜色显示。 任务名称:任务激活时会向玩家显示几秒钟的大型任务标题。 任务文本:任务激活期间始终对玩家可见的任务摘要。 任务成功完成时自动保存:任务完成时游戏是否执行自动保存? 任务失败时自动保存:任务失败时游戏是否执行自动保存? 任务更新时自动保存:任务更新时游戏是否执行自动保存? 标记文本:关卡中任务标记上方可见的文本。 在进入关卡蓝图之前,我们还需要一个东西:任务标记。在内容浏览器中找到它(蓝图'/Game/Blueprints/Game/BP_Anc_QuestMarker.BP_Anc_QuestMarker')并将其放置在关卡上。

好了,现在任务数据设置完成,该进行脚本编写了! 打开关卡蓝图,这里是实现所有功能的地方。要激活任务,你需要在Anc Player Controller上使用激活任务节点。例如,你可以在关卡开始后几秒钟激活任务,为此可以使用游戏开始事件。重要提示:不要在关卡蓝图中使用开始播放!在开始播放后我们仍在加载资源,所以对玩家来说真正的游戏开始是在游戏开始事件触发时。

目标:使用Anc Get Local Controller。 行名称:你之前创建的任务数据表中的任务行名称(唯一ID)。 在任务标记中:包含关卡上任务标记引用的数组,你可以为该任务使用一个任务标记(如本示例)、多个任务标记,或不使用——若不使用,可使用0元素数组(移除Make Array节点上的引脚)。 在参数X中:任务参数的初始值。任务参数的用法将在下文说明。 水位进度:0到1之间的值会使带有水位进度的进度条随任务文本一同显示(该机制用于部分撒拉森人关卡)。 此时,当你开始游戏,经过初始延迟后,你创建的任务应会变为激活状态。 若要停用任务,请使用Deactivate Quest节点。在本示例中,我们是在检测到玩家小队进入触发体积后执行此操作(为此,请在体积上使用“仅重叠小队”碰撞预设)。玩家的小队将具有与玩家出生点的“期望玩家索引”相同的玩家索引(“是否由AI控制”设为 false),该索引通常为0。

目标:再次使用Anc Get Local Controller。 行名称:你想要停用的任务的任务数据表中的任务行名称(唯一ID)。 失败:如果想要使任务失败,设为true;如果想要使任务成功,设为false。 这就是《祖先遗产》中大多数任务的创建方式。不过还有一些高级选项,其中最有用的可能是任务参数功能。你可以使用它们在任务中创建计数器,例如“需要占领的村庄:3”“已击杀敌人:3/5”等。 要使用任务参数,你必须在任务数据表中设置正确的任务文本。使用以下字符代码在任务文本中标记参数:{0}、{1}、{2}、{3}。括号中的数字表示参数编号,0代表第一个参数。因此,任务文本示例应如下所示:“需占领村庄:{0}”,“已消灭敌人:{0}/{1}”。
激活带有参数的任务时,唯一的不同操作是初始化参数值,并在需要时添加更多任务标记。

处理任务参数所需的最后一项是【更新任务】节点。你可以使用它来更改参数值以及该任务的激活任务标记。

在参数ID中:输入你想要更新的参数ID(括号中的数字)。 在数值中:输入指定参数的新值。 在任务标记中:输入你想要执行操作的任务标记数组,操作类型由下一个更新任务节点参数决定: 更新模式:此枚举值决定对输入的任务标记执行何种操作,有三个选项: 添加:若要向任务添加一些任务标记,请使用此选项。 替换现有:选择此选项将用输入的任务标记数组替换任务当前的活动任务标记。 移除:此选项将从任务中移除输入的任务标记数组中的任务标记。对话 如果你想创建一个以故事为核心的任务,或者只是为你的关卡增添一些生气,那么你就需要对话。

无法识别内容,已删除

行名称:对话唯一ID,玩家不可见。 语音波形:对话的音频文件;不用担心,如果您只想使用纯文本对话,可以将该属性留空。 角色:将说出这句对话的角色;您可以在以下数据表中找到可能的说话者:Content/Blueprints/Datatables/DT_StoryCharacterData 遗憾的是,添加新角色并不简单,需要修改基础内容和游戏代码。 文本:对话文本。 FaceTextureCache 和 SpeechWaveCache:忽略这两项,它们会在需要时自动填充。 然后,您需要在【Anc世界设置】中将【语音映射数据表】属性设置为您的数据表。

现在你可以开始编写一些对话脚本了。为此,我们需要进入关卡蓝图并使用M_AddSpeech宏。

颜色:角色名字字体的颜色。0代表蓝色(玩家),1代表红色(敌人),2代表绿色(盟友)。 时间:对话窗口在屏幕上显示的时长。此数值仅在对话台词没有音频波形时使用。 对话名称:对话ID,即先前创建的数据表中的行名称。 添加声音混合:如果希望在播放对话语音波形时,所有游戏音效和音乐略微减弱,请勾选此项(如果对话没有对应的语音波形,则此项无影响)。

就是这样!你可以在同一时刻连续添加多个对话,游戏中有一个队列系统会逐个播放它们。 地图结束 在单人任务中,你需要在某个时刻触发地图结束——无论是胜利还是失败结局。 要实现这一点,你首先需要准备一个数据表,其中包含玩家完成或失败任务后看到的胜利/失败说明和描述。创建一个基于【Anc Win Lost Explanation】结构的数据表。

行名称:地图结束说明的ID,玩家不可见。 说明:嗯……就是关于地图成功/失败的说明。 接下来你需要将关卡设置为使用数据表中的说明,而非基础说明。进入世界设置,勾选“覆盖胜利失败条件数据表”选项,并将“已覆盖的胜利失败条件数据表”属性设置为你的数据表。

很好,你的基本设置已完成!现在,只需编写地图结局的脚本即可。编写的位置当然是关卡蓝图。你需要使用【结束战役地图】节点。

已获胜:通过此布尔值,你可以确定该节点会导致关卡失败还是关卡成功结束画面。 行名称:说明的ID,即说明数据表中的行名称。 就是这样! 基础AI脚本 如果你想为游戏角色编写一些行为脚本,这里可以找到一些关于实现工具和方法的基本信息。 通常,你需要引用AncSquad对象才能对其进行操作——获取该对象最简单的方法是通过BP_Anc_SpawnPoint的SquadSpawned事件——有关生成点的更多详细信息,请参考此处。当然,默认情况下,单人任务的脚本编写是在关卡蓝图中进行的。 AI移动到 最简单且可能最有用的脚本编写内容就是基础移动。如果你想命令敌方/友方小队移动到特定位置,应使用AI移动至节点,这是AncSquad类中的一个代码函数。

目标:你想要移动的【单位小队】对象。 目的地:小队应前往的位置。 旋转:小队到达移动目标后将朝此方向旋转。 最大速度:移动速度上限(不会使小队超过其自身属性决定的最大速度)。-1 对小队移动速度无影响。 重置:勾选此项,小队将停止当前所有行动并立即执行此移动指令;不勾选则将此移动指令加入队列。 指令索引:强烈建议保持默认值 -1。 可被中止:取消勾选可使该指令不可中止——请谨慎使用,风险自负! 无语音:勾选此项将不会播放指令确认的语音。还有另一种为小队下达移动指令的方式——如果已在地图上设置移动目标,这种方式会更便捷。该节点名为【F AI 移动至目标】。

AI攻击 使用此节点可以向小队下达攻击命令。其作用方式与右键点击敌人相同,模拟右键点击操作——弓箭手会向目标移动,当目标进入射程后开始射击;近战单位则会一直移动直至进入战斗状态。

目标:你想要下达攻击命令的小队;即攻击者。 目标实体:攻击的目标,即受害者。可以是另一个AncSquad对象,或AncBuilding对象。确保其队伍索引与攻击小队不同。 是否允许冲锋:取消勾选此布尔值将阻止在攻击目标为另一小队时进行冲锋。 重置:与AI移动到节点类似,此变量决定命令是立即执行还是放入命令队列。 单人游戏AI 如果你不想下达具体命令,而是希望小队自主行动,可以启用其单人游戏AI。有两种启用方式:在生成点或蓝图中。第一种方法在生成点指南中描述。要在蓝图中为小队启用单人游戏AI,需对目标小队调用暂停小队AI函数。

目标:你想要启用/禁用单人AI的小队。 暂停:决定单人AI是否应暂停(关闭)或在目标小队上激活。 重要提示:确保不要在玩家的小队上启用AI;) 任务过场动画 也许你已经注意到,在《祖先遗产》的任务中,有很多小型过场动画,此时摄像机会在关卡上方来回移动,展示玩家需要关注的关键位置。我们开发了一个系统,用于快速简便地设置这类过场动画,如果添加一些AI移动和对话,效果会非常好。 来认识一下F目标过场动画节点吧!调用此函数将启动小型过场动画,作为脚本编写者的你将控制玩家的相机,输入和HUD将被禁用。所有任务过场动画都可以跳过。

乍一看这可能有点复杂,但核心思路是这样的:相机会按顺序移动到【待显示角色】数组中的每个角色,并根据【角色停留时长】数组中对应的数值来决定停留时间。 【待显示角色】:相机会移动到的角色数组。我们通常使用【提示点】或【目标角色】来实现这一功能,因为它们是非常简单且对玩家不可见的角色。该数组的长度必须与【角色停留时长】数组相同。 【相机高度】:在目标过场动画期间,相机距离地面的高度。 【与角色距离】:目标角色和相机之间的距离。你可以通过此参数和上一个参数来调整相机在角色上方的位置。过渡时间:摄像机从一个目标角色移动到另一个目标角色所需的时间(以秒为单位)。 每个角色持续时间:摄像机在每个对应目标角色上方停留的时间(以秒为单位)。此数组的长度必须与【待显示角色】数组相同。 旋转速度:摄像机在目标角色上方悬浮时的旋转速度。 下移速度:摄像机在目标角色上方悬浮时的向下移动速度。 跳过后续渡时间:如果过场动画被跳过,摄像机移动到结束角色的时间。 结束时看向角色:过场动画结束时(在【待显示角色】数组中的最后一个角色之后或跳过之后)摄像机应移动到的角色。 目标摄像机:每次摄像机完成向目标角色的移动时调用的事件,参数为该角色在【待显示角色】数组中的索引。要创建合适的事件,只需从该引脚拖动链接并选择添加自定义事件选项。 过场动画结束:在过场动画结束时调用的事件,参数会告知过场动画是否被跳过。按照与相机目标引脚相同的方式创建自定义事件。

战争迷雾逻辑启用:在目标过场动画期间,战争迷雾的视觉效果会关闭,但战争迷雾逻辑仍然适用:这意味着例如距离你的部队过远的单位将不可见。取消勾选此布尔值可更改此行为,以便在过场动画期间显示所有内容。 游戏开始时启用:如果要在关卡一开始就启动目标场景,请将此标记为启用。记住,不要使用“开始游戏”,而应使用“游戏开始事件”! 以上就是全部内容!如果你感到无从下手,只需先填充“要显示的演员”和“每个演员的持续时间”数组,并创建事件(这是关卡蓝图编译所必需的,即使你不使用这些事件),只有在完成这些设置后,再尝试调整其余参数。祝你好运!




换一换 


















