--- id: wiki-2026-0508-splash-damage title: Splash Damage category: 10_Wiki/Topics status: verified canonical_id: self aliases: [aoe-damage, area-of-effect, blast-radius] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [game-design, combat, balance, aoe] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: csharp framework: unity --- # Splash Damage ## 매 한 줄 > **"매 single hit, multiple targets — 매 spatial damage distribution"**. Splash damage (AoE damage) 는 매 impact point 주변 radius 의 모든 entity 에 damage 의 분배 — 매 RTS/MOBA/shooter 의 mechanic. 매 falloff curve, friendly fire, line-of-sight 의 design knob. ## 매 핵심 ### 매 정의 - **Splash damage**: 매 projectile/explosion 의 impact point 주변 area 에 damage 분배. - **Direct damage**: 매 center hit 의 full damage. - **Falloff**: 매 distance 증가 → damage 감소 (linear / quadratic / step). - **Friendly fire**: 매 같은 team 도 damage 의 적용 여부. ### 매 Balance Knob - **Radius**: 매 damage area 의 크기. 매 클수록 anti-clump 강함. - **Falloff curve**: 매 linear (predictable) vs quadratic (focused) vs flat (binary). - **Damage cap**: 매 단일 target 에 대한 multi-source stacking 제한. - **Cast time / projectile speed**: 매 dodge window — 매 빠를수록 strong. - **Cooldown / mana cost**: 매 spam 방지. ### 매 응용 1. **RTS** — 매 siege tank, mortar (StarCraft 의 anti-clump unit). 2. **MOBA** — 매 Brand, Annie ult (League of Legends 의 teamfight tool). 3. **Shooter** — 매 rocket launcher, grenade (Quake/Overwatch). 4. **Tower Defense** — 매 splash tower 의 wave 처리. ## 💻 패턴 ### Linear Falloff Splash (Unity C#) ```csharp public class SplashDamage : MonoBehaviour { public float radius = 5f; public float maxDamage = 100f; public LayerMask targetMask; public void Explode(Vector3 center) { Collider[] hits = Physics.OverlapSphere(center, radius, targetMask); foreach (var hit in hits) { float dist = Vector3.Distance(center, hit.transform.position); float falloff = Mathf.Clamp01(1f - dist / radius); float dmg = maxDamage * falloff; hit.GetComponent()?.TakeDamage(dmg); } } } ``` ### Quadratic Falloff (focused) ```csharp float falloff = Mathf.Clamp01(1f - Mathf.Pow(dist / radius, 2f)); ``` ### Line-of-Sight Check (배경 차단) ```csharp foreach (var hit in hits) { Vector3 dir = (hit.transform.position - center).normalized; float dist = Vector3.Distance(center, hit.transform.position); if (Physics.Raycast(center, dir, dist, obstacleMask)) continue; // blocked by wall ApplyDamage(hit, ComputeDamage(dist)); } ``` ### Friendly Fire Toggle ```csharp if (!friendlyFire && hit.GetComponent().id == casterTeamId) continue; ``` ### Damage Cap (multi-source) ```csharp public class DamageCap : MonoBehaviour { Dictionary frameDamage = new(); public float capPerFrame = 200f; public float TryApply(float requested) { int frame = Time.frameCount; float current = frameDamage.GetValueOrDefault(frame, 0f); float allowed = Mathf.Min(requested, capPerFrame - current); frameDamage[frame] = current + allowed; return allowed; } } ``` ### Visual Feedback (impulse + VFX) ```csharp foreach (var rb in Physics.OverlapSphere(center, radius) .Select(c => c.GetComponent()).Where(r => r)) { rb.AddExplosionForce(800f, center, radius, 1f, ForceMode.Impulse); } Instantiate(explosionVFX, center, Quaternion.identity); ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | Anti-clump 의도 | 큰 radius + linear falloff | | Skillshot reward | 작은 radius + quadratic (center 의 보상) | | Crowd control 보조 | flat damage + 큰 radius + slow effect | | Anti-tank | small radius + high direct + low falloff | | Friendly fire 의 hardcore | enable + visual warning | **기본값**: linear falloff, radius 3~5m (FPS), no friendly fire (casual), damage cap 의 multi-rocket spam 방지. ## 🔗 Graph - 응용: [[Tower-Defense]] - Adjacent: [[게임 밸런싱|Game-Balance]] ## 🤖 LLM 활용 **언제**: balance prototyping (LLM 에 numbers 제안 요청), tooltip writing, design doc review. **언제 X**: live PvP balance 의 final tuning — 매 player data 가 ground truth. ## ❌ 안티패턴 - **Binary radius**: damage 가 edge 에서 급락 → 매 unsatisfying. Falloff curve 사용. - **No visual indicator**: player 가 radius 모름. Decal / outline 표시. - **Friendly fire on by default in casual**: rage quit. Opt-in 권장. - **Stacking exploit**: 5 rocket 동시 발사 의 one-shot. Damage cap 적용. - **Through-wall damage 의 무시**: realism 깨짐 except 의도된 경우 (e.g. C4). ## 🧪 검증 / 중복 - Verified (Unity Physics docs, Riot Games balance talks, GDC Vault 의 splash design lectures). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — splash damage mechanics + Unity patterns |