🎵 Dynamic Battle Music

Automatic Music Transitions Based on Enemy Detection

Version 2.0.0 UE 5.6 / 5.7 100% Blueprint

⚡ Quick Start Guide

Get dynamic battle music running in 5 minutes!

1 Enable the Plugin

  1. Go to Edit → Plugins
  2. Search for "Dynamic Battle Music"
  3. Check Enabled and restart the editor

2 Add Component to Player

  1. Open your Player Character Blueprint
  2. Click Add Component
  3. Search for "Battle Music Component"
  4. Add it to your character

3 Assign Music Tracks

Select the Battle Music Component and in Details panel:

  • Calm Music — Your exploration/ambient track
  • Battle Music — Your combat/action track

4 Tag Your Enemies

Add the tag Enemy to all enemy actors:

  1. Open Enemy Blueprint
  2. Select the root component (Self)
  3. In Details → Tags → Add "Enemy"

5 Play!

That's it! Music will automatically switch when enemies are nearby.

🎵 Calm Music
⚔️ Battle Music
💡 Auto-Start Enabled by Default

Music starts automatically when the game begins. Disable bAutoStart if you want manual control.

🔧 Component Setup

Basic Configuration

PropertyDefaultDescription
Calm MusicNoneSound asset for exploration/peaceful state
Battle MusicNoneSound asset for combat state
Detection Radius2000 cm (20m)How far to detect enemies
Enemy Tag"Enemy"Tag used to identify enemies
Check Interval0.5 secHow often to scan for enemies
Fade Time2.0 secCrossfade duration between tracks
State Cooldown1.0 secMinimum time between state changes
Auto StartTrueStart music on BeginPlay
Initial Volume1.0Starting volume (0.0-1.0)

V2.0 Advanced Features

⭐ Priority System

Different music for Boss/Elite/Regular enemies. Higher priority overrides lower.

📊 Intensity Modulation

Volume scales with enemy count. More enemies = louder music.

💾 Music Memory

Resume tracks from last position instead of restarting.

💀 Dead Enemy Filtering

Automatically ignore dead enemies (requires "Dead" tag).

🔄 Music States

State Machine

StateConditionMusic Playing
CalmNo enemies in detection radiusCalm Music track
BattleOne or more enemies detectedBattle Music (or custom priority music)
FadingTransitioning between statesCrossfading between tracks

Transition Flow

State Transition Logic
Calm State
Enemy Detected → Fading → Battle
Battle State
No Enemies → Fading → Calm
Cooldown prevents rapid state flickering

🎯 Enemy Detection

How Detection Works

  1. Every CheckInterval seconds, performs sphere overlap
  2. Finds all actors with EnemyTag within DetectionRadius
  3. Filters out dead enemies (if bIgnoreDeadEnemies enabled)
  4. Determines highest priority enemy (if priority system enabled)
  5. Triggers state change if needed

Detection Settings

PropertyDescription
Detection RadiusSphere radius in cm (2000 = 20 meters)
Enemy TagTag to identify enemies (default: "Enemy")
Detection ChannelCollision channel for overlap (default: Visibility)
Check IntervalSeconds between scans (0.5 = twice per second)
Ignore Dead EnemiesSkip actors with "Dead" tag
Dead Enemy TagTag identifying dead enemies (default: "Dead")
💡 Debug Visualization

Enable bShowDebug to see a colored sphere: Green = Calm, Red = Battle

⭐ Priority System

Play different music for different enemy types. Boss music overrides elite, elite overrides regular.

Priority Levels

PriorityLevelUse Case
BossHighestBoss fights, major encounters
EliteMediumMini-bosses, elite enemies
RegularLowestStandard enemies (uses default Battle Music)

Setup Priority System

1 Enable Priority System

Check bUsePrioritySystem in component settings.

2 Configure Enemy Priorities

Add entries to EnemyPriorityConfigs array:

Enemy TagPriorityCustom Music
"Boss"BossBossMusic_Cue
"Elite"EliteEliteMusic_Cue
"Enemy"RegularNone (uses Battle Music)

3 Tag Your Enemies

  • Regular enemies: Tag = Enemy
  • Elite enemies: Tags = Enemy + Elite
  • Boss enemies: Tags = Enemy + Boss
📝 Priority Logic

If you're fighting 5 regular enemies and 1 boss enters, music immediately switches to boss music. When boss dies, returns to regular battle music.

📊 Intensity Modulation

Music volume scales dynamically based on how many enemies you're fighting.

Intensity Levels

IntensityEnemy CountDefault Volume
Low1-2 enemies60%
Medium3-5 enemies80%
High6+ enemies100%

Configuration

PropertyDefaultDescription
bUseIntensityModulationfalseEnable/disable feature
MinIntensityVolume0.6Volume at 1 enemy
MaxIntensityVolume1.0Volume at 6+ enemies
💡 Use Case

