可复用的系统架构
BP_Swarm 是整个系统的配置与运行中心,统一管理 Niagara、动画数据、材质和交互参数;BPC_SwarmInteraction 将角色输入与玩法事件转发给虫群;BP_DrawInfoOnRT 则把世界空间中的交互区域转换为 Render Target 数据。各部分职责相互独立,使系统能够接入不同角色和关卡,而不局限于单一演示。
项目概览
该项目最初用于支持《龙骑士》原型,随后从单一虫群特效扩展为一套可复用的实时 Agent 系统。系统将 VAT 动画、Neighbor Grid3D 邻居查询、粒子级伤害、Render Target 区域交互以及 GPU 到 Blueprint 的表现切换整合在同一套流程中,在保持大规模群体运行效率的同时,提供清晰的受击与死亡反馈。
职责范围
技术拆解
BP_Swarm 是整个系统的配置与运行中心,统一管理 Niagara、动画数据、材质和交互参数;BPC_SwarmInteraction 将角色输入与玩法事件转发给虫群;BP_DrawInfoOnRT 则把世界空间中的交互区域转换为 Render Target 数据。各部分职责相互独立,使系统能够接入不同角色和关卡,而不局限于单一演示。
通过 AnimToTexture 将骨骼动画转换为适合 Niagara Mesh Renderer 大规模播放的数据。每个 Agent 根据精简的动画数据协议独立选择 Idle、Walk、Hit 或 Death 状态,并计算对应帧范围与播放速度。替换角色时,只需重新生成 VAT 数据并配置新的动画片段,不需要重写核心模拟逻辑。
每帧先将 Agent 位置写入 Neighbor Grid3D,再从附近 Cell 查询邻居。这种分阶段处理能够支持群体分离和局部影响,同时避免让每个粒子遍历整个虫群。额外的选择阶段会记录最接近玩家瞄准方向的 Agent,并筛选最终射线目标,使玩法能够准确作用于某一个 GPU 粒子,而不是把虫群当作单一视觉特效。
系统提供三类互补的交互方式:射线单体命中、范围爆炸事件,以及通过 Render Target 写入的持续伤害区域。伤害以 Agent 为单位进行计算,并继续驱动生命值、受击状态、死亡判断、动画选择、血条位置与材质参数。Shot ID 与 Explosion ID 用于避免同一次事件在连续帧中被重复结算。
GPU 粒子适合高效模拟大规模群体,但无法承担所有复杂物理反馈。当 Agent 死亡或需要独立表现时,Niagara 会通过 Particle Callback 导出其世界位置和受击数据。BP_Swarm 在对应位置生成 BP_Agent,传递冲击信息,并将最终死亡表现交给骨骼 Ragdoll 与方向性 Impulse。
当前研发分支正在探索通过 Render Target 传递 Flow Field 引导信息,并使用 GPU Distance Field 查询支持 Agent 在邻近表面上的附着与移动。距离和梯度数据为表面定位、朝向计算及沿表面移动提供基础。该部分作为核心虫群系统的扩展方向展示,不作为已经完全完成的功能。
工具