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
MassAvoidanceTraitandMassSteeringTrait. 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
MassNavigationObstacleor 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.Centerwith 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!