Creates tension that builds as more enemies join the fight. A single enemy feels like a skirmish, a horde feels epic!

📘 Blueprint Functions

Playback Control

Start Music

Begin music playback. Called automatically if bAutoStart is true.

Exec
Stop Music

Stop all music playback.

Force Battle Music

Immediately switch to battle music (ignores detection).

Force Calm Music

Immediately switch to calm music (ignores detection).

Set Music Volume

Change music volume. Useful for cutscenes or dialogue.

New Volume (0.0-1.0)

State Queries

Get Current Music State
State (EMusicState)
Get Detected Enemy Count
Count (int)
Get Current Enemy Priority
Priority (EEnemyPriority)
Get Current Intensity
Intensity (EMusicIntensity)

Utility

Reset First Enemy Flag

Reset OnFirstEnemyDetected event. Use when restarting level.

📡 Events (Delegates)

On Music State Changed

On Music State Changed

Fires when music state changes (Calm ↔ Battle).

New State (EMusicState)
Old State (EMusicState)
Use for UI updates, visual effects, gameplay changes

On First Enemy Detected

On First Enemy Detected

Fires ONCE when first enemy is detected (per session).

First Enemy (Actor)
Great for tutorials, achievements, first-time effects

On Music Intensity Changed

On Music Intensity Changed

Fires when intensity level changes (Low/Medium/High).

New Intensity (EMusicIntensity)
Enemy Count
Use for visual intensity effects, screen shake, etc.

📖 How To Guides

How to: Show Combat UI When Battle Starts

Bind to On Music State Changed
New State
Switch on EMusicState →
Battle: Show Combat HUD
Calm: Hide Combat HUD

How to: Dim Music During Dialogue

Dialogue Started
Battle Music Component → Set Music Volume (0.3)
Dialogue Ended
Battle Music Component → Set Music Volume (1.0)

How to: Play Boss Music

  1. Enable bUsePrioritySystem
  2. Add to EnemyPriorityConfigs: Tag="Boss", Priority=Boss, CustomMusic=YourBossTrack
  3. Add tags to boss actor: "Enemy" + "Boss"
  4. When boss is nearby, boss music plays automatically!

How to: Mark Enemy as Dead

Enemy Death Event
Self → Tags → Add ("Dead")
Component will stop counting this enemy immediately

How to: Manual Control (Scripted Sequences)

Cutscene Start
Force Calm Music →
Set Music Volume (0.5) →
Cutscene End (Boss Appears)
Force Battle Music →
Set Music Volume (1.0) →

📚 Quick Reference

Enumerations

EnumValues
EMusicStateCalm, Battle, Fading
EEnemyPriorityRegular, Elite, Boss
EMusicIntensityLow (1-2), Medium (3-5), High (6+)

Read-Only State Properties

PropertyTypeDescription
CurrentMusicStateEMusicStateCurrent state (Calm/Battle/Fading)
bMusicSystemActiveboolIs music system running
DetectedEnemyCountint32Number of enemies in range
CurrentEnemyPriorityEEnemyPriorityHighest priority enemy detected
CurrentIntensityEMusicIntensityCurrent intensity level
bEverDetectedEnemyboolHas any enemy ever been detected

FEnemyPriorityConfig Structure

FieldTypeDescription
EnemyTagFNameTag to identify this enemy type
PriorityEEnemyPriorityPriority level (Regular/Elite/Boss)
CustomMusicUSoundBase*Custom music for this priority (optional)

🛠️ Troubleshooting

Music doesn't play at all

  1. Is bAutoStart enabled? Or did you call StartMusic()?
  2. Are Calm Music and Battle Music assigned?
  3. Is the sound asset valid? Try playing it directly in Content Browser
  4. Check volume is > 0 (InitialVolume)

Music doesn't switch to battle

  1. Does your enemy have the Enemy tag?
  2. Is enemy within DetectionRadius? (default 2000cm = 20m)
  3. Enable bShowDebug to visualize detection sphere
  4. If using dead filtering, make sure enemy doesn't have "Dead" tag

Music switches too fast/slow

  • Adjust StateCooldown to prevent rapid switching
  • Adjust FadeTime for longer/shorter transitions
  • Adjust CheckInterval for detection frequency

Priority music not playing

  1. Is bUsePrioritySystem enabled?
  2. Is EnemyPriorityConfigs array configured?
  3. Does your boss/elite have BOTH tags? ("Enemy" + "Boss")
  4. Is CustomMusic assigned in the priority config?

Intensity modulation not working

  1. Is bUseIntensityModulation enabled?
  2. Check MinIntensityVolume and MaxIntensityVolume values
  3. Are multiple enemies actually in detection range?
💡 Debug Tips
  • Enable bShowDebug for visual feedback
  • Bind to events and Print the values
  • Check DetectedEnemyCount in Details panel during play