Seeking Advice on Mass Entity Movement, Collision (War3 Style), and Pathfinding with ZoneGraph

Hi everyone,

I am currently developing a Tower Defense game (inspired by Warcraft 3 heroes and StarCraft 2 movement) using Unreal Engine 5.7. My project heavily utilizes Mass Entity and ZoneGraph to handle 100~200 wave monsters and hero units.

I have a few technical questions regarding the implementation of movement and navigation:

Q1. Entity Overlapping & StarCraft 2-style Steering/Avoidance I’m currently facing issues where entities overlap or pass through each other. My goal is to achieve a “StarCraft 2” feel—fluid group movement, local avoidance, and realistic clumping.

  • I have configured my EntityConfig with MassAvoidanceTrait and MassSteeringTrait. Is there a “standard” or “best practice” configuration to achieve high-fidelity avoidance?

  • Weighting/Priority: I want Hero units to be able to “push” wave units aside, while wave units cannot push the Hero. How can I implement this hierarchical avoidance or “mass/weight” difference within the Mass Avoidance system?

  • Can the default parameters provided by the Mass framework achieve the level of polish seen in SC2, or do I need to implement a custom Steering Processor?

Q2. Defining Obstacles/Walls in a ZoneGraph-based setup I am using ZoneGraph for the main lanes (pathways) for the wave monsters. However, I’m stuck on how to handle “Walls” or static/dynamic obstacles.

  • What is the recommended way to define “Walls” that Mass entities should recognize? Should I use MassNavigationObstacle or integrate them directly into the ZoneGraph?

  • If players can build towers/walls during gameplay, how should these be updated so that Mass entities avoid them?

Q3. Pathfinding Logic: ZoneGraph vs. Target Pursuit Currently, monsters move along the ZoneGraph. However, once an attack target (e.g., a Hero or Tower) is detected, they need to break away and move toward the target.

  • Should I use a separate pathfinding solution (like MassSignal + MassStateTree) to handle this transition?

  • When moving toward a specific target, is it sufficient to simply update MassMoveTargetFragment.Center with the target’s location, or is there a specific “Pathfinding Processor” in Mass that handles local navigation toward dynamic targets?

I would greatly appreciate any insights, code snippets, or architectural advice from the community.

Thank you in advance!