限时闪购许可证 30% 折扣,同样价格享更大代币包。许可证 30% 折扣 + 更大代币包距结束还有 …查看价格 → 查看 V2 的新功能 · 全新界面、Crew、Blueprint 转 C++、多人游戏测试以及编辑器内更新 阅读更新日志 →
所有文章
阅读约 4 分钟

Unreal Engine 冲刺与体力:用 AI 搭建带体力条的冲刺

如何在 Unreal Engine 中制作带体力的冲刺:按住 Left Shift 以 900 的速度奔跑,体力条每秒消耗 25,1 秒后恢复,耗尽时锁定,由一个 AI 请求搭建。

Unreal Engine 中的体力系统是三个小点子:一个数字,即体力;一条规则,规定何时可以奔跑以及要付出什么代价;还有一条规则,规定体力何时恢复。屏幕上的一切,条、颜色和速度,都只是对这一个数字的反应。最简单的做法,是用一个请求让 AI 一次搭好整个系统,包括速度、消耗、恢复和锁定规则。

在这篇演示中,Ultimate Engine CoPilot 在 Left Shift 上搭建了冲刺,并配上一条会消耗、恢复、耗尽时锁定的体力条。你会看到完整的提示词、AI 在角色上发现的一个问题以及它的解决方式,还有一段通俗易懂的体力系统原理说明。

完成后的系统是什么样

你行走时没有条,因为体力是满的。你按住 Shift,角色跑得更快,技能栏上方出现一条小条。奔跑时它不断下降,快耗尽时变成橙色。你松开,等一秒,它又慢慢填满。如果你一直跑到耗尽,冲刺就会被锁定,直到体力条恢复。

玩家在雪地上冲刺,技能栏上方有绿色体力条

冲刺中:绿色体力条位于技能栏上方。

提示词

复制下面这段,改一改速度或消耗,看看 AI 会搭出什么:

Make sprinting with a stamina bar. Create WBP_StaminaBar in /Game/Series/EP39_Sprint, a thin horizontal bar at the bottom centre of the screen above the existing ability bar, 400 pixels wide and 14 pixels high, with a dark background and a green fill that turns orange below 30 percent, and hidden while stamina is full. Create BP_SprintController in the same folder, an actor that I place once in the level, that adds the widget on BeginPlay and listens for Left Shift. While Left Shift is held, the player is moving and stamina is above 0, set the character's MaxWalkSpeed to 900 and drain 25 stamina per second out of 100. When the player is not sprinting, wait 1 second and then regenerate 20 stamina per second. If stamina reaches 0, sprinting stays locked until stamina is back to 30. The actor must read and remember the original MaxWalkSpeed and restore it when the sprint ends. Keep the sprint speed, the drain, the regeneration and the lock threshold as variables. Place the actor near the player start. Then play test it: record the original walk speed, hold Left Shift while moving forward and check the speed is 900 and stamina falls, release and check the original speed is restored and stamina regenerates after the delay, hold until stamina is empty and check the sprint is locked, and fix anything that does not work.

看看这些数字:900、25、20、30 和 1 秒。每条规则都有一个数字,所以 AI 不用去猜什么手感才对。还有一点:Actor 必须记住原来的速度并恢复它。如果你不这么说,很多冲刺系统会让玩家卡在错误的速度上。

AI 如何搭建它

AI 先读取项目。它找到 HUD,看技能栏在哪里,这样新的条可以放在它上方而不会遮住它。接着两个资产出现:体力条 Widget 和冲刺控制器 Blueprint。你要求的数字都变成了变量,所以以后可以直接修改,而不用动图表。

体力条一开始落在了左边缘,于是 AI 把锚点改正到底部居中,并把控制器放在玩家起点附近。

BP_SprintController 的事件图表

控制器图表:每一帧都检查 Shift、移动和体力。

角色上的一个问题

第一次运行通过了 11 项检查,有两项失败。AI 读取失败信息:速度本应是 900,却停留在 600;冲刺被锁定时,速度读数却是 1000。它找到了原因。这个角色本来就有自己的一套冲刺,并且每一帧都把速度设为 1000。真实项目常常就是这样,AI 在不修改角色的前提下绕过了它。现在控制器每一帧都写入自己的速度,时机在玩家控制器之后、移动之前。

第二次运行通过了全部 19 项检查。

报告

AI 的报告表格,包含速度、消耗、恢复和锁定检查

每条规则的证据,以及关于角色自带冲刺的说明。

报告里有一张表,列出了每项检查及其证据:

  • 行走速度是 600。冲刺时,速度是 900,Pawn 的实际速度是 899.98。
  • 冲刺 1.5 秒后的体力:61.5,接近数值推算出的 62.5。
  • 松开后,速度回到 600。最初一秒不恢复,之后开始填满。
  • 一直按到耗尽,冲刺被锁定。Shift 仍然按住、体力为 13.9 时,速度是 600。体力到 30.8 时锁定解除,冲刺以 900 恢复。

它如实说明了自己没有看到的内容。它在屏幕上检查了橙色的条,但绿色的条和隐藏状态只是从 Widget 图表里确认的。而且角色自带的冲刺只是被覆盖,并没有被移除,因为这个角色来自一个资产包。如果你愿意,它也可以替你移除。关卡也还没有保存。

体力系统的工作原理,通俗讲

每一帧,控制器检查三件事:Shift 是否被按住,玩家是否在移动,体力是否大于零且未被锁定?如果三项都满足,速度就是冲刺速度,体力就减少一点:消耗量乘以帧时间。否则,速度回到它记住的那个值。一个计时器数到一秒,之后体力每一帧增加一点。

体力到达零时,一个标志 locked 会打开,并且只有体力回到 30 时才会关闭。正是这个间隔,让冲刺不会来回闪烁。而体力条只是读取这个数字:绿色,低于 30% 变成橙色。由于速度、消耗和恢复都是变量,改三个数字,就能做出笨重的跑者,也能做出不知疲倦的跑者。

扩展思路

  • 跳跃有不同的体力消耗。
  • 条耗尽时发出短促的疲惫声和更沉重的喘息。
  • 冲刺时视野稍微变宽。视野如何混合,参见 Unreal Engine 镜头缩放。

体力提示词的四个技巧

  1. 给每条规则一个数字:速度、消耗、延迟、锁定。
  2. 说明条相对于现有 UI 放在哪里。
  3. 要求 AI 恢复原来的速度。
  4. 要求它测试体力耗尽的情况,而不仅仅是体力充足的情况。

常见问题

在 Unreal Engine 5 中,如何制作带体力的冲刺?

按键被按住且玩家在移动时,把 MaxWalkSpeed 调高并逐帧消耗体力。延迟之后再恢复,并在体力为零时锁定冲刺,直到体力恢复到某个阈值。

为什么冲刺要锁定到体力回到 30 才解除?

耗尽值和解锁值之间留出间隔,可以防止体力在零附近徘徊时冲刺来回闪烁。

为什么第一次运行有两项检查失败?

角色本来就有自己的冲刺,每一帧都把速度设为 1000。AI 没有修改角色,而是按正确的顺序每一帧写入自己的速度,绕过了这个问题。

在你的项目中试试

在 产品页面 了解 Ultimate Engine CoPilot 能搭建什么,或者到 Fab 上获取。 了解 AI Blueprint 生成器 的工作原理。

本系列的更多搭建: Unreal Engine 湿滑地面、Unreal Engine 加速道具 和 Unreal Engine 坠落伤害。

你觉得怎么样?

在你的编辑器中试试
适用于 Unreal Engine 5 的 1,655 个工具。
获取插件