From 290d59e665c15032d446e09b1d353cef5fcee82b Mon Sep 17 00:00:00 2001 From: dal4segno Date: Wed, 18 Mar 2026 18:05:41 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B3=B4=EC=8A=A4=20=EC=A0=90=ED=94=84?= =?UTF-8?q?=20=EC=8A=A4=ED=82=AC=20-=20=ED=83=80=EA=B2=9F=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SkillData에 jumpToTarget, animationSpeed 필드 추가 - 점프 중 XZ를 타겟 위치로 lerp, 착지 시 스냅 - endClip 재생 중 점프 이동 비활성화 (IsInEndAnimation) - 보스/플레이어 겹침 시 플레이어를 밀어내는 방식으로 분리 처리 - 점프준비/점프/착지 3단계 스킬 & 패턴 구성 - UsePatternAction에 Target 블랙보드 변수 추가 Co-Authored-By: Claude Sonnet 4.6 --- Assets/Scenes/Test.unity | 2 +- Assets/_Game/AI/BT_TestBoss.asset | 769 ++++++++++-------- .../Animations/Anim_TestBoss_점프.fbx.meta | 94 +++ .../Patterns/Data_Pattern_TestBoss_점프.asset | 8 +- .../Skills/Data_Skill_TestBoss_점프.asset | 6 +- .../Skills/Data_Skill_TestBoss_점프준비.asset | 27 + .../Data_Skill_TestBoss_점프준비.asset.meta} | 2 +- .../Skills/Data_Skill_TestBoss_점프착지.asset | 27 + .../Data_Skill_TestBoss_점프착지.asset.meta | 8 + Assets/_Game/NetworkPrefabsList.asset | 21 - .../Actions/UsePatternAction.cs | 10 + .../BehaviorActions/Actions/UseSkillAction.cs | 8 + Assets/_Game/Scripts/Enemy/EnemyBase.cs | 111 ++- .../_Game/Scripts/Skills/SkillController.cs | 3 + Assets/_Game/Scripts/Skills/SkillData.cs | 6 + 15 files changed, 711 insertions(+), 391 deletions(-) create mode 100644 Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프준비.asset rename Assets/_Game/{NetworkPrefabsList.asset.meta => Data/Skills/Data_Skill_TestBoss_점프준비.asset.meta} (79%) create mode 100644 Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset create mode 100644 Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset.meta delete mode 100644 Assets/_Game/NetworkPrefabsList.asset diff --git a/Assets/Scenes/Test.unity b/Assets/Scenes/Test.unity index 985a4274..b37b34f4 100644 --- a/Assets/Scenes/Test.unity +++ b/Assets/Scenes/Test.unity @@ -1155,7 +1155,7 @@ MonoBehaviour: PlayerPrefab: {fileID: 6473031571298860035, guid: 9f538e60b8b98634b8952310b91dfba0, type: 3} Prefabs: NetworkPrefabsLists: - - {fileID: 11400000, guid: 1124711eebe5b22409c64043c7d96691, type: 2} + - {fileID: 11400000, guid: 456770a930389f64aa321439ffc4bdb2, type: 2} TickRate: 30 ClientConnectionBufferTimeout: 10 ConnectionApproval: 0 diff --git a/Assets/_Game/AI/BT_TestBoss.asset b/Assets/_Game/AI/BT_TestBoss.asset index 18f81755..78327659 100644 --- a/Assets/_Game/AI/BT_TestBoss.asset +++ b/Assets/_Game/AI/BT_TestBoss.asset @@ -34,9 +34,8 @@ MonoBehaviour: - rid: 8805855836547055767 - rid: 8805855836547056135 - rid: 8805855836547056335 - - rid: 8805855841097090010 - rid: 8805855941168464100 - m_VersionTimestamp: 639092245458294623 + m_VersionTimestamp: 639094519736977735 m_CommandBuffer: m_Commands: [] m_RuntimeBlackboardAsset: {fileID: 6694785542709420471} @@ -93,16 +92,6 @@ MonoBehaviour: IsExposed: 1 m_IsShared: 0 m_Value: 0 - - rid: 8805855841097090010 - type: {class: 'TypedVariableModel`1[[Colosseum.Skills.SkillData, Colosseum.Game]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - ID: - m_Value0: 15894527964846533412 - m_Value1: 3771131609012049390 - Name: Default Attack Skill - IsExposed: 1 - m_IsShared: 0 - m_Value: {fileID: 11400000, guid: 4f40629d4d334434285e8fdec3714536, type: 2} - rid: 8805855941168464100 type: {class: 'TypedVariableModel`1[[System.Boolean, mscorlib]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: @@ -145,8 +134,8 @@ MonoBehaviour: rid: 8805855836547055694 BlackboardGroupReferences: [] Root: - rid: 8805855974927368310 - m_VersionTimestamp: 639093503428901088 + rid: 8805856000049152583 + m_VersionTimestamp: 639094532463569056 - rid: 8805855836547055694 type: {class: BlackboardReference, ns: Unity.Behavior, asm: Unity.Behavior} data: @@ -157,14 +146,13 @@ MonoBehaviour: type: {class: Blackboard, ns: Unity.Behavior, asm: Unity.Behavior} data: m_Variables: - - rid: 8805855941168464571 - - rid: 8805855941168464572 - - rid: 8805855941168464573 - - rid: 8805855941168464574 - - rid: 8805855941168464575 - - rid: 8805855941168464576 - - rid: 8805855941168464577 - - rid: 8805855941168464571 + - rid: 8805856000049152395 + - rid: 8805856000049152396 + - rid: 8805856000049152397 + - rid: 8805856000049152398 + - rid: 8805856000049152399 + - rid: 8805856000049152400 + - rid: 8805856000049152395 type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -172,7 +160,7 @@ MonoBehaviour: m_Value1: 0 Name: Self m_Value: {fileID: 0} - - rid: 8805855941168464572 + - rid: 8805856000049152396 type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -180,7 +168,7 @@ MonoBehaviour: m_Value1: 13045418693957266795 Name: AttackRange m_Value: 3 - - rid: 8805855941168464573 + - rid: 8805856000049152397 type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -188,7 +176,7 @@ MonoBehaviour: m_Value1: 9373801459200419976 Name: Target m_Value: {fileID: 0} - - rid: 8805855941168464574 + - rid: 8805856000049152398 type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -196,7 +184,7 @@ MonoBehaviour: m_Value1: 821422556084951432 Name: SightRange m_Value: 20 - - rid: 8805855941168464575 + - rid: 8805856000049152399 type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -204,15 +192,7 @@ MonoBehaviour: m_Value1: 6075552970323151189 Name: MoveSpeed m_Value: 0 - - rid: 8805855941168464576 - type: {class: 'BlackboardVariable`1[[Colosseum.Skills.SkillData, Colosseum.Game]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 15894527964846533412 - m_Value1: 3771131609012049390 - Name: Default Attack Skill - m_Value: {fileID: 11400000, guid: 4f40629d4d334434285e8fdec3714536, type: 2} - - rid: 8805855941168464577 + - rid: 8805856000049152400 type: {class: 'BlackboardVariable`1[[System.Boolean, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -220,135 +200,7 @@ MonoBehaviour: m_Value1: 14990413519379198129 Name: Die m_Value: 0 - - rid: 8805855974927368280 - type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 0 - - rid: 8805855974927368281 - type: {class: 'BlackboardVariable`1[[System.Boolean, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 1 - - rid: 8805855974927368282 - type: {class: 'BlackboardVariable`1[[System.String, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: Player - - rid: 8805855974927368283 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 10 - - rid: 8805855974927368290 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 1 - - rid: 8805855974927368291 - type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 1 - - rid: 8805855974927368292 - type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 0} - - rid: 8805855974927368299 - type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 5 - - rid: 8805855974927368300 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 10 - - rid: 8805855974927368301 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 5 - - rid: 8805855974927368304 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 10 - - rid: 8805855974927368305 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 5 - - rid: 8805855974927368306 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 0 - - rid: 8805855974927368307 - type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 2 - - rid: 8805855974927368308 - type: {class: 'BlackboardVariable`1[[Colosseum.AI.BossPatternData, Colosseum.Game]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 11400000, guid: 5efd8123be76bf844875d386d9d5f73d, type: 2} - - rid: 8805855974927368309 - type: {class: 'BlackboardVariable`1[[Colosseum.AI.BossPatternData, Colosseum.Game]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 11400000, guid: 88e6cc7cab28baf4c8f8a742247000ec, type: 2} - - rid: 8805855974927368310 + - rid: 8805856000049152583 type: {class: Start, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -359,10 +211,10 @@ MonoBehaviour: m_Parent: rid: -2 m_Child: - rid: 8805855974927368311 + rid: 8805856000049152584 Repeat: 0 AllowMultipleRepeatsPerTick: 0 - - rid: 8805855974927368311 + - rid: 8805856000049152584 type: {class: RepeaterModifier, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -371,11 +223,11 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368310 + rid: 8805856000049152583 m_Child: - rid: 8805855974927368312 + rid: 8805856000049152585 m_AllowMultipleRepeatsPerTick: 0 - - rid: 8805855974927368312 + - rid: 8805856000049152585 type: {class: BranchingConditionComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -384,21 +236,21 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368311 + rid: 8805856000049152584 m_Children: - - rid: 8805855974927368313 + - rid: 8805856000049152586 m_RegisteredObservers: [] m_Conditions: - - rid: 8805855974927368314 + - rid: 8805856000049152587 m_RequiresAllConditions: 0 True: rid: -2 False: - rid: 8805855974927368313 + rid: 8805856000049152586 m_CurrentChild: rid: -2 m_ObserverType: 0 - - rid: 8805855974927368313 + - rid: 8805856000049152586 type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -407,23 +259,23 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368312 + rid: 8805856000049152585 m_Children: - - rid: 8805855974927368315 - - rid: 8805855974927368316 + - rid: 8805856000049152588 + - rid: 8805856000049152589 m_RegisteredObservers: [] - - rid: 8805855974927368314 + - rid: 8805856000049152587 type: {class: VariableComparisonCondition, ns: Unity.Behavior, asm: Unity.Behavior} data: Graph: rid: 8805855836547055693 Variable: - rid: 8805855941168464577 + rid: 8805856000049152400 Operator: - rid: 8805855974927368280 + rid: 8805856000049152590 ComparisonValue: - rid: 8805855974927368281 - - rid: 8805855974927368315 + rid: 8805856000049152591 + - rid: 8805856000049152588 type: {class: SetTargetInRangeAction, ns: , asm: Colosseum.Game} data: ID: @@ -432,14 +284,14 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368313 + rid: 8805856000049152586 Target: - rid: 8805855941168464573 + rid: 8805856000049152397 Tag: - rid: 8805855974927368282 + rid: 8805856000049152592 Range: - rid: 8805855974927368283 - - rid: 8805855974927368316 + rid: 8805856000049152593 + - rid: 8805856000049152589 type: {class: BranchingConditionComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -448,22 +300,54 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368313 + rid: 8805856000049152586 m_Children: - - rid: 8805855974927368317 - - rid: 8805855974927368318 + - rid: 8805856000049152594 + - rid: 8805856000049152595 m_RegisteredObservers: [] m_Conditions: - - rid: 8805855974927368319 + - rid: 8805856000049152596 m_RequiresAllConditions: 0 True: - rid: 8805855974927368317 + rid: 8805856000049152594 False: - rid: 8805855974927368318 + rid: 8805856000049152595 m_CurrentChild: rid: -2 m_ObserverType: 0 - - rid: 8805855974927368317 + - rid: 8805856000049152590 + type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 0 + - rid: 8805856000049152591 + type: {class: 'BlackboardVariable`1[[System.Boolean, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 1 + - rid: 8805856000049152592 + type: {class: 'BlackboardVariable`1[[System.String, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: Player + - rid: 8805856000049152593 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 10 + - rid: 8805856000049152594 type: {class: BranchingConditionComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -472,22 +356,22 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368316 + rid: 8805856000049152589 m_Children: - - rid: 8805855974927368320 - - rid: 8805855974927368321 + - rid: 8805856000049152597 + - rid: 8805856000049152598 m_RegisteredObservers: [] m_Conditions: - - rid: 8805855974927368322 + - rid: 8805856000049152599 m_RequiresAllConditions: 0 True: - rid: 8805855974927368320 + rid: 8805856000049152597 False: - rid: 8805855974927368321 + rid: 8805856000049152598 m_CurrentChild: rid: -2 m_ObserverType: 0 - - rid: 8805855974927368318 + - rid: 8805856000049152595 type: {class: WaitAction, ns: , asm: Colosseum.Game} data: ID: @@ -496,21 +380,21 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368316 + rid: 8805856000049152589 Duration: - rid: 8805855974927368290 - - rid: 8805855974927368319 + rid: 8805856000049152600 + - rid: 8805856000049152596 type: {class: VariableComparisonCondition, ns: Unity.Behavior, asm: Unity.Behavior} data: Graph: rid: 8805855836547055693 Variable: - rid: 8805855941168464573 + rid: 8805856000049152397 Operator: - rid: 8805855974927368291 + rid: 8805856000049152601 ComparisonValue: - rid: 8805855974927368292 - - rid: 8805855974927368320 + rid: 8805856000049152602 + - rid: 8805856000049152597 type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -519,39 +403,63 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368317 + rid: 8805856000049152594 m_Children: - - rid: 8805855974927368323 - - rid: 8805855974927368324 + - rid: 8805856000049152603 + - rid: 8805856000049152604 m_RegisteredObservers: [] - - rid: 8805855974927368321 + - rid: 8805856000049152598 type: {class: ParallelAllComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: - m_Value0: 16536007759615694599 - m_Value1: 10970361502449028502 + m_Value0: 14249649058231311876 + m_Value1: 11772280117554626987 Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368317 + rid: 8805856000049152594 m_Children: - - rid: 8805855974927368325 - - rid: 8805855974927368326 + - rid: 8805856000049152605 + - rid: 8805856000049152606 m_RegisteredObservers: [] - - rid: 8805855974927368322 + - rid: 8805856000049152599 type: {class: CheckDistanceCondition, ns: Unity.Behavior, asm: Unity.Behavior} data: Graph: rid: 8805855836547055693 Transform: - rid: 8805855974927368327 + rid: 8805856000049152607 Target: - rid: 8805855974927368328 + rid: 8805856000049152608 Operator: - rid: 8805855974927368299 + rid: 8805856000049152609 Threshold: - rid: 8805855941168464572 - - rid: 8805855974927368323 + rid: 8805856000049152396 + - rid: 8805856000049152600 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 1 + - rid: 8805856000049152601 + type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 1 + - rid: 8805856000049152602 + type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: {fileID: 0} + - rid: 8805856000049152603 type: {class: RotateToTargetAction, ns: , asm: Colosseum.Game} data: ID: @@ -560,14 +468,14 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368320 + rid: 8805856000049152597 Target: - rid: 8805855941168464573 + rid: 8805856000049152397 RotationSpeed: - rid: 8805855974927368300 + rid: 8805856000049152610 AngleThreshold: - rid: 8805855974927368301 - - rid: 8805855974927368324 + rid: 8805856000049152611 + - rid: 8805856000049152604 type: {class: SelectorComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: @@ -576,76 +484,26 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368320 - m_Children: - - rid: 8805855974927368329 - - rid: 8805855974927368330 + rid: 8805856000049152597 + m_Children: [] m_RegisteredObservers: [] - - rid: 8805855974927368325 + - rid: 8805856000049152605 type: {class: RotateToTargetAction, ns: , asm: Colosseum.Game} data: ID: - m_Value0: 2891087433149756878 - m_Value1: 17198679099733625875 + m_Value0: 17771351983187136722 + m_Value1: 7918239022991775575 Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368321 + rid: 8805856000049152598 Target: - rid: 8805855941168464573 + rid: 8805856000049152397 RotationSpeed: - rid: 8805855974927368304 + rid: 8805856000049152612 AngleThreshold: - rid: 8805855974927368305 - - rid: 8805855974927368326 - type: {class: ChaseTargetAction, ns: , asm: Colosseum.Game} - data: - ID: - m_Value0: 2775806344500587586 - m_Value1: 15450617276334001013 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805855974927368321 - Target: - rid: 8805855941168464573 - Speed: - rid: 8805855974927368306 - StopDistance: - rid: 8805855974927368307 - - rid: 8805855974927368327 - type: {class: 'GameObjectToComponentBlackboardVariable`1[[UnityEngine.Transform, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 0} - m_LinkedVariable: - rid: 8805855941168464571 - - rid: 8805855974927368328 - type: {class: 'GameObjectToComponentBlackboardVariable`1[[UnityEngine.Transform, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 0} - m_LinkedVariable: - rid: 8805855941168464573 - - rid: 8805855974927368329 - type: {class: UsePatternAction, ns: , asm: Colosseum.Game} - data: - ID: - m_Value0: 8803463902102802735 - m_Value1: 11879507492776070900 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805855974927368324 - Pattern: - rid: 8805855974927368308 - - rid: 8805855974927368330 + rid: 8805856000049152613 + - rid: 8805856000049152606 type: {class: UsePatternAction, ns: , asm: Colosseum.Game} data: ID: @@ -654,9 +512,79 @@ MonoBehaviour: Graph: rid: 8805855836547055693 m_Parent: - rid: 8805855974927368324 + rid: 8805856000049152598 Pattern: - rid: 8805855974927368309 + rid: 8805856000049152614 + Target: + rid: 8805856000049152397 + - rid: 8805856000049152607 + type: {class: 'GameObjectToComponentBlackboardVariable`1[[UnityEngine.Transform, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: {fileID: 0} + m_LinkedVariable: + rid: 8805856000049152395 + - rid: 8805856000049152608 + type: {class: 'GameObjectToComponentBlackboardVariable`1[[UnityEngine.Transform, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: {fileID: 0} + m_LinkedVariable: + rid: 8805856000049152397 + - rid: 8805856000049152609 + type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 5 + - rid: 8805856000049152610 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 10 + - rid: 8805856000049152611 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 5 + - rid: 8805856000049152612 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 10 + - rid: 8805856000049152613 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 5 + - rid: 8805856000049152614 + type: {class: 'BlackboardVariable`1[[Colosseum.AI.BossPatternData, Colosseum.Game]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: {fileID: 11400000, guid: 88e6cc7cab28baf4c8f8a742247000ec, type: 2} --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -692,7 +620,9 @@ MonoBehaviour: - rid: 8805855948962791632 - rid: 8805855956374126770 - rid: 8805855974927368268 - m_VersionTimestamp: 639093503428901088 + - rid: 8805856000049152462 + - rid: 8805856000049152525 + m_VersionTimestamp: 639094532463569056 m_SerializedVersion: 2 m_DebugInfo: {fileID: -6758363554468061369} m_RuntimeGraph: {fileID: -3933356984444701103} @@ -767,7 +697,7 @@ MonoBehaviour: NamedChildren: [] IsPlaceholder: 0 - Name: SetTargetInRange - Story: "[\uAC70\uB9AC] \uB0B4\uC5D0 [\uB300\uC0C1\uC774] \uC788\uB294\uC9C0 \uD655\uC778" + Story: "[Range] \uB0B4\uC5D0 [Tag] \uC788\uB294\uC9C0 \uD655\uC778" RuntimeTypeString: SetTargetInRangeAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null RuntimeTypeID: @@ -849,6 +779,11 @@ MonoBehaviour: m_SerializableType: Colosseum.AI.BossPatternData, Colosseum.Game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Tooltip: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: NamedChildren: [] IsPlaceholder: 0 - Name: Try In Order @@ -1053,7 +988,7 @@ MonoBehaviour: - rid: 8805855841097089335 type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - Position: {x: 67.99997, y: 373.3333} + Position: {x: 66.178566, y: 361.4942} ID: m_Value0: 7100545047213284048 m_Value1: 17094481857695181652 @@ -1207,7 +1142,7 @@ MonoBehaviour: - rid: 8805855841097089467 type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - Position: {x: 300.3333, y: 38.333313} + Position: {x: 299.42273, y: 39.243973} ID: m_Value0: 2112550037797404360 m_Value1: 3268971171652514817 @@ -1255,7 +1190,7 @@ MonoBehaviour: LocalValue: rid: 8805855841097089473 LinkedVariable: - rid: 8805855841097089474 + rid: 8805856000049152392 - rid: 8805855841097089471 type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: @@ -1286,16 +1221,6 @@ MonoBehaviour: m_Value1: 0 Name: m_Value: {fileID: 0} - - rid: 8805855841097089474 - type: {class: 'TypedVariableModel`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - ID: - m_Value0: 7475528897857689991 - m_Value1: 9373801459200419976 - Name: Target - IsExposed: 1 - m_IsShared: 0 - m_Value: {fileID: 0} - rid: 8805855841097089475 type: {class: 'BlackboardVariable`1[[System.String, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} data: @@ -1513,8 +1438,7 @@ MonoBehaviour: m_IsFloating: 0 m_NodeModel: rid: 8805855841097089648 - m_Connections: - - rid: 8805855841097089770 + m_Connections: [] - rid: 8805855841097089650 type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: @@ -1633,7 +1557,7 @@ MonoBehaviour: m_NodeModel: rid: 8805855841097089765 m_Connections: - - rid: 8805855841097089649 + - rid: 8805856000049152463 - rid: 8805855841097089771 type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: @@ -2145,6 +2069,7 @@ MonoBehaviour: m_Value1: 15475974310776131785 m_FieldValues: - rid: 8805855948962791636 + - rid: 8805856000049152268 - rid: 8805855948962791633 type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: @@ -2153,8 +2078,7 @@ MonoBehaviour: m_IsFloating: 0 m_NodeModel: rid: 8805855948962791632 - m_Connections: - - rid: 8805855956374126772 + m_Connections: [] - rid: 8805855948962791634 type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: @@ -2219,13 +2143,11 @@ MonoBehaviour: m_IsFloating: 0 m_NodeModel: rid: 8805855956374126770 - m_Connections: - - rid: 8805855948962791633 - - rid: 8805855974927368269 + m_Connections: [] - rid: 8805855974927368268 type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - Position: {x: 738.6667, y: 777.3334} + Position: {x: 57.14644, y: 556.018} ID: m_Value0: 6072905976649188714 m_Value1: 6639982183309942236 @@ -2241,6 +2163,7 @@ MonoBehaviour: m_Value1: 15475974310776131785 m_FieldValues: - rid: 8805855974927368271 + - rid: 8805856000049152230 - rid: 8805855974927368269 type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: @@ -2250,7 +2173,7 @@ MonoBehaviour: m_NodeModel: rid: 8805855974927368268 m_Connections: - - rid: 8805855956374126772 + - rid: 8805856000049152464 - rid: 8805855974927368270 type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: @@ -2279,6 +2202,211 @@ MonoBehaviour: m_Value1: 0 Name: m_Value: {fileID: 11400000, guid: 88e6cc7cab28baf4c8f8a742247000ec, type: 2} + - rid: 8805856000049152230 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + LocalValue: + rid: 8805856000049152231 + LinkedVariable: + rid: 8805856000049152306 + - rid: 8805856000049152231 + type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: {fileID: 0} + - rid: 8805856000049152268 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + LocalValue: + rid: 8805856000049152269 + LinkedVariable: + rid: -2 + - rid: 8805856000049152269 + type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: {fileID: 0} + - rid: 8805856000049152306 + type: {class: 'TypedVariableModel`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + ID: + m_Value0: 7475528897857689991 + m_Value1: 9373801459200419976 + Name: Target + IsExposed: 1 + m_IsShared: 0 + m_Value: {fileID: 0} + - rid: 8805856000049152392 + type: {class: 'TypedVariableModel`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + ID: + m_Value0: 7475528897857689991 + m_Value1: 9373801459200419976 + Name: Target + IsExposed: 1 + m_IsShared: 0 + m_Value: {fileID: 0} + - rid: 8805856000049152462 + type: {class: RunInParallelNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 155.81891, y: 458.1245} + ID: + m_Value0: 14249649058231311876 + m_Value1: 11772280117554626987 + Parents: [] + PortModels: + - rid: 8805856000049152463 + - rid: 8805856000049152464 + NodeType: + m_SerializableType: Unity.Behavior.ParallelAllComposite, Unity.Behavior, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 6216542881172158703 + m_Value1: 2191282456596108218 + m_FieldValues: [] + m_Mode: 0 + - rid: 8805856000049152463 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856000049152462 + m_Connections: + - rid: 8805855841097089770 + - rid: 8805856000049152464 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856000049152462 + m_Connections: + - rid: 8805856000049152526 + - rid: 8805855974927368269 + - rid: 8805856000049152525 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: -19.514442, y: 506.1245} + ID: + m_Value0: 17771351983187136722 + m_Value1: 7918239022991775575 + Parents: [] + PortModels: + - rid: 8805856000049152526 + - rid: 8805856000049152527 + NodeType: + m_SerializableType: RotateToTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 6653769496062276656 + m_Value1: 2899785121618119178 + m_FieldValues: + - rid: 8805856000049152528 + - rid: 8805856000049152529 + - rid: 8805856000049152530 + - rid: 8805856000049152526 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856000049152525 + m_Connections: + - rid: 8805856000049152464 + - rid: 8805856000049152527 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856000049152525 + m_Connections: [] + - rid: 8805856000049152528 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + LocalValue: + rid: 8805856000049152531 + LinkedVariable: + rid: 8805856000049152532 + - rid: 8805856000049152529 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: RotationSpeed + Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + LocalValue: + rid: 8805856000049152533 + LinkedVariable: + rid: -2 + - rid: 8805856000049152530 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: AngleThreshold + Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + LocalValue: + rid: 8805856000049152534 + LinkedVariable: + rid: -2 + - rid: 8805856000049152531 + type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: {fileID: 0} + - rid: 8805856000049152532 + type: {class: 'TypedVariableModel`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + ID: + m_Value0: 7475528897857689991 + m_Value1: 9373801459200419976 + Name: Target + IsExposed: 1 + m_IsShared: 0 + m_Value: {fileID: 0} + - rid: 8805856000049152533 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 10 + - rid: 8805856000049152534 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 5 --- !u!114 &6694785542709420471 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2291,7 +2419,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5c02bb70996b49eba31d0c206e28da24, type: 3} m_Name: BT_TestBoss Blackboard m_EditorClassIdentifier: Unity.Behavior::Unity.Behavior.RuntimeBlackboardAsset - VersionTimestamp: 639092245458294623 + VersionTimestamp: 639094519736977735 AssetID: m_Value0: 11861793134961942170 m_Value1: 6108181331610501546 @@ -2302,7 +2430,6 @@ MonoBehaviour: - rid: 8805855841097089404 - rid: 8805855836547056143 - rid: 8805855836547056345 - - rid: 8805855841097090030 - rid: 8805855941168464124 m_SharedBlackboardVariableGuids: [] references: @@ -2348,14 +2475,6 @@ MonoBehaviour: m_Value1: 9373801459200419976 Name: Target m_Value: {fileID: 0} - - rid: 8805855841097090030 - type: {class: 'BlackboardVariable`1[[Colosseum.Skills.SkillData, Colosseum.Game]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 15894527964846533412 - m_Value1: 3771131609012049390 - Name: Default Attack Skill - m_Value: {fileID: 11400000, guid: 4f40629d4d334434285e8fdec3714536, type: 2} - rid: 8805855941168464124 type: {class: 'BlackboardVariable`1[[System.Boolean, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} data: diff --git a/Assets/_Game/Animations/Anim_TestBoss_점프.fbx.meta b/Assets/_Game/Animations/Anim_TestBoss_점프.fbx.meta index a51fff72..b02a761c 100644 --- a/Assets/_Game/Animations/Anim_TestBoss_점프.fbx.meta +++ b/Assets/_Game/Animations/Anim_TestBoss_점프.fbx.meta @@ -381,6 +381,100 @@ ModelImporter: maskType: 1 maskSource: {fileID: 31900000, guid: e8e1ad9aea8c740458a8550aa77c27b0, type: 2} additiveReferencePoseFrame: 1 + - serializedVersion: 16 + name: "AnimClip_\uC810\uD504 \uC900\uBE44" + takeName: A_MOD_GBL_Jump_Idle_RM_Neut + internalID: -5764696784021583549 + firstFrame: 1 + lastFrame: 21 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {fileID: 31900000, guid: e8e1ad9aea8c740458a8550aa77c27b0, type: 2} + additiveReferencePoseFrame: 1 + - serializedVersion: 16 + name: "AnimClip_\uC810\uD504 \uC911" + takeName: A_MOD_GBL_Jump_Idle_RM_Neut + internalID: 5443862797743907653 + firstFrame: 22 + lastFrame: 43 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {fileID: 31900000, guid: e8e1ad9aea8c740458a8550aa77c27b0, type: 2} + additiveReferencePoseFrame: 1 + - serializedVersion: 16 + name: "AnimClip_\uC810\uD504 \uCC29\uC9C0" + takeName: A_MOD_GBL_Jump_Idle_RM_Neut + internalID: 4379034921508237129 + firstFrame: 44 + lastFrame: 79 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: + - time: 0.052378073 + functionName: OnEffect + data: + objectReferenceParameter: {instanceID: 0} + floatParameter: 0 + intParameter: 0 + messageOptions: 0 + transformMask: [] + maskType: 3 + maskSource: {fileID: 31900000, guid: e8e1ad9aea8c740458a8550aa77c27b0, type: 2} + additiveReferencePoseFrame: 1 isReadable: 0 meshes: lODScreenPercentages: [] diff --git a/Assets/_Game/Data/Patterns/Data_Pattern_TestBoss_점프.asset b/Assets/_Game/Data/Patterns/Data_Pattern_TestBoss_점프.asset index bf2d806d..3f9c5694 100644 --- a/Assets/_Game/Data/Patterns/Data_Pattern_TestBoss_점프.asset +++ b/Assets/_Game/Data/Patterns/Data_Pattern_TestBoss_점프.asset @@ -14,7 +14,13 @@ MonoBehaviour: m_EditorClassIdentifier: Colosseum.Game::Colosseum.AI.BossPatternData patternName: "\uAE30\uBCF8 \uD328\uD134" steps: + - Type: 0 + Skill: {fileID: 11400000, guid: 0e22d4b1dc395a04fb00ca4f82aeb838, type: 2} + Duration: 0 - Type: 0 Skill: {fileID: 11400000, guid: 7556a61cbdcf2984684a762119e6e1b2, type: 2} Duration: 0 - cooldown: 5 + - Type: 0 + Skill: {fileID: 11400000, guid: 16321efbd1f2498458683bac7605b054, type: 2} + Duration: 0 + cooldown: 1 diff --git a/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프.asset b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프.asset index 81a9f14f..b27874d4 100644 --- a/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프.asset +++ b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프.asset @@ -15,11 +15,13 @@ MonoBehaviour: skillName: "\uC810\uD504" description: icon: {fileID: 0} - skillClip: {fileID: -8752051743343580635, guid: 5eaeca917bbeb494eb14ad0e0552c42f, type: 3} + skillClip: {fileID: 5443862797743907653, guid: 5eaeca917bbeb494eb14ad0e0552c42f, type: 3} endClip: {fileID: 0} + animationSpeed: 1 useRootMotion: 1 ignoreRootMotionY: 0 + jumpToTarget: 1 cooldown: 0 manaCost: 0 effects: - - {fileID: 11400000, guid: 11bd2d1ebdbfc2f4abf5a9d886615eb3, type: 2} + - {fileID: 0} diff --git a/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프준비.asset b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프준비.asset new file mode 100644 index 00000000..64385511 --- /dev/null +++ b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프준비.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 94f0a76cebcac2f4fb5daf1b675fd79f, type: 3} + m_Name: "Data_Skill_TestBoss_\uC810\uD504\uC900\uBE44" + m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.SkillData + skillName: "\uC810\uD504" + description: + icon: {fileID: 0} + skillClip: {fileID: -5764696784021583549, guid: 5eaeca917bbeb494eb14ad0e0552c42f, type: 3} + endClip: {fileID: 0} + animationSpeed: 1 + useRootMotion: 0 + ignoreRootMotionY: 0 + jumpToTarget: 0 + cooldown: 0 + manaCost: 0 + effects: + - {fileID: 0} diff --git a/Assets/_Game/NetworkPrefabsList.asset.meta b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프준비.asset.meta similarity index 79% rename from Assets/_Game/NetworkPrefabsList.asset.meta rename to Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프준비.asset.meta index 3d9abff7..bb8a53eb 100644 --- a/Assets/_Game/NetworkPrefabsList.asset.meta +++ b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프준비.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5320cf0e941c6c044a4c8663f86cd9e2 +guid: 0e22d4b1dc395a04fb00ca4f82aeb838 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset new file mode 100644 index 00000000..69124e98 --- /dev/null +++ b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 94f0a76cebcac2f4fb5daf1b675fd79f, type: 3} + m_Name: "Data_Skill_TestBoss_\uC810\uD504\uCC29\uC9C0" + m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.SkillData + skillName: "\uC810\uD504" + description: + icon: {fileID: 0} + skillClip: {fileID: 4379034921508237129, guid: 5eaeca917bbeb494eb14ad0e0552c42f, type: 3} + endClip: {fileID: 0} + animationSpeed: 1 + useRootMotion: 0 + ignoreRootMotionY: 0 + jumpToTarget: 0 + cooldown: 0 + manaCost: 0 + effects: + - {fileID: 11400000, guid: 11bd2d1ebdbfc2f4abf5a9d886615eb3, type: 2} diff --git a/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset.meta b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset.meta new file mode 100644 index 00000000..24515577 --- /dev/null +++ b/Assets/_Game/Data/Skills/Data_Skill_TestBoss_점프착지.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16321efbd1f2498458683bac7605b054 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/NetworkPrefabsList.asset b/Assets/_Game/NetworkPrefabsList.asset deleted file mode 100644 index de5b82a7..00000000 --- a/Assets/_Game/NetworkPrefabsList.asset +++ /dev/null @@ -1,21 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e651dbb3fbac04af2b8f5abf007ddc23, type: 3} - m_Name: NetworkPrefabsList - m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkPrefabsList - IsDefault: 0 - List: - - Override: 0 - Prefab: {fileID: 6473031571298860035, guid: 9f538e60b8b98634b8952310b91dfba0, type: 3} - SourcePrefabToOverride: {fileID: 0} - SourceHashToOverride: 0 - OverridingTargetPrefab: {fileID: 0} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs index 4aba9c16..1a6f929a 100644 --- a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs @@ -15,6 +15,7 @@ using Action = Unity.Behavior.Action; public partial class UsePatternAction : Action { [SerializeReference] public BlackboardVariable Pattern; + [SerializeReference] public BlackboardVariable Target; private SkillController skillController; private int currentStepIndex; @@ -112,6 +113,15 @@ public partial class UsePatternAction : Action return Status.Failure; } + // jumpToTarget 스킬이면 타겟 위치 전달 + if (step.Skill.JumpToTarget) + { + if (Target?.Value == null) + Debug.LogWarning($"[UsePatternAction] '{step.Skill.SkillName}'은 JumpToTarget 스킬이지만 Target이 바인딩되지 않았습니다."); + else + GameObject.GetComponent()?.SetJumpTarget(Target.Value.transform.position); + } + return Status.Running; } } diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSkillAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSkillAction.cs index 1582e158..3a0704bb 100644 --- a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSkillAction.cs +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSkillAction.cs @@ -14,6 +14,7 @@ using Unity.Properties; public partial class UseSkillAction : Action { [SerializeReference] public BlackboardVariable 스킬; + [SerializeReference] public BlackboardVariable Target; private SkillController skillController; @@ -42,6 +43,13 @@ public partial class UseSkillAction : Action return Status.Failure; } + // jumpToTarget 스킬이면 타겟 위치 전달 + if (스킬.Value.JumpToTarget && Target?.Value != null) + { + var enemyBase = GameObject.GetComponent(); + enemyBase?.SetJumpTarget(Target.Value.transform.position); + } + return Status.Running; } diff --git a/Assets/_Game/Scripts/Enemy/EnemyBase.cs b/Assets/_Game/Scripts/Enemy/EnemyBase.cs index 723417c4..387503f3 100644 --- a/Assets/_Game/Scripts/Enemy/EnemyBase.cs +++ b/Assets/_Game/Scripts/Enemy/EnemyBase.cs @@ -36,6 +36,11 @@ namespace Colosseum.Enemy // 점프 등 Y 루트모션 스킬 중 NavMeshAgent 비활성화 상태 추적 private bool isAirborne = false; + // 점프 타겟 이동 + private bool hasJumpTarget = false; + private Vector3 jumpStartXZ; + private Vector3 jumpTargetXZ; + // 이벤트 public event Action OnHealthChanged; // currentHealth, maxHealth public event Action OnDamageTaken; // damage @@ -84,45 +89,50 @@ namespace Colosseum.Enemy protected virtual void OnServerUpdate() { } /// - /// NavMeshAgent position sync 및 OnAnimatorMove 이후에 실행됩니다. - /// 보스가 이미 플레이어 안으로 들어온 경우 stoppingDistance 바깥으로 밀어냅니다. - /// Update()에서의 isStopped 조작은 NavMeshAgent에 의해 덮어써지지만, - /// LateUpdate()는 그 이후이므로 확실하게 보정됩니다. + /// 보스와 플레이어가 겹치면 플레이어를 밀어냅니다. + /// 점프 착지 포함, 항상 실행됩니다. /// private void LateUpdate() { - if (!IsServer || IsDead || navMeshAgent == null || isAirborne) return; + if (!IsServer || IsDead) return; - // stoppingDistance가 0이면 radius 기반 fallback 사용 - float stopDist = navMeshAgent.stoppingDistance > 0f - ? navMeshAgent.stoppingDistance - : navMeshAgent.radius + 0.5f; + float separationDist = navMeshAgent != null + ? Mathf.Max(navMeshAgent.stoppingDistance, navMeshAgent.radius + 0.5f) + : 1f; - int count = Physics.OverlapSphereNonAlloc(transform.position, stopDist, overlapBuffer); + int count = Physics.OverlapSphereNonAlloc(transform.position, separationDist, overlapBuffer); for (int i = 0; i < count; i++) { - // 레이어 무관하게 CharacterController 유무로 플레이어 식별 - if (!overlapBuffer[i].TryGetComponent(out _)) continue; + if (!overlapBuffer[i].TryGetComponent(out var cc)) continue; Vector3 toPlayer = overlapBuffer[i].transform.position - transform.position; toPlayer.y = 0f; float dist = toPlayer.magnitude; - if (dist >= stopDist) continue; + if (dist >= separationDist) continue; - // 보스가 실제로 이동 중일 때만 밀어냄. - // isStopped는 수동 설정 시만 true가 되므로, velocity로 실제 이동 여부를 판단. - if (navMeshAgent.velocity.sqrMagnitude > 0.01f) - { - Vector3 pushDir = dist > 0.001f ? -toPlayer.normalized : -transform.forward; - navMeshAgent.Warp(transform.position + pushDir * (stopDist - dist)); + // 플레이어를 보스 바깥으로 밀어냄 + Vector3 pushDir = dist > 0.001f ? toPlayer.normalized : transform.forward; + cc.Move(pushDir * (separationDist - dist)); + + // 보스가 이동 중이었으면 정지 (플레이어 안으로 더 진입하지 않도록) + if (navMeshAgent != null && !isAirborne && navMeshAgent.velocity.sqrMagnitude > 0.01f) navMeshAgent.isStopped = true; - } } } + /// + /// 점프 타겟 설정. UseSkillAction에서 jumpToTarget 스킬 시전 시 호출합니다. + /// + public void SetJumpTarget(Vector3 targetPos) + { + jumpTargetXZ = new Vector3(targetPos.x, 0f, targetPos.z); + hasJumpTarget = true; + } + /// /// 보스 스킬 루트모션이 플레이어 방향으로 진입하는 것을 차단합니다. /// Y 루트모션이 필요한 스킬(점프 등)은 NavMeshAgent를 비활성화하고 직접 이동합니다. + /// jumpToTarget 스킬은 XZ를 대상 위치로 lerp합니다. /// private void OnAnimatorMove() { @@ -131,30 +141,12 @@ namespace Colosseum.Enemy var skillCtrl = GetComponent(); bool needsYMotion = skillCtrl != null && skillCtrl.IsPlayingAnimation + && !skillCtrl.IsInEndAnimation && skillCtrl.UsesRootMotion && !skillCtrl.IgnoreRootMotionY; Vector3 deltaPosition = animator.deltaPosition; - // XZ 차단: 플레이어 방향으로의 이동 방지 - float blockRadius = Mathf.Max(navMeshAgent.stoppingDistance, navMeshAgent.radius + 0.5f); - int count = Physics.OverlapSphereNonAlloc(transform.position, blockRadius, overlapBuffer); - for (int i = 0; i < count; i++) - { - if (!overlapBuffer[i].TryGetComponent(out _)) continue; - - Vector3 toPlayer = overlapBuffer[i].transform.position - transform.position; - toPlayer.y = 0f; - if (toPlayer.sqrMagnitude < 0.0001f) continue; - - Vector3 deltaXZ = new Vector3(deltaPosition.x, 0f, deltaPosition.z); - if (Vector3.Dot(deltaXZ, toPlayer.normalized) > 0f) - { - deltaPosition.x = 0f; - deltaPosition.z = 0f; - } - } - if (needsYMotion) { // Y 루트모션 필요: NavMeshAgent 비활성화 후 transform 직접 이동 @@ -162,8 +154,21 @@ namespace Colosseum.Enemy { navMeshAgent.enabled = false; isAirborne = true; + jumpStartXZ = new Vector3(transform.position.x, 0f, transform.position.z); + } + + if (hasJumpTarget) + { + // XZ: 애니메이션 진행도에 따라 목표 위치로 lerp + float t = Mathf.Clamp01(animator.GetCurrentAnimatorStateInfo(0).normalizedTime); + Vector3 newXZ = Vector3.Lerp(jumpStartXZ, jumpTargetXZ, t); + transform.position = new Vector3(newXZ.x, transform.position.y + deltaPosition.y, newXZ.z); + } + else + { + // jumpToTarget 없으면 기존처럼 애니메이션 루트모션 그대로 적용 + transform.position += deltaPosition; } - transform.position += deltaPosition; } else { @@ -171,9 +176,35 @@ namespace Colosseum.Enemy if (isAirborne) { isAirborne = false; + if (hasJumpTarget) + { + // lerp가 1.0에 못 미쳐도 착지 시 정확한 위치로 스냅 + transform.position = new Vector3(jumpTargetXZ.x, transform.position.y, jumpTargetXZ.z); + } + hasJumpTarget = false; navMeshAgent.enabled = true; navMeshAgent.Warp(transform.position); } + + // XZ 차단: 플레이어 방향으로의 이동 방지 (일반 이동 중에만) + float blockRadius = Mathf.Max(navMeshAgent.stoppingDistance, navMeshAgent.radius + 0.5f); + int count = Physics.OverlapSphereNonAlloc(transform.position, blockRadius, overlapBuffer); + for (int i = 0; i < count; i++) + { + if (!overlapBuffer[i].TryGetComponent(out _)) continue; + + Vector3 toPlayer = overlapBuffer[i].transform.position - transform.position; + toPlayer.y = 0f; + if (toPlayer.sqrMagnitude < 0.0001f) continue; + + Vector3 deltaXZ = new Vector3(deltaPosition.x, 0f, deltaPosition.z); + if (Vector3.Dot(deltaXZ, toPlayer.normalized) > 0f) + { + deltaPosition.x = 0f; + deltaPosition.z = 0f; + } + } + navMeshAgent.Move(deltaPosition); } diff --git a/Assets/_Game/Scripts/Skills/SkillController.cs b/Assets/_Game/Scripts/Skills/SkillController.cs index 5981abe7..7acfbad7 100644 --- a/Assets/_Game/Scripts/Skills/SkillController.cs +++ b/Assets/_Game/Scripts/Skills/SkillController.cs @@ -42,6 +42,7 @@ namespace Colosseum.Skills public bool IsExecutingSkill => currentSkill != null && !skillEndRequested; public bool IsPlayingAnimation => currentSkill != null; + public bool IsInEndAnimation => waitingForEndAnimation; public bool UsesRootMotion => currentSkill != null && currentSkill.UseRootMotion; public bool IgnoreRootMotionY => currentSkill != null && currentSkill.IgnoreRootMotionY; public SkillData CurrentSkill => currentSkill; @@ -143,6 +144,7 @@ namespace Colosseum.Skills // 스킬 애니메이션 재생 if (skill.SkillClip != null && animator != null) { + animator.speed = skill.AnimationSpeed; PlaySkillClip(skill.SkillClip); } @@ -212,6 +214,7 @@ namespace Colosseum.Skills if (animator != null && baseController != null) { animator.runtimeAnimatorController = baseController; + animator.speed = 1f; } // 클라이언트에 복원 동기화 diff --git a/Assets/_Game/Scripts/Skills/SkillData.cs b/Assets/_Game/Scripts/Skills/SkillData.cs index b2824807..ffb200d7 100644 --- a/Assets/_Game/Scripts/Skills/SkillData.cs +++ b/Assets/_Game/Scripts/Skills/SkillData.cs @@ -20,12 +20,16 @@ namespace Colosseum.Skills [SerializeField] private AnimationClip skillClip; [Tooltip("종료 애니메이션 (선택)")] [SerializeField] private AnimationClip endClip; + [Tooltip("애니메이션 재생 속도 (1 = 기본, 2 = 2배속)")] + [Min(0.1f)] [SerializeField] private float animationSpeed = 1f; [Header("루트 모션")] [Tooltip("애니메이션의 이동/회전 데이터를 캐릭터에 적용")] [SerializeField] private bool useRootMotion = false; [Tooltip("루트 모션 적용 시 Y축 이동 무시 (중력과 충돌)")] [SerializeField] private bool ignoreRootMotionY = true; + [Tooltip("스킬 시전 시 대상 위치로 점프 이동 (UseRootMotion + IgnoreRootMotionY=false 필요)")] + [SerializeField] private bool jumpToTarget = false; [Header("쿨타임 & 비용")] [Min(0f)] [SerializeField] private float cooldown = 1f; @@ -41,10 +45,12 @@ namespace Colosseum.Skills public Sprite Icon => icon; public AnimationClip SkillClip => skillClip; public AnimationClip EndClip => endClip; + public float AnimationSpeed => animationSpeed; public float Cooldown => cooldown; public float ManaCost => manaCost; public bool UseRootMotion => useRootMotion; public bool IgnoreRootMotionY => ignoreRootMotionY; + public bool JumpToTarget => jumpToTarget; public IReadOnlyList Effects => effects; } }