Creating a Boss Enemy — Part 1, Waypoint Movement

Frank Warman
4 min readJun 4, 2021

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.

Incoming!

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!

--

--

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