Creating a Boss Enemy — Part 1, Waypoint Movement

Well, the Galaxy Shooter game is almost ready to be released into the world, but it’s missing one final touch! A Big Bad Boss Enemy to test our Player’s skills!

In the next few articles we’ll be creating a Boss Enemy that has a few intricate parts that all work together. The Boss will have a new movement system, waypoints, which we’ll cover in this article.


The Boss Aesthetic

Obviously, the Boss has to stand out and feel pretty gargantuan. So I’ve added a few features and a couple parts to make it feel that way.

Boss full preview

It’s not a super complicated mish-mash, I’m still just reusing assets, haha. The base is a regular Enemy sprite, scaled up of course, and I have two Player ship sprites behind the base to give the Boss a kind-of crown aesthetic.

Then I tinted them a shade of blue, because then I surround them with an Asteroid Belt of Freeze Asteroids (that will eventually revolve around the Boss and have a small enlarging-animation).

The Hierarchy of my Boss:

Then I added the Rigidbody 2D (gravity scale = 0), Circle Collider 2D (Is Trigger, around the Boss only; not the Asteroid Belt).

And created and attached a new EnemyBoss script to add all of our logic.

Creating a Waypoint system

Since I wanted the Boss to feel special, rather than just let fall down screen and reappear at the top, I created a basic waypoint system for them to follow.

It consists of 3 waypoints that the Boss chooses randomly when it reaches it’s destination.

So let’s jump inside the EnemyBoss script and create a few Global variables:

  • _bossWaypoints = will be populated soon and contains our Waypoints.
  • _randomWaypoint = the random waypoint to go to next
  • _bossSpeed = the speed at which the Boss moves

Then we’ll utilize these in the Boss’s Movement() function, which is called in the Update() function:

So when the Boss reaches any destination, it will then choose a random destination from our Array then move towards the new _randomWaypoint.

  • * Inside my if statement conditions, the sign “||” denotes the keyword “or”. So if it reaches waypoint 0 OR 1 OR 2, then it will choose a new waypoint.

Creating the Waypoints

Next we have to create the waypoints that our Boss will go to. We do this by creating 3 Empty Game Objects with coordinates (their transform position) we want the Boss to move to.

I placed them in another Empty Parent Object for tidiness:

Boss Waypoints

Each Waypoint has a different transform:

Scene window:

After creating these empty Waypoints, we then need to link them to our Boss Inspector:

Waypoints linked

For the starting Waypoint, I chose to make the Boss go to ‘C’ first because it’s the lowest point the Boss will go, giving the Player a good reference point.

You can choose the Boss’s starting waypoint in the Inspector, or through code in the Start():

If done correctly, your Boss (or any other Enemy you choose) now uses a Waypoint system to navigate in-Game! This is just a basic system, but works very well for our 2D Space Shooter!

In the next article we’ll give the Boss the ability to shoot some projectiles!



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Frank Warman

Frank Warman

Audio Engineer turned Unity Game Dev. Will be combining both my skillsets when appropriate, and will be documenting my Unity Dev growth in these Medium Articles