我为一个类似 Weeping Angel / SCP-173 的生物实现了逻辑,并且只在玩家不注视它的时候才移动。可以通过多种方式来实现交互,但在我的 Unreal 5.3 蓝图项目中,我选择了使用线条追踪、自定义枚举(玩家眼睛的状态:开启、关闭或眨眼)以及有用的(但并不完全可靠)WasComponentRecentlyRendered 节点的组合。

我还添加了一个阴影标签,因为玩家不想知道这个生物会在什么时候暴露自己才会更有趣,但这就是事实。

以下是简化的步骤列表:

  1. Blender 中的 Array Modifier
  2. 在 Blender 中使用一个空的 Array Modifier 来创建多臂生物,Array Modifier 的父级是从网络上找到的免费基底网格中分离出的臂部网格。
  3. Unreal 中的生物蓝图设置
  4. 将 Blender 中导出的 FBX 导入一个新的蓝图中,确保所有静态网格组件都是一个父级场景组件的子级,以便于后续的旋转操作。
  5. 检查玩家的视线
  6. 创建一个自定义函数,返回一个多个布尔值,表明生物是否能看到玩家,玩家是否能看到生物。使用线条追踪和 WasComponentRecentlyRendered 节点来检查生物是否在屏幕上可见。
  7. 设置生物的旋转目标
  8. 如果生物不可见,设置一个新的旋转目标旋转器,并让生物的父级场景组件在 Tick 事件中使用 RInterpTo 节点来平滑旋转到新位置。
  9. 与事件分发器的重叠检查
  10. 这个生物会关闭它正在看向的灯光,所以使用一个碰撞球和一个自定义事件分发器来让其他角色知道生物有了新的视线并且它的视线碰撞是重叠的。