mirror of
https://github.com/kuhyx/praca_magisterska.git
synced 2026-07-04 13:23:05 +02:00
4.2 KiB
4.2 KiB
Part 5: Create Enemy Spawner
← Previous: Part 4 - Create the Enemy | Back to Index | Next: Part 6 - Game Director →
Step 5.1: Create Spawner Blueprint
-
Content Browser → Blueprints
-
Right-click → Blueprint Class → Actor
-
Name:
BP_EnemySpawner -
Double-click to open
-
Create Variables:
| Variable Name | Type | Default Value |
|---|---|---|
EnemyClass |
Class Reference | (will reference BP_Enemy) |
SpawnAreaHalfWidth |
Float | 900.0 |
GameDuration |
Float | 300.0 (5 minutes) |
MaxSimultaneousEnemies |
Integer | 120 |
ElapsedTime |
Float | 0.0 |
SpawnTimer |
Float | 0.0 |
SpawningActive |
Boolean | true |
Expected Result after Compile
- Compile button shows GREEN checkmark
- Variables panel shows all 7 variables with correct types
- No components needed (spawner is invisible logic actor)
Step 5.2: Spawn Rate Curve
1. Create Variable
SpawnCurve(Curve Float)
2. To create the curve asset
- In Content Browser, right-click → Miscellaneous → Curve
- Select "CurveFloat"
- Name it
SpawnRateCurve - Double-click to open Curve Editor
3. In Curve Editor
- Right-click on the curve → Add Key
- Create these keyframes:
| Time | Value | Description |
|---|---|---|
| 0.0 | 0.4 | slow spawn at start |
| 0.5 | 2.0 | medium spawn halfway |
| 1.0 | 4.5 | fast spawn at end |
- The X axis is normalized time (0-1)
- The Y axis is spawns per second
4. In BP_EnemySpawner, set SpawnCurve default to this curve asset
Expected Result in Curve Editor
- Curve line visible starting at (0, 0.4), rising through (0.5, 2.0), ending at (1.0, 4.5)
- Smooth interpolation between keyframes
Expected Result in Play mode
- Game start: ~0.4 enemies spawn per second (slow)
- At 2.5 minutes: ~2 enemies spawn per second (medium)
- At 5 minutes: ~4.5 enemies spawn per second (intense)
Step 5.3: Spawning Logic
1. In Event Graph, from Event Tick
a) Check if SpawningActive is true
- If false, do nothing
b) Update ElapsedTime
- Add DeltaSeconds to ElapsedTime
c) Calculate normalized time
- Divide ElapsedTime by GameDuration
- Clamp between 0 and 1
d) Get spawn rate from curve
- Get SpawnCurve
- Call
Get Float Valuewith normalized time - This returns spawns per second
e) Update SpawnTimer
- Subtract DeltaSeconds from SpawnTimer
- If SpawnTimer <= 0:
- Reset SpawnTimer to
(1.0 / SpawnsPerSecond) - Call SpawnWave function
- Reset SpawnTimer to
2. CREATE "SpawnWave" FUNCTION
a) Inside
-
Calculate burst size based on time:
BaseCount = 1 + (NormalizedTime * 6) BurstSize = BaseCount + Random(0, 2) Clamp between 1 and 12
b) For Loop from 0 to BurstSize - 1
- Call SpawnEnemy function
3. CREATE "SpawnEnemy" FUNCTION
a) Inside
- Check: Get All Actors of Class (BP_Enemy)
- Get array length
- If >= MaxSimultaneousEnemies: Return (don't spawn)
b) Calculate spawn position
- X = Random Float in Range (-SpawnAreaHalfWidth, SpawnAreaHalfWidth)
- Y = Get this actor's Y position (top of screen)
- Z = 0
c) Spawn Actor from Class
- Class: EnemyClass
- Location: calculated position
- Rotation: (0, 0, 0)
4. CREATE "StopSpawning" FUNCTION
- Set SpawningActive = false
Expected Result after Compile
- Compile button shows GREEN checkmark
- "SpawnWave", "SpawnEnemy", "StopSpawning" functions appear under Functions
Expected Result in Play mode
- Enemies spawn at top of screen (Y=500) at random X positions
- Spawn rate increases over time following the curve
- Maximum 120 enemies on screen at once
- When StopSpawning called: No new enemies appear
← Previous: Part 4 - Create the Enemy | Back to Index | Next: Part 6 - Game Director →