From 55ee4f390be71eab81e0c4bbdcdac352d38d4be0 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 14 May 2026 00:07:25 +0900 Subject: [PATCH] =?UTF-8?q?feat(BT12-Dev):=20A08=20=EC=BA=90=EC=8A=A4?= =?UTF-8?q?=ED=8C=85=20=EC=A0=9C=EA=B1=B0=C2=B7Player=20spawn=C2=B7?= =?UTF-8?q?=EA=B0=80=EC=9E=A5=20=EA=B0=80=EA=B9=8C=EC=9A=B4=20=EC=A0=81=20?= =?UTF-8?q?=EB=B0=A9=ED=96=A5=20=EB=B0=9C=EC=82=AC=20(PD=20=EC=A7=80?= =?UTF-8?q?=EC=8B=9C=202026-05-14)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 작업 1 — 캐스팅 이펙트 제거: - A08.asset OffsetDistance.x 1.5 → 0 (Player 위치 spawn) - A08.asset CastFxPrefab null 작업 2 — 가장 가까운 적 방향 발사: - ActiveSkillData.TargetEnemyOnFire (bool) 신규 필드 - ProjectileSpawner.Trigger — TargetEnemyOnFire=true 시 FindObjectsByType 영역 nearest 검출·facing = (enemyPos - playerPos).normalized - 적 0명 시 PlayerController.Facing fallback (기존 정합) - A08.asset TargetEnemyOnFire=1 벽·발판 관통 X — Projectile.Update 영역 Layer 0·16 OverlapPoint 영역 영역 영역 정합 (변경 X). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Skills/Active/A08_jeoju_hwasal.asset | 6 ++--- Assets/Scripts/Skills/Data/ActiveSkillData.cs | 4 ++++ .../Skills/Effectors/ProjectileSpawner.cs | 22 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset b/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset index e469c6c..d0c2f6c 100644 --- a/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset +++ b/Assets/Resources/Skills/Active/A08_jeoju_hwasal.asset @@ -28,7 +28,7 @@ MonoBehaviour: BaseCooldown: 0.8 BaseDamage: 2 HitboxSize: {x: 1.5, y: 0.6} - OffsetDistance: {x: 1.5, y: 0} + OffsetDistance: {x: 0, y: 0} Trajectory: 0 MinionPrefab: {fileID: 0} ChainCount: 0 @@ -54,9 +54,9 @@ MonoBehaviour: OnHitFxPrefab: {fileID: 7053558978182834975, guid: aaba98a2ef6fecc46be2d3f1d41f9c75, type: 3} ExtraHitFxPrefab: {fileID: 0} - CastFxPrefab: {fileID: 9207792929607053519, guid: cab9ba2d706d3c04dab2b559425bac6a, - type: 3} + CastFxPrefab: {fileID: 0} ProjectileAngleOffset: 180 + TargetEnemyOnFire: 1 OnDotFxPrefab: {fileID: 0} DotDamageMultiplier: 0.25 ProjectileFxScale: 1 diff --git a/Assets/Scripts/Skills/Data/ActiveSkillData.cs b/Assets/Scripts/Skills/Data/ActiveSkillData.cs index 7fea5a2..c232b81 100644 --- a/Assets/Scripts/Skills/Data/ActiveSkillData.cs +++ b/Assets/Scripts/Skills/Data/ActiveSkillData.cs @@ -115,6 +115,10 @@ namespace EerieVillage.Skills [Range(-360f, 360f)] public float ProjectileAngleOffset = 0f; + // PD 지시 2026-05-14 — 발사 시점 가장 가까운 적 방향 영역 자동 조준 (예: A08 저주의 화살) + [Tooltip("true 시 발사 시점 가장 가까운 적 위치 방향으로 발사. 적 0명 시 PlayerController.Facing fallback.")] + public bool TargetEnemyOnFire = false; + [Tooltip("DoT 적용 시 적 자식으로 Instantiate 되는 ParticleSystem prefab")] public GameObject OnDotFxPrefab; diff --git a/Assets/Scripts/Skills/Effectors/ProjectileSpawner.cs b/Assets/Scripts/Skills/Effectors/ProjectileSpawner.cs index 3e8daee..07f7ab5 100644 --- a/Assets/Scripts/Skills/Effectors/ProjectileSpawner.cs +++ b/Assets/Scripts/Skills/Effectors/ProjectileSpawner.cs @@ -28,6 +28,28 @@ namespace EerieVillage.Skills.Effectors // PD 지시 2026-05-13 — 게임 시작 시 Player.Facing=(0,0) 영역 fallback (정지·잔존 투사체 차단) if (facing.sqrMagnitude < 0.01f) facing = Vector2.right; + // PD 지시 2026-05-14 — TargetEnemyOnFire 영역 가장 가까운 적 방향 영역 발사 (A08 저주의 화살 등) + if (data.TargetEnemyOnFire) + { + Vector2 playerPos2 = playerTransform.position; + EnemyController nearest = null; + float minDist = float.MaxValue; + var enemies = Object.FindObjectsByType(FindObjectsSortMode.None); + foreach (var e in enemies) + { + if (e == null) continue; + var h = e.GetComponent(); + if (h == null || !h.IsAlive) continue; + float d = Vector2.Distance(playerPos2, e.transform.position); + if (d < minDist) { minDist = d; nearest = e; } + } + if (nearest != null) + { + Vector2 toEnemy = (Vector2)nearest.transform.position - playerPos2; + if (toEnemy.sqrMagnitude > 0.01f) facing = toEnemy.normalized; + } + } + // PD 정합 2026-05-13 — OffsetDistance.x = facing 방향 거리·OffsetDistance.y = 직각 거리·OffsetXY = 이펙트 절대 Vector2 perpDir = new Vector2(-facing.y, facing.x); Vector2 spawnPos = (Vector2)playerTransform.position