蝴蝶

ButterflyHeader.png

概述

关卡中心的两只机械蝴蝶就是蓝图被用来创建基本的AI行为的例子。蝴蝶将会飞过特定的中心点,在试图返回中心点休息前,时不时会随机变化方向。当它们遇到物体后,它们会飞向它并落在其上,停留一会后会再次起飞。蝴蝶飞的时间越长,它停留休息的时间就越长。

蝴蝶蓝图Actor并不是在关卡中自行移动;而是由其组件完成。蝴蝶是由两个翅膀网格及其子项的身体网格组成。每个网格由时间轴节点来动画化,这使得在身体在上下振动时,翅膀会拍打起来。事件图表驱动蝴蝶组件向前移动,此时会在一定半径内面向随机点,每几秒就飞向选取的一个新的点。

一个叫 Attractor Location 的向量变量为_Editiable(可编辑)_, 这就意味着用户可编辑此变量。这个变量还会显示一个3D控件,允许其被移动来确认蝴蝶飞行距离的中心点。在飞了一段时间后,脚本会让蝴蝶飞回到此点,这会防止其偏离得太远。

在蝴蝶飞的时候,它会不断地根据前方的线形轨迹来查看障碍物。当此线形轨迹碰到物体后,它会提供碰撞点的方位和法线(表面角度)。该数据随后会被用来计算蝴蝶落下时的角度和位置。随后会播放时间轴,并且线性插值节点会将蝴蝶从其目前的位置平滑地转换到其着陆位置。

另一个时间轴动画化的系统是为了驱动应用于蝴蝶翅膀材质的参数,这使得它们随电光特效而波动。

作为实验,在树旁创建静态网格并观察蝴蝶的行为。只要网格在蝴蝶的飞行路线上并有碰撞表面,AI系统会将其检测为可着陆的表面并且蝴蝶将会尝试在上面着陆。

landingOnPyramid.png

Blueprint(蓝图)设置

蓝图的组件列表,构建脚本,以及事件图表执行以下任务:

蓝图内容 目的
组件列表

Components List 会将蝴蝶按照以下方式进行组合(缩进代表父类):

ButterflyComponentList.png

身体和翅膀组件为静态网格,而尾迹组件为粒子系统。

构建脚本

Construction Script (构建脚本)执行以下任务:

  • 为引力器对象分配初始位置。

  • 对翅膀静态网格物体创建并分配材质实例动态 (MID)

  • 从显示的 细节 面板属性中收集材质设置数据,将其应用于材质。

事件图表

Event Graph (事件图表)执行以下任务: 游戏一开始-

  • 建立并开始翅膀材质的动画。

  • 每帧(每次更新)都会将蝴蝶向前移动。

  • 更新蝴蝶的旋转,轻轻地使其转向目标。

  • 执行碰撞检测并确认我们是否应开始一个着陆序列。

  • 对翅膀和身体进行动画化。

  • 一旦着陆后,休息一会。

  • 休息后,飞回着陆序列之前的上个地点。

  • 选取新对象并再次开始。

可编辑变量

系统中呈现的变量控制引力器点的中心位置,以及被应用于翅膀的材质参数。

Properties_Butterfly.png

属性 目的
引力器位置 此变量让用户自定义AI的中心点。蝴蝶会定期飞回此点。此变量也启用了3D控件,使得向量能通过视口中的控件来设置,选中蓝图时可见。
最大飞行距离 这是虚幻单位中蝴蝶能飞离引力器位置点的最大半径。
翅膀颜色 此属性允许您自定义蝴蝶翅膀的颜色。因为蓝图的每个实例接收各自的材质实例动态(MID),您的关卡中可能会存在多个蝴蝶,每个都有独特的颜色。