Awesome
Unity-Formation-Movement2.0
Formation movement for Unity 3D using built in NavMesh navigation or A*Pathfinding
Summary
This Github repo contains the 2.0 version of my Formation Movement scripts rebuilt from scratch. The Formation Movement 2.0 allows you to move objects in a present formation shape towards a destination. It supports both AStarPathfinding and Unity built-in NavMesh navigation. Other features include:
- Preset formation shapes (easily expanded with your own).
- Changing formation on route. Includes a trigger class to change the formation.
- Evasion if formation followers get stuck on terrain features The scripts are free to use (see the license), feel free to ask questions or make pull requests but don’t expect on the spot support.
Version History
- Version 2.0 - Original upload
- Version 2.1 - Bug fix to solve a bug caused by FormationLeader.Start() called before Formation.Start(). Included FormationAddFollwerTrigger utility class and small update to Formation class which allows dynamically adding followers to the formation (as suggested by Adebanji I. in Youtube channel comments). Added a Formation Sample project (Unity 2020.3); open the "Formation Example 2" scene.
Pre-requisites
- If you want to make use of the Formation Animation Movement script (FormationAnimation.cs) then first download and import the Animation Controller into your project from: https://docs.unity3d.com/Manual/nav-CouplingAnimationAndNavigation.html
- If you prefer AStarPathfinding over Unity NavMesh then install the AStarPathfinding asset (https://arongranberg.com/astar/) and enable this option in Formation Movement 2.0 (it’s disabled by default, see below).
Quick start guide (Unity NavMesh)
Below script lists the steps explained in this video.
Create an environment for the formation to walk on.
The Cylinder at the top left will serve as the destination for the formation.
Prepare the Layers for the scene:
Assign the Terrain Layer to the Plane and the Obstacles layer to the Cubes. Next set the Plane and cubes to static.
Setup the Navmesh by using the [Bake] button:
Create a prefab from a sphere.
Click on the menu Window | Goodgulf | Formation Setup:
Click on "Set Navigation to Unity Navmesh" and wait for a couple of seconds to ensure compiling of the scripts has finished (typically NavMesh is the default so a compile is not necessary in a fresh project). Next click on "Create a formation":
The Formation and the Leader object have now been added to the hierarchy:
Add the Formation Follower script to the Sphere Prefab and set its Follower Stuck Mode to Random Walk:
Move the Sphere as a child object to the Leader and reset it’s coordinates then move it up a little:
Disable the Formation Follower script on the Sphere attached to the Leader.
In the Formation make the following changes:
- Add the Sphere prefab to the Follower Prefab property under the Demo section.
- Set Formation type to Circle:
- In the Layers section make the following changes:
- Terrain Layer name = “Terrain”
- Layer Mask Terrain = Terrain
- Layer Mask terrain and Obstacles = Terrain + Obstacles
In the Formation Agent script at the Cylinder from the hierarch into the Destination:
Now run the scene!
Additional Instructions
AStarPathfinding
After importing AStarPathfinding into your project, change the Formation to support AStartPathfinding by opening the Formation Setup (menu Window | Goodgulf | Formation Setup). Select the option "Set Navigation to AStarPathfinding" and wait for the compilation of the code to finish. Use your regular AStarPathfinding workflow to add navigation to your terrain. Don't forget to add any obstacle to the Obstacles Layer. You can use the Formation Setup menu to create a new Formation and Leader using AStarPathfinding or manually add the components. This is what the Formation object can look like:
The Seeker and AIDestinationSetter scripts are part of the AStarPathfinding solution. AIPathWithEvents inherits from AStarPathfinding's AIPath script; it adds an event to indicate the formation reached its destination.
Movement Animation
To use movement animation make sure you first import the Unity package mentioned in the pre-requisites section. It contains the animations and locomotion controller used by the FormationAnimation script you can add to the prefabs used by the formation leader and followers:
A typical setup of the script for the prefabs looks like this:
Basically the FormationAnimation script calculates the speed of the object and sets the Animation Controller's parameters (velx, vely, move) based on the speed of the object. An animation blend tree mixes the animations (contained in teh Unity download) for the object. This works best for a humanoid character. The Audio Source contains the sound clip which will be played when the object is moving (in this case marching boots).
Documentation
All scripts contain documentation which I think are sufficient to explain how this version of the Formation Movement works.
Pull Requests
As per below statement on support, I'll look at pull requests and see if changes/fixes you propose should be merged. Please note that I'm not a full time Unity developer so I'll need to do this outside working hours and in the weekend. Any request may be delayed.
Videos
Support
The scripts are free to use (see the license), feel free to ask questions or make pull requests but don’t expect on the spot support. The best place to ask questions is to leave a comment in my YouTube Channel. I'd appreciate it if you subscribe to the channel and like the Formation Movement videos if you plan to use this code.