Enemies
Health, weapons, movement modes and death feedback — all configured on a Blueprint, with no C++ subclassing.
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
| Component | Purpose |
|---|---|
| Capsule | The collision shape and root. Sized in the Blueprint. |
| Mesh | The visible model, attached to the capsule. |
| Health | Hit points, invulnerability and the death event. See Health, Shields & Energy. |
| Weapon Front | The default weapon mount. See Weapons. |
Contact damage
| Property | Default | Purpose |
|---|---|---|
| Contact Damage | 0 | Damage dealt to an opposing pawn on collision. 0 means the enemy is harmless to touch. |
| Takes Contact Damage | On | Whether this pawn is hurt by contact in return. Turn it off for something that should ram the player without wearing itself down. |
| Applied Contact Knockback | 0 | How hard it shoves whatever it hits. |
| Received Knockback Scale | 1 | Multiplier on knockback received. 0 makes it immovable — right for a heavy tank or a boss. |
| Received Knockback Decay | 8 | How 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.
| Property | Default | Purpose |
|---|---|---|
| Death Effect | — | Niagara system spawned on death. Automatically attached to the scrolling world, so the explosion travels with the ground instead of hanging in the air. |
| Death Sound | — | Played at the death location. |
| Hit Camera Shake | — | Shake on taking damage. |
| Death Camera Shake | — | Shake 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 Scale | 0.8, 1.2, 1 | The scale the mesh springs to when hit, then recovers from. A quick squash reads as impact far better than a colour flash alone. |
| Squash Stiffness | 250 | Spring strength of the recovery. Higher snaps back faster. |
| Squash Damping | 12 | How much the spring is damped. Lower wobbles for longer. |
| Hit Flash Duration | 0.05 | Seconds per flash pulse. 0 disables flashing. |
| Hit Flash Count | 3 | Number of pulses per hit. |
| Hit Flash Intensity | 10 | Value written to the material parameter. |
| Hit Flash Param Name | HitFlash | The scalar parameter driven on the mesh's material. Your material needs a parameter of this name for flashing to show. |
Enemy properties
| Property | Default | Purpose |
|---|---|---|
| Score Value | 0 | Points awarded on death. 0 awards nothing. |
| Drop Table | — | What this enemy drops. See Pickups & Drops. |
| Despawn When Offscreen | On | Returns 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 Follow | — | The movement component, covered next. |
| Formation Index | -1 | Read-only at runtime. Which slot of a formation this enemy occupies, so per-member drops and fire delays can be applied. |
Movement
USKPathFollowComponentOne component handles every enemy movement style. Pick a Movement Mode; only the properties relevant to that mode are shown in the details panel.
| Mode | Behaviour |
|---|---|
| Stationary | Holds position. Correct for turrets and for anything riding the scrolling terrain, which is already being carried along by the world. |
| Patrol | Slides back and forth along an axis, around its spawn point. |
| Chase | Moves toward the player while they are within range. |
| Follow Path | Flies a route authored as a Path asset. |
| Sway | Drifts in a smooth oscillation around its home position — a gentle hover for something holding station. |
Shared
| Property | Default | Purpose |
|---|---|---|
| Move Speed | 300 | Base speed for whichever mode is active. |
| Speed Override | 0 | Set by a wave step or spawn point to retune this instance. 0 keeps the enemy's own speed. |
| Bank Angle | 15 | Degrees the mesh rolls into a turn. Purely visual, and the same motion the player ship uses. |
| Bank Lerp Speed | 8 | How quickly it eases into the roll. 0 is instant. |
Per mode
| Property | Mode | Purpose |
|---|---|---|
| Patrol Range | Patrol | How far it travels either side of its spawn point. |
| Patrol Axis | Patrol | Direction of travel. Defaults to (0,1,0) — side to side across the screen. |
| Chase Radius | Chase | How close the player must be before it gives chase. |
| Path Data | Follow Path | The route asset to fly. |
| Mirror Path | Follow Path | Flips the route horizontally, so one authored path serves both sides of the screen. |
| Sway Amplitude | Sway | How far it drifts on each axis. Defaults to no vertical drift and 120 units sideways. |
| Sway Frequency | Sway | Cycles per second. |
| Sway Ease Speed | Sway | How quickly the sway fades in when it starts. |
| Return Speed | Sway | Speed used when returning to the home position. |
Blueprint hooks
Override these in your enemy Blueprint from the Functions → Override panel.
| Event | Fires |
|---|---|
| On Pawn Damaged | Whenever damage lands, with the amount and the causer. |
| On Pawn Death | When the enemy dies, before it returns to the pool. |
| On Enemy Scored | When 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.
| Property | Default | Purpose |
|---|---|---|
| Ignore Damage Off Screen | On | On the health component. Turn it off for an enemy that should be killable before it arrives. |
| Off Screen Damage Margin | 0 | Extra world units past the edge before damage stops registering. Raise it to let shots connect just out of view. |
Building an enemy
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.
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.
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.
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.
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
HitFlashscalar parameter - It doesn't shoot — the weapon mount has no Weapon Data, or its Faction matches its target