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

Unreal Engine 伤害数字:用 AI 搭建飘字与暴击数字

如何在 Unreal Engine 中制作伤害飘字:普通命中为白色,22 及以上为金色暴击,数字上升 120 个单位后淡出,由一个 AI 请求搭建。

Unreal Engine 中的伤害飘字是三个小点子:一个会受到伤害并记住自身生命值的对象,一小段出现在世界中正确位置的文字,以及一条让它向上移动并淡出的规则。游戏里你看到的每个数字,不过就是一个存在不到一秒钟的小 Actor。最简单的做法,是用一个请求让 AI 一次搭好整个系统。

在这篇演示中,Ultimate Engine CoPilot 搭建了训练假人和伤害飘字,普通命中是白色,暴击是金色。你会看到完整的提示词、AI 通过查看屏幕发现的一个 bug,以及一段通俗易懂的伤害飘字原理说明。

完成后的系统是什么样

雪地里立着两个训练假人。你按下 G,最近的假人挨了一下,一个数字从它头顶飘起并淡出。普通命中是白色。暴击则是金色、更大,并带着感叹号。每次命中,生命值都会下降,降到零时,假人倒下并消失。

玩家站在雪地上的两个训练假人附近

两个相距 400 个单位的假人,玩家在最近那个的范围内。

提示词

复制下面这段,改一改伤害范围或暴击阈值,看看 AI 会搭出什么:

Make floating damage numbers. Create BP_TrainingDummy in /Game/Series/EP40_DamageNumbers, a dummy made from a cylinder body and a sphere head with 100 health, and WBP_DamageNumber, a text widget. Create BP_DamageController in the same folder, an actor that I place once in the level, that listens for the G key. Pressing G hits the nearest training dummy within 600 units for a random damage from 10 to 25. Each hit spawns a floating number above the dummy that rises 120 units over 0.8 seconds and fades out: normal hits are white, hits of 22 or more are critical, gold, bigger and written with an exclamation mark. When a dummy reaches 0 health it falls over and is destroyed after 1 second. Keep the damage range, the critical threshold and the rise height as variables. Place two dummies near the player start, 400 units apart. Then play test it: teleport the player next to a dummy, press G five times, check each hit spawns a number with the right colour, check the dummy health goes down, check the dummy is destroyed at 0, and fix anything that does not work.

看看这个请求里有多少是数字,多少是文字。规则用数字:10 到 25,22 为暴击,600 个单位,上升 120,0.8 秒。外观用文字:白色和金色、更大、感叹号。对任何提示词来说,这都是个好的分工。

AI 如何搭建它

AI 读取项目,然后开始动手。四个资产陆续出现:假人、数字 Widget、控制器,以及一个把 Widget 带入世界的额外 Actor。AI 自己判断出 Widget 需要一个小 Actor 才能存在于世界中,并把它加了进去。

控制器上出现了一个编译错误,一个变量的类型已经过期。AI 发现后,把图表中那一部分重新搭建,避开了这个问题,然后再次编译。

BP_DamageController 的事件图表,包含查找最近假人和生成数字

控制器图表:找到最近的假人,随机一个伤害值,应用伤害并生成数字。

数字没有显示出来的 bug

第一次按下 G 是正常的:22 点伤害,生命值从 100 降到 78,数字也在上升。然后 AI 查看了一张截图,发现了数字没有反映出来的问题。假人的身体成了它的根组件,所以身体有一半陷在地里,头却悬在上方。它重新设置了假人的根组件,并把整个测试重新跑了一遍。这就是让 AI 去看屏幕的好处。

报告

AI 的报告表格,包含五次命中、生命值,以及你可能想不到的事项

所有检查全部通过,并附有关于按键、颜色和截图的说明。

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

  • 按了五次,命中五次。颜色依次是:白、白、金、白、金。
  • 生命值:100、83、69、45、29、6。
  • 超出范围的假人(667 个单位)毫发无损。
  • 生命值为 0 的假人倒下,并在致命一击后约 1 秒被销毁。
  • 数字在 0.8 秒结束前不久上升了 101 个单位。

它还告诉你哪些事情你可能想不到:

  • G 键是每一帧检查的,而不是通过按键事件,因为 AI 找不到旧版按键事件对应的工具句柄。在游戏中表现是一样的,你也可以要求改用 Enhanced Input 动作。
  • 正在死亡的假人会被跳过,所以下一次命中会打到下一个最近的假人。
  • AI 没有截取到屏幕上的金色数字,所以感叹号和更大的尺寸只是从图表中确认的。
  • 在最后一次运行中,击杀是通过直接调用假人的命中事件、造成 100 点伤害触发的。更早的一次运行只靠按 G 就击杀了一个假人,倒下和销毁的表现相同。

伤害飘字的工作原理,通俗讲

按下 G 时,控制器遍历所有假人,保留范围内最近的那一个。它在最小值和最大值之间随机取一个数,并告诉假人:承受这么多伤害。假人从自己的生命值中减去它。

接着控制器在假人头顶生成一个小的数字 Actor,并把伤害值交给它。如果伤害达到或超过暴击阈值,文字就是金色、更大,并带有感叹号。数字 Actor 带有一个 Timeline。在 0.8 秒内,它向上移动上升高度的距离,不透明度从 1 变到 0。然后它自行销毁。由于范围、阈值和上升高度都是变量,改四个数字,就能做出安静的数字,也能做出夸张的街机风格数字。

扩展思路

  • 火焰伤害和治疗使用不同的颜色。
  • 让数字略微向左或向右漂移,这样它们就不会叠在一起。
  • 暴击时音调更高的命中音效。

伤害飘字提示词的四个技巧

  1. 用数字给出伤害范围和暴击阈值。
  2. 用文字描述外观:颜色、大小和符号。
  3. 说明数字上升多高、持续多久。
  4. 要求 AI 查看截图,而不只是看数值。

常见问题

在 Unreal Engine 5 中,如何制作伤害飘字?

每次命中时,在目标上方生成一个带文字 Widget 的小 Actor。用 Timeline 让它向上移动并淡出,然后销毁它。根据伤害是否达到暴击阈值来选择颜色。

如何让暴击看起来不同?

把伤害与暴击阈值比较。达到或超过阈值时,使用金色、更大的尺寸和感叹号。

为什么 AI 要重新设置假人的根组件?

一张截图显示假人的身体有一半陷在地里,头却悬着,原因是身体成了 Blueprint 的根组件。AI 加了一个合适的根组件,并重新运行了测试。

在你的项目中试试

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

本系列的更多搭建: Unreal Engine 近战战斗、Unreal Engine 远程武器 和 Unreal Engine 爆炸桶。

你觉得怎么样?

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