diff --git a/Assets/Resources/Skills/Active/A01_jineonbu.asset b/Assets/Resources/Skills/Active/A01_jineonbu.asset
index 7f10151..91ed917 100644
--- a/Assets/Resources/Skills/Active/A01_jineonbu.asset
+++ b/Assets/Resources/Skills/Active/A01_jineonbu.asset
@@ -44,3 +44,4 @@ MonoBehaviour:
IFrameDuration: 0
DebuffStackLimit: 0
FireProbability: 1
+ Range: 2
diff --git a/Assets/Resources/Skills/Active/A02_paieobol.asset b/Assets/Resources/Skills/Active/A02_paieobol.asset
index e0d659e..7da6861 100644
--- a/Assets/Resources/Skills/Active/A02_paieobol.asset
+++ b/Assets/Resources/Skills/Active/A02_paieobol.asset
@@ -45,3 +45,4 @@ MonoBehaviour:
IFrameDuration: 0
DebuffStackLimit: 0
FireProbability: 1
+ Range: 3
diff --git a/Assets/Resources/Skills/Active/A03_bonginmabeop.asset b/Assets/Resources/Skills/Active/A03_bonginmabeop.asset
index a1fe8ae..f38cbff 100644
--- a/Assets/Resources/Skills/Active/A03_bonginmabeop.asset
+++ b/Assets/Resources/Skills/Active/A03_bonginmabeop.asset
@@ -44,3 +44,4 @@ MonoBehaviour:
IFrameDuration: 0
DebuffStackLimit: 0
FireProbability: 1
+ Range: 2
diff --git a/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset b/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset
index 7d15a34..7ca1ef2 100644
--- a/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset
+++ b/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset
@@ -45,3 +45,4 @@ MonoBehaviour:
IFrameDuration: 0
DebuffStackLimit: 5
FireProbability: 1
+ Range: 1
diff --git a/Assets/Resources/Skills/Active/A14_eolum_chang.asset b/Assets/Resources/Skills/Active/A14_eolum_chang.asset
index 013862f..55816d4 100644
--- a/Assets/Resources/Skills/Active/A14_eolum_chang.asset
+++ b/Assets/Resources/Skills/Active/A14_eolum_chang.asset
@@ -44,3 +44,4 @@ MonoBehaviour:
IFrameDuration: 0
DebuffStackLimit: 0
FireProbability: 1
+ Range: 3
diff --git a/Assets/Resources/Skills/Active/A15_chujeok_hwayeomgu.asset b/Assets/Resources/Skills/Active/A15_chujeok_hwayeomgu.asset
index 2d3c8ae..04bc10d 100644
--- a/Assets/Resources/Skills/Active/A15_chujeok_hwayeomgu.asset
+++ b/Assets/Resources/Skills/Active/A15_chujeok_hwayeomgu.asset
@@ -44,3 +44,4 @@ MonoBehaviour:
IFrameDuration: 0
DebuffStackLimit: 0
FireProbability: 1
+ Range: 4
diff --git a/Assets/Scripts/Skills/Data/ActiveSkillData.cs b/Assets/Scripts/Skills/Data/ActiveSkillData.cs
index 973022a..faf3e04 100644
--- a/Assets/Scripts/Skills/Data/ActiveSkillData.cs
+++ b/Assets/Scripts/Skills/Data/ActiveSkillData.cs
@@ -79,8 +79,14 @@ namespace EerieVillage.Skills
[Tooltip("확률 판정 전용 (F 카테고리). 발동 확률 0~1")]
[Range(0f, 1f)]
public float FireProbability = 1.0f;
+
+ /// BT12-Dev 2026-05-10 PD — 사정거리 5단계 (Camera width 배수)
+ [Tooltip("사정거리 5단계 — Camera 가로 배수 (Short 0.2·MediumShort 0.5·Medium 0.667·MediumLong 1.0·Long 1.5)")]
+ public RangeTier Range = RangeTier.Medium;
}
+ public enum RangeTier { Short, MediumShort, Medium, MediumLong, Long }
+
///
/// 액티브 스킬 카테고리 (A~F). BT12-Dev v1 §2-2 정합.
///
diff --git a/Assets/Scripts/Skills/Effectors/Projectile.cs b/Assets/Scripts/Skills/Effectors/Projectile.cs
index a3280bd..68133f6 100644
--- a/Assets/Scripts/Skills/Effectors/Projectile.cs
+++ b/Assets/Scripts/Skills/Effectors/Projectile.cs
@@ -43,18 +43,17 @@ namespace EerieVillage.Skills.Effectors
_spawnPosition = transform.position;
_spawnTime = Time.time;
- // 최대 거리 = Camera 영역 영역 영역 × 1.5 (PD #1 명시)
- // Camera ortho size 3.5·aspect 16:9 → height 7·width ~12.44 → maxRange ~18.66 unit
+ // BT12-Dev 2026-05-10 PD — 사정거리 5단계 (Camera 가로 배수)
+ float camWidth = 12.44f; // fallback (ortho size 3.5·16:9)
var cam = Camera.main;
if (cam != null && cam.orthographic)
{
- float camWidth = cam.orthographicSize * 2f * cam.aspect;
- _maxRange = camWidth * 1.5f;
- }
- else
- {
- _maxRange = 20f; // fallback
+ float aspect = (cam.aspect > 0.01f) ? cam.aspect : (16f / 9f);
+ camWidth = cam.orthographicSize * 2f * aspect;
}
+ float[] mults = { 0.2f, 0.5f, 0.667f, 1.0f, 1.5f };
+ int idx = Mathf.Clamp((int)_data.Range, 0, mults.Length - 1);
+ _maxRange = camWidth * mults[idx];
// Phase 2-B: 풀링 미도입 — Invoke 기반 자동 소멸 (거리 제한 영역 영역 영역 영역 영역 안전망)
Invoke(nameof(SelfDestruct), _lifetime);