Player Advantage? Enemies Destroy The Power-Ups! (Part 2)

Shooting at Powerups in front of them is good, but what if they could destroy any powerup, anywhere? Following on from Part 1, we’ll make the enemies able to shoot any Powerup at a lower Y position than them.

Today’s Objective: Make the enemies shoot at and destroy any power-ups that are in front of them, stopping the player from collecting them. The Powerups do not need to be directly in front of them with this version.

First I add a Line Renderer component to my Enemy prefab:

Add the Line Renderer component
Set its Width and Color to be like my laser, and set Use World Space to true

Then, I make some new variables in my Spawn Manager script:

  • A public static List of Transforms for all currently existing Items.
  • A public static Boolean variable to return if any Items currently exist.
  • A public static Int variable to return the Item count.
  • And a public static function to update the List.

The function is called when an Item is spawned, adding it to the list, and when an Item is destroyed, removing it.

The Laser-Targetting Process in the Enemy Gun script:

  1. Get a list of all Powerups in the scene.
  2. Remove any Powerups behind the Enemy (plus a buffer distance) from the list.
  3. Find the closest Powerup to the Enemy in that list, and set as the target.
  4. Optional: I have 2 ship guns, so I will use distance to choose which gun to shoot from.
  5. Activate the Line Renderer and target the targeted Powerup for the duration of the shot.
  6. Destroy the Powerup and deactivate the Line Renderer.

Get and sort the list of Powerups:

Get the closest Powerup:

Determine which gun, maintain the Line Renderer, and Destroy the Powerup:

Create a new IEnumerator coroutine

Inside the coroutine, add the following:

Delay before starting, get the target, and a null-check
Determine the gun to use, and enable the Line Renderer
Start a while loop until [duration] passes, updating the Line Renderer point positions every frame
Disable the Line Renderer, and if the target still exists, destroy it

Also make a public function to start the coroutine:

Lastly, we need to determine when these functions will be called:

I want it to happen every time the enemy exits the bottom of the screen and repositions to the top. So I will go to my code that checks if it has reached the bottom of the screen:

And the result:

A dynamic Anti-Powerup Laser!

I think it turned out great, and maybe with a low chance of activating, would be a good additional difficulty for players. I think I’ll set it to a 5% or 10% chance an enemy will target a powerup every time they reposition to the top of the screen.

--

--

--

Unity game developer / C# Programmer / Gamer. Australian (Tasmanian) indie games developer for 10+ years. Currently looking for games industry employment.

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Algorithm Efficiency

Micro Front Ends — The Conflict TERMINATOR

Top Reasons an MDM Implementation Fails

Featured Story: Resolving the curve of team adoption of agile

Game Theory in Competitive Programming Series: Part 1

How to Host a Dynamic Web Page With PowerShell on AWS Lambda and API Gateway

How to Fix Printer Driver Is Unavailable |Call Printer Support Number +1-855–948–3900

Interview Questions: How to improve the performance of your database

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
Vincent Taylor

Vincent Taylor

Unity game developer / C# Programmer / Gamer. Australian (Tasmanian) indie games developer for 10+ years. Currently looking for games industry employment.

More from Medium

The Last Challenge: Using Timeline For A Gameplay Sequence

Adding Occlusion Culling to our URP project

Platformer: Death Animation

My journey becoming a Unity game developer: 2.5D