Enemies

Health, weapons, movement modes and death feedback — all configured on a Blueprint, with no C++ subclassing.

👾Blueprint-only
⏱️10 min read
🧭5 movement modes
♻️Pooled
ASKEnemyBase

An enemy is a pawn with health, a weapon and a movement mode. Everything below is set on a Blueprint child of SKEnemyBase — you never subclass in C++ to make a new enemy type.

Enemies are pooled. They are hidden and reused rather than destroyed, which is what lets a stage throw hundreds of them at the player without hitching. The kit resets their state for you on reuse; the only thing to remember is covered under Object Pooling.

Shared pawn features

Enemies, bosses and the player all inherit from the same pawn base, so these apply to every one of them.

Components

ComponentPurpose
CapsuleThe collision shape and root. Sized in the Blueprint.
MeshThe visible model, attached to the capsule.
HealthHit points, invulnerability and the death event. See Health, Shields & Energy.
Weapon FrontThe default weapon mount. See Weapons.

Contact damage

PropertyDefaultPurpose
Contact Damage0Damage dealt to an opposing pawn on collision. 0 means the enemy is harmless to touch.
Takes Contact DamageOnWhether this pawn is hurt by contact in return. Turn it off for something that should ram the player without wearing itself down.
Applied Contact Knockback0How hard it shoves whatever it hits.
Received Knockback Scale1Multiplier on knockback received. 0 makes it immovable — right for a heavy tank or a boss.
Received Knockback Decay8How quickly a knockback impulse bleeds off. Higher settles sooner.

Hit and death feedback

All optional. Leave a slot empty and that piece of feedback simply doesn't play.

PropertyDefaultPurpose
Death EffectNiagara system spawned on death. Automatically attached to the scrolling world, so the explosion travels with the ground instead of hanging in the air.
Death SoundPlayed at the death location.
Hit Camera ShakeShake on taking damage.
Death Camera ShakeShake on dying. Identical shakes fired in the same instant are coalesced, so a wave dying together doesn't multiply into a screen-breaking jolt.
Hit Squash Scale0.8, 1.2, 1The scale the mesh springs to when hit, then recovers from. A quick squash reads as impact far better than a colour flash alone.
Squash Stiffness250Spring strength of the recovery. Higher snaps back faster.
Squash Damping12How much the spring is damped. Lower wobbles for longer.
Hit Flash Duration0.05Seconds per flash pulse. 0 disables flashing.
Hit Flash Count3Number of pulses per hit.
Hit Flash Intensity10Value written to the material parameter.
Hit Flash Param NameHitFlashThe scalar parameter driven on the mesh's material. Your material needs a parameter of this name for flashing to show.
The flash restores the material's original value rather than resetting to zero, so a glowing enemy keeps its glow between flashes. The same system drives the blinking used for respawn invulnerability.

Enemy properties

PropertyDefaultPurpose
Score Value0Points awarded on death. 0 awards nothing.
Drop TableWhat this enemy drops. See Pickups & Drops.
Despawn When OffscreenOnReturns the enemy to the pool once it has genuinely left the view, so a missed enemy doesn't tick forever. It does not count as a kill — no score, no drops.
Path FollowThe movement component, covered next.
Formation Index-1Read-only at runtime. Which slot of a formation this enemy occupies, so per-member drops and fire delays can be applied.

Movement

USKPathFollowComponent

One component handles every enemy movement style. Pick a Movement Mode; only the properties relevant to that mode are shown in the details panel.

ModeBehaviour
StationaryHolds position. Correct for turrets and for anything riding the scrolling terrain, which is already being carried along by the world.
PatrolSlides back and forth along an axis, around its spawn point.
ChaseMoves toward the player while they are within range.
Follow PathFlies a route authored as a Path asset.
SwayDrifts in a smooth oscillation around its home position — a gentle hover for something holding station.

Shared

PropertyDefaultPurpose
Move Speed300Base speed for whichever mode is active.
Speed Override0Set by a wave step or spawn point to retune this instance. 0 keeps the enemy's own speed.
Bank Angle15Degrees the mesh rolls into a turn. Purely visual, and the same motion the player ship uses.
Bank Lerp Speed8How quickly it eases into the roll. 0 is instant.

Per mode

PropertyModePurpose
Patrol RangePatrolHow far it travels either side of its spawn point.
Patrol AxisPatrolDirection of travel. Defaults to (0,1,0) — side to side across the screen.
Chase RadiusChaseHow close the player must be before it gives chase.
Path DataFollow PathThe route asset to fly.
Mirror PathFollow PathFlips the route horizontally, so one authored path serves both sides of the screen.
Sway AmplitudeSwayHow far it drifts on each axis. Defaults to no vertical drift and 120 units sideways.
Sway FrequencySwayCycles per second.
Sway Ease SpeedSwayHow quickly the sway fades in when it starts.
Return SpeedSwaySpeed used when returning to the home position.
Ride or fly, never both. An enemy either rides the scrolling terrain (Stationary or Patrol, no path — it is attached to the world and carried along) or flies a path under its own power. A path follower is never attached to the terrain even when a spawner asks for it, because being driven by both the path and the scroll would double its speed and drag it off the bottom of the screen early.
Terrain-locked movement has limits. A ground unit riding an island can be Stationary or patrol side to side. Moving it up and down the scroll axis, or along a route on the island, is not something the movement component does — author that in the enemy Blueprint using local movement. Because the enemy is attached to the scrolling background, local motion rides and moves.

Blueprint hooks

Override these in your enemy Blueprint from the Functions → Override panel.

EventFires
On Pawn DamagedWhenever damage lands, with the amount and the causer.
On Pawn DeathWhen the enemy dies, before it returns to the pool.
On Enemy ScoredWhen its score is awarded, with the points — for a floating score number or a combo counter.

Silent Kill removes an enemy without awarding score or spawning drops — the right call for scripted clean-up.

Off-screen protection

Enemies ignore damage while they are above the top or below the bottom of the view. Without this, a fast shot can kill an enemy before the player ever sees it: damage numbers pop at the screen edge and its pickups drift in from nowhere with nothing visibly having died.

PropertyDefaultPurpose
Ignore Damage Off ScreenOnOn the health component. Turn it off for an enemy that should be killable before it arrives.
Off Screen Damage Margin0Extra world units past the edge before damage stops registering. Raise it to let shots connect just out of view.
Only the top and bottom edges are tested, never the sides. The camera pans sideways with the player, so a side test would make enemies briefly invulnerable whenever the view moved off them while they were still perfectly visible.

Building an enemy

1

Create the Blueprint

New Blueprint Class → search SKEnemyBase. Set the Mesh, and size the Capsule to roughly match it — the capsule is what the player's bullets actually hit.

2

Set health and reward

On the Health component set Max Health and set Faction to Enemy. On the enemy itself set Score Value and, if it should drop anything, a Drop Table.

3

Arm it

Select Weapon Front, set its Weapon Data, and set its Faction to Enemy so its shots pass through other enemies. Enemies fire by themselves — no trigger setup is needed.

4

Give it movement

On Path Follow, choose a Movement Mode. Leave it Stationary for a turret that rides the terrain, or pick Follow Path and assign a Path asset for a flyer.

5

Add feedback

Assign a Death Effect and Death Sound, and check the mesh material exposes a HitFlash scalar parameter if you want the hit flash to show.

Common fixes

  • Bullets pass straight through — the capsule is too small, or the Health component's Faction matches the shooter
  • It dies before entering view — expected, and prevented by Ignore Damage Off Screen; check it hasn't been turned off
  • It never appears — a path follower placed on a spawner set to attach to terrain still flies free by design; check the path's start position
  • No hit flash — the mesh material has no HitFlash scalar parameter
  • It doesn't shoot — the weapon mount has no Weapon Data, or its Faction matches its target

Where next

Spawning & Waves

Get these enemies into a level, by placement or on a timer.

Read →

Bosses

Multi-part bosses, phases and the boss health bar.

Read →

Pickups & Drops

Drop tables, weighted rolls and scatter.

Read →