From 77accc4150d3d4990faf71c098e43b15c9a11371 Mon Sep 17 00:00:00 2001 From: dal4segno Date: Sat, 28 Mar 2026 15:13:14 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B3=B4=EC=8A=A4=20=ED=8C=A8=ED=84=B4?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A6=88=20=EC=A0=9C=ED=95=9C=EC=9D=84=20?= =?UTF-8?q?=EC=95=A0=EC=85=8B=20=EA=B8=B0=EB=B0=98=20minPhase=EB=A1=9C=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BossPatternData에 minPhase 필드 추가 (기본값 1, Inspector 설정 가능) - BossCombatBehaviorContext의 signatureMinPhase를 minPhase로 대체 - IsPatternReady와 CheckPatternReadyActionBase에 Phase 체크 통합 - BT 경로와 Update 경로 모두 일관되게 Phase 제한 적용 - 집행개시 패턴 minPhase=3, 점프 패턴 minPhase=2 설정 --- .../_Game/Data/Patterns/Data_Pattern_Drog_점프.asset | 4 ++-- .../Data/Patterns/Data_Pattern_Drog_집행개시.asset | 1 + .../Actions/CheckPatternReadyActionBase.cs | 6 ++++++ Assets/_Game/Scripts/AI/BossPatternData.cs | 6 ++++++ .../_Game/Scripts/Enemy/BossCombatBehaviorContext.cs | 11 ++++------- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset index e6c67989..531bb1bb 100644 --- a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset +++ b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset @@ -1,4 +1,4 @@ -%YAML 1.1 +%YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!114 &11400000 MonoBehaviour: @@ -24,4 +24,4 @@ MonoBehaviour: Skill: {fileID: 11400000, guid: 16321efbd1f2498458683bac7605b054, type: 2} Duration: 0 cooldown: 1 - + minPhase: 2 diff --git a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_집행개시.asset b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_집행개시.asset index 3ad7976e..a3d22bf0 100644 --- a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_집행개시.asset +++ b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_집행개시.asset @@ -21,3 +21,4 @@ MonoBehaviour: Skill: {fileID: 0} Duration: 0 cooldown: 45 + minPhase: 3 diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs index 35e467c8..7c069ab3 100644 --- a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs @@ -29,6 +29,12 @@ public abstract partial class CheckPatternReadyActionBase : Action return Status.Failure; BossPatternData pattern = context.GetPattern(PatternRole); + if (pattern == null) + return Status.Failure; + + if (context.CurrentPatternPhase < pattern.MinPhase) + return Status.Failure; + return UsePatternAction.IsPatternReady(GameObject, pattern) ? Status.Success : Status.Failure; } } diff --git a/Assets/_Game/Scripts/AI/BossPatternData.cs b/Assets/_Game/Scripts/AI/BossPatternData.cs index f016cb24..fb32833e 100644 --- a/Assets/_Game/Scripts/AI/BossPatternData.cs +++ b/Assets/_Game/Scripts/AI/BossPatternData.cs @@ -31,8 +31,14 @@ namespace Colosseum.AI [Tooltip("패턴 완료 후 다시 사용 가능해지기까지의 시간")] [SerializeField] private float cooldown = 5f; + [Header("페이즈 제한")] + [Min(1)] + [Tooltip("이 패턴을 사용하기 시작하는 최소 페이즈 (1=Phase 1부터)")] + [SerializeField] private int minPhase = 1; + public string PatternName => patternName; public IReadOnlyList Steps => steps; public float Cooldown => cooldown; + public int MinPhase => minPhase; } } diff --git a/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs b/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs index a74b6511..5d263ce7 100644 --- a/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs +++ b/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs @@ -91,9 +91,6 @@ namespace Colosseum.Enemy [Min(1)] [SerializeField] protected int phase3SecondaryInterval = 2; [Header("Signature Pattern")] - [Tooltip("시그니처 패턴을 사용하기 시작하는 최소 페이즈")] - [Min(1)] [SerializeField] protected int signatureMinPhase = 2; - [Tooltip("시그니처 패턴 차단에 필요한 누적 피해 비율")] [Range(0f, 1f)] [SerializeField] protected float signatureRequiredDamageRatio = 0.1f; @@ -497,16 +494,13 @@ namespace Colosseum.Enemy if (IsBehaviorSuppressed) return false; - if (CurrentPatternPhase < signatureMinPhase) - return false; - if (activePatternCoroutine != null || isSignaturePatternActive) return false; if (bossEnemy.IsDead || bossEnemy.IsTransitioning || skillController.IsPlayingAnimation) return false; - return UsePatternAction.IsPatternReady(gameObject, signaturePattern); + return IsPatternReady(signaturePattern); } /// @@ -692,6 +686,9 @@ namespace Colosseum.Enemy if (pattern == null || pattern.Steps == null || pattern.Steps.Count == 0) return false; + if (CurrentPatternPhase < pattern.MinPhase) + return false; + if (!patternCooldownTracker.TryGetValue(pattern, out float readyTime)) return true;