Separate the group target from unit targets
A common mistake is sending every unit directly to the same destination. Instead, calculate a group target and derive one local target for each unit. This preserves spacing and gives the movement system a stable reference even when the destination changes.
Formation offsets
Store each unit position as an offset from the formation anchor. The offsets can be generated from rows, circles, arcs, wedges or custom layouts. Because the offsets are local, the whole group can rotate or translate without rebuilding the layout.
Facing and orientation
The formation needs a meaningful forward direction. Rotate local offsets by the formation orientation before converting them to world positions. This lets a squad turn as a group while each unit still receives its own target position.
Regrouping
Units rarely arrive at their slots at exactly the same time. Use a tolerance around each target and distinguish between moving, nearly arrived and regrouping states. This avoids constantly rebuilding the formation because one unit is a few centimetres behind.
Obstacle handling
The slot target should be treated as a desired position, not a guarantee. Navigation or steering can adjust the path around obstacles while the formation layer continues to express the intended arrangement.
Keeping movement readable
Avoid combining too many competing steering rules. Formation following should have a clear priority, with collision avoidance and local separation correcting the final movement rather than destroying the formation shape.
When to add more behaviour
Only add flow fields, boids-style steering, noise or advanced regrouping when the game needs them. A small, predictable movement stack is usually easier to tune than a large collection of interacting rules.
Conclusion
The most reliable Unity workflows separate responsibilities, make expensive work predictable and turn repeated checks into repeatable systems. Start with a small implementation, measure the real bottleneck and expand only when the project needs it.