From de2cb2194e5b4b55b33b2f2030d89666ce3bfd45 Mon Sep 17 00:00:00 2001 From: dal4segno Date: Mon, 23 Mar 2026 16:02:45 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=93=9C=EB=A1=9C=EA=B7=B8=20=EA=B3=B5?= =?UTF-8?q?=ED=86=B5=20=EB=B3=B4=EC=8A=A4=20BT=20=ED=94=84=EB=A0=88?= =?UTF-8?q?=EC=9E=84=EC=9B=8C=ED=81=AC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/_Game/AI/BT_Drog.asset | 4362 +++++++++-------- .../_Game/Animations/Anim_Drog_스윙.fbx.meta | 7 + .../Animations/Anim_Drog_오른손치기2.fbx.meta | 14 +- .../_Game/Animations/Anim_Drog_점프.fbx.meta | 7 + .../Patterns/Data_Pattern_Drog_내려찍기.asset | 20 + .../Data_Pattern_Drog_내려찍기.asset.meta | 8 + .../Data_Pattern_Drog_약2타-스윙.asset | 3 - .../Patterns/Data_Pattern_Drog_점프.asset | 2 +- .../Skills/Data_Skill_Drog_다운추가타.asset | 1 + .../Data/Skills/Data_Skill_Drog_스윙.asset | 1 + .../Skills/Data_Skill_Drog_오른손치기2.asset | 2 +- .../Skills/Data_Skill_Drog_점프착지.asset | 1 + ...a_SkillEffect_Drog_다운추가타_1_넉백.asset | 28 + ...llEffect_Drog_다운추가타_1_넉백.asset.meta | 8 + .../Data_SkillEffect_Drog_스윙_1_넉백.asset | 28 + ...ta_SkillEffect_Drog_스윙_1_넉백.asset.meta | 8 + ..._SkillEffect_Drog_오른손치기2_1_다운.asset | 2 +- ...lEffect_Drog_오른손치기2_1_다운.asset.meta | 2 +- .../Data_SkillEffect_Drog_점프_1_넉백.asset | 28 + ...ta_SkillEffect_Drog_점프_1_넉백.asset.meta | 8 + .../Prefabs/Bosses/Prefab_Boss_Drog.prefab | 6 +- .../Actions/BossPatternActionBase.cs | 249 + .../Actions/BossPatternActionBase.cs.meta | 2 + .../CheckMobilityPatternReadyAction.cs | 20 + .../CheckMobilityPatternReadyAction.cs.meta | 2 + .../Actions/CheckPatternReadyActionBase.cs | 31 + .../CheckPatternReadyActionBase.cs.meta | 2 + .../Actions/CheckPrimaryPatternReadyAction.cs | 20 + .../CheckPrimaryPatternReadyAction.cs.meta | 2 + .../Actions/CheckPunishPatternReadyAction.cs | 20 + .../CheckPunishPatternReadyAction.cs.meta | 2 + .../CheckSecondaryPatternReadyAction.cs | 20 + .../CheckSecondaryPatternReadyAction.cs.meta | 2 + .../CheckSecondaryPatternTurnAction.cs | 26 + .../CheckSecondaryPatternTurnAction.cs.meta | 2 + .../Actions/CheckTargetInAttackRangeAction.cs | 35 + .../CheckTargetInAttackRangeAction.cs.meta | 2 + .../Actions/RefreshPrimaryTargetAction.cs | 46 + .../RefreshPrimaryTargetAction.cs.meta | 2 + .../SelectNearestDownedTargetAction.cs | 93 + .../SelectNearestDownedTargetAction.cs.meta | 2 + .../Actions/SelectTargetByDistanceAction.cs | 172 + .../SelectTargetByDistanceAction.cs.meta | 2 + .../Actions/UseMobilityPatternAction.cs | 20 + .../Actions/UseMobilityPatternAction.cs.meta | 2 + .../Actions/UsePatternAction.cs | 126 +- .../Actions/UsePatternRoleActionBase.cs | 57 + .../Actions/UsePatternRoleActionBase.cs.meta | 2 + .../Actions/UsePrimaryPatternAction.cs | 20 + .../Actions/UsePrimaryPatternAction.cs.meta | 2 + .../Actions/UsePunishPatternAction.cs | 20 + .../Actions/UsePunishPatternAction.cs.meta | 2 + .../Actions/UseSecondaryPatternAction.cs | 20 + .../Actions/UseSecondaryPatternAction.cs.meta | 2 + .../Actions/ValidateTargetAction.cs | 33 + .../Actions/ValidateTargetAction.cs.meta | 2 + .../RebuildDrogBehaviorAuthoringGraph.cs | 304 ++ .../RebuildDrogBehaviorAuthoringGraph.cs.meta | 2 + .../Enemy/BossCombatBehaviorContext.cs | 520 ++ .../Enemy/BossCombatBehaviorContext.cs.meta | 2 + .../Scripts/Enemy/BossCombatPatternRole.cs | 27 + .../Enemy/BossCombatPatternRole.cs.meta | 2 + Assets/_Game/Scripts/Enemy/BossEnemy.cs | 6 +- .../Scripts/Enemy/DrogPatternController.cs | 404 +- Tools/Reload-Obsidian.ps1 | 13 + 65 files changed, 4514 insertions(+), 2374 deletions(-) create mode 100644 Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset create mode 100644 Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset.meta create mode 100644 Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset create mode 100644 Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset.meta create mode 100644 Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset create mode 100644 Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset.meta create mode 100644 Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset create mode 100644 Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs.meta create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs create mode 100644 Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs.meta create mode 100644 Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs create mode 100644 Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs.meta create mode 100644 Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs create mode 100644 Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs.meta create mode 100644 Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs create mode 100644 Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs.meta create mode 100644 Tools/Reload-Obsidian.ps1 diff --git a/Assets/_Game/AI/BT_Drog.asset b/Assets/_Game/AI/BT_Drog.asset index c493d70f..62e28e89 100644 --- a/Assets/_Game/AI/BT_Drog.asset +++ b/Assets/_Game/AI/BT_Drog.asset @@ -1,4 +1,4 @@ -%YAML 1.1 +%YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!114 &-6758363554468061369 MonoBehaviour: @@ -134,8 +134,8 @@ MonoBehaviour: rid: 8805855836547055694 BlackboardGroupReferences: [] Root: - rid: 8805856000049152583 - m_VersionTimestamp: 639094532463569056 + rid: 8805856113439801676 + m_VersionTimestamp: 639098784865219134 - rid: 8805855836547055694 type: {class: BlackboardReference, ns: Unity.Behavior, asm: Unity.Behavior} data: @@ -200,138 +200,15 @@ MonoBehaviour: m_Value1: 14990413519379198129 Name: Die m_Value: 0 - - rid: 8805856000049152583 - type: {class: Start, ns: Unity.Behavior, asm: Unity.Behavior} - data: - ID: - m_Value0: 8361680655506702021 - m_Value1: 11075116708293476273 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: -2 - m_Child: - rid: 8805856000049152584 - Repeat: 0 - AllowMultipleRepeatsPerTick: 0 - - rid: 8805856000049152584 - type: {class: RepeaterModifier, ns: Unity.Behavior, asm: Unity.Behavior} - data: - ID: - m_Value0: 16903089648015682040 - m_Value1: 5621269674286214316 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152583 - m_Child: - rid: 8805856000049152585 - m_AllowMultipleRepeatsPerTick: 0 - - rid: 8805856000049152585 - type: {class: BranchingConditionComposite, ns: Unity.Behavior, asm: Unity.Behavior} - data: - ID: - m_Value0: 3882872508468950798 - m_Value1: 3938133446346283639 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152584 - m_Children: - - rid: 8805856000049152586 - m_RegisteredObservers: [] - m_Conditions: - - rid: 8805856000049152587 - m_RequiresAllConditions: 0 - True: - rid: -2 - False: - rid: 8805856000049152586 - m_CurrentChild: - rid: -2 - m_ObserverType: 0 - - rid: 8805856000049152586 - type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} - data: - ID: - m_Value0: 2112550037797404360 - m_Value1: 3268971171652514817 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152585 - m_Children: - - rid: 8805856000049152588 - - rid: 8805856000049152589 - m_RegisteredObservers: [] - - rid: 8805856000049152587 - type: {class: VariableComparisonCondition, ns: Unity.Behavior, asm: Unity.Behavior} - data: - Graph: - rid: 8805855836547055693 - Variable: - rid: 8805856000049152400 - Operator: - rid: 8805856000049152590 - ComparisonValue: - rid: 8805856000049152591 - - rid: 8805856000049152588 - type: {class: SetTargetInRangeAction, ns: , asm: Colosseum.Game} - data: - ID: - m_Value0: 2112550037797404360 - m_Value1: 3268971171652514817 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152586 - Target: - rid: 8805856000049152397 - Tag: - rid: 8805856000049152592 - Range: - rid: 8805856000049152593 - - rid: 8805856000049152589 - type: {class: BranchingConditionComposite, ns: Unity.Behavior, asm: Unity.Behavior} - data: - ID: - m_Value0: 6087481783018872809 - m_Value1: 15765389902485577860 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152586 - m_Children: - - rid: 8805856000049152594 - - rid: 8805856000049152595 - m_RegisteredObservers: [] - m_Conditions: - - rid: 8805856000049152596 - m_RequiresAllConditions: 0 - True: - rid: 8805856000049152594 - False: - rid: 8805856000049152595 - m_CurrentChild: - rid: -2 - m_ObserverType: 0 - - rid: 8805856000049152590 - type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} + - rid: 8805856113439801515 + 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: 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 + - rid: 8805856113439801516 type: {class: 'BlackboardVariable`1[[System.String, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -339,252 +216,490 @@ MonoBehaviour: m_Value1: 0 Name: m_Value: Player - - rid: 8805856000049152593 + - rid: 8805856113439801517 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} + m_Value: 0 + - rid: 8805856113439801518 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 20 + - rid: 8805856113439801519 + type: {class: 'BlackboardVariable`1[[DistanceTargetSelectionMode, Colosseum.Game]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 1 + - rid: 8805856113439801520 + 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: 8805856113439801521 + 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: 8805856113439801676 + type: {class: Start, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: - m_Value0: 10925304658634853314 - m_Value1: 14003116682958237093 + m_Value0: 3944491945985234464 + m_Value1: 10075432118744806958 Graph: rid: 8805855836547055693 m_Parent: - rid: 8805856000049152589 - m_Children: - - rid: 8805856000049152597 - - rid: 8805856000049152598 - m_RegisteredObservers: [] - m_Conditions: - - rid: 8805856000049152599 - m_RequiresAllConditions: 0 - True: - rid: 8805856000049152597 - False: - rid: 8805856000049152598 - m_CurrentChild: rid: -2 - m_ObserverType: 0 - - rid: 8805856000049152595 - type: {class: WaitAction, ns: , asm: Colosseum.Game} + m_Child: + rid: 8805856113439801677 + Repeat: 1 + AllowMultipleRepeatsPerTick: 0 + - rid: 8805856113439801677 + type: {class: RepeaterModifier, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: - m_Value0: 7100545047213284048 - m_Value1: 17094481857695181652 + m_Value0: 18202383970471888822 + m_Value1: 5919000831638527321 Graph: rid: 8805855836547055693 m_Parent: - rid: 8805856000049152589 - Duration: - rid: 8805856000049152600 - - rid: 8805856000049152596 - type: {class: VariableComparisonCondition, ns: Unity.Behavior, asm: Unity.Behavior} - data: - Graph: - rid: 8805855836547055693 - Variable: - rid: 8805856000049152397 - Operator: - rid: 8805856000049152601 - ComparisonValue: - rid: 8805856000049152602 - - rid: 8805856000049152597 - type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} - data: - ID: - m_Value0: 2656906456090040103 - m_Value1: 5313501299737419023 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152594 - m_Children: - - rid: 8805856000049152603 - - rid: 8805856000049152604 - m_RegisteredObservers: [] - - rid: 8805856000049152598 - type: {class: ParallelAllComposite, ns: Unity.Behavior, asm: Unity.Behavior} - data: - ID: - m_Value0: 14249649058231311876 - m_Value1: 11772280117554626987 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152594 - m_Children: - - rid: 8805856000049152605 - - rid: 8805856000049152606 - m_RegisteredObservers: [] - - rid: 8805856000049152599 - type: {class: CheckDistanceCondition, ns: Unity.Behavior, asm: Unity.Behavior} - data: - Graph: - rid: 8805855836547055693 - Transform: - rid: 8805856000049152607 - Target: - rid: 8805856000049152608 - Operator: - rid: 8805856000049152609 - Threshold: - 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: - m_Value0: 2656906456090040103 - m_Value1: 5313501299737419023 - Graph: - rid: 8805855836547055693 - m_Parent: - rid: 8805856000049152597 - Target: - rid: 8805856000049152397 - RotationSpeed: - rid: 8805856000049152610 - AngleThreshold: - rid: 8805856000049152611 - - rid: 8805856000049152604 + rid: 8805856113439801676 + m_Child: + rid: 8805856113439801678 + m_AllowMultipleRepeatsPerTick: 0 + - rid: 8805856113439801678 type: {class: SelectorComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: - m_Value0: 1213596326002826456 - m_Value1: 9846416129968350328 + m_Value0: 398178747935607711 + m_Value1: 7574567307776651754 Graph: rid: 8805855836547055693 m_Parent: - rid: 8805856000049152597 - m_Children: [] + rid: 8805856113439801677 + m_Children: + - rid: 8805856113439801679 + - rid: 8805856113439801680 + - rid: 8805856113439801681 + - rid: 8805856113439801682 + - rid: 8805856113439801683 + - rid: 8805856113439801684 m_RegisteredObservers: [] - - rid: 8805856000049152605 - type: {class: RotateToTargetAction, ns: , asm: Colosseum.Game} + - rid: 8805856113439801679 + type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: - m_Value0: 17771351983187136722 - m_Value1: 7918239022991775575 + m_Value0: 10441495572728319624 + m_Value1: 18145710329216171556 Graph: rid: 8805855836547055693 m_Parent: - rid: 8805856000049152598 - Target: - rid: 8805856000049152397 - RotationSpeed: - rid: 8805856000049152612 - AngleThreshold: - rid: 8805856000049152613 - - rid: 8805856000049152606 - type: {class: UsePatternAction, ns: , asm: Colosseum.Game} + rid: 8805856113439801678 + m_Children: + - rid: 8805856113439801685 + - rid: 8805856113439801686 + - rid: 8805856113439801687 + m_RegisteredObservers: [] + - rid: 8805856113439801680 + type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} data: ID: - m_Value0: 6072905976649188714 - m_Value1: 6639982183309942236 + m_Value0: 6168839543956477089 + m_Value1: 11275182414090957339 Graph: rid: 8805855836547055693 m_Parent: - rid: 8805856000049152598 - Pattern: - rid: 8805856000049152614 + rid: 8805856113439801678 + m_Children: + - rid: 8805856113439801688 + - rid: 8805856113439801689 + - rid: 8805856113439801690 + m_RegisteredObservers: [] + - rid: 8805856113439801681 + type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} + data: + ID: + m_Value0: 16509142761903036207 + m_Value1: 11797946855901307058 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801678 + m_Children: + - rid: 8805856113439801691 + - rid: 8805856113439801692 + - rid: 8805856113439801693 + - rid: 8805856113439801694 + - rid: 8805856113439801695 + - rid: 8805856113439801696 + m_RegisteredObservers: [] + - rid: 8805856113439801682 + type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} + data: + ID: + m_Value0: 12671461730204450349 + m_Value1: 15265453094671554164 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801678 + m_Children: + - rid: 8805856113439801697 + - rid: 8805856113439801698 + - rid: 8805856113439801699 + - rid: 8805856113439801700 + - rid: 8805856113439801701 + m_RegisteredObservers: [] + - rid: 8805856113439801683 + type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} + data: + ID: + m_Value0: 18027270346692850458 + m_Value1: 8457381046822106713 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801678 + m_Children: + - rid: 8805856113439801702 + - rid: 8805856113439801703 + - rid: 8805856113439801704 + - rid: 8805856113439801705 + - rid: 8805856113439801706 + m_RegisteredObservers: [] + - rid: 8805856113439801684 + type: {class: SequenceComposite, ns: Unity.Behavior, asm: Unity.Behavior} + data: + ID: + m_Value0: 8713107049279116071 + m_Value1: 9769549314833514694 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801678 + m_Children: + - rid: 8805856113439801707 + - rid: 8805856113439801708 + - rid: 8805856113439801709 + m_RegisteredObservers: [] + - rid: 8805856113439801685 + type: {class: SelectNearestDownedTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 13798264256640470984 + m_Value1: 9044784723309059020 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801679 Target: rid: 8805856000049152397 - - rid: 8805856000049152607 - type: {class: 'GameObjectToComponentBlackboardVariable`1[[UnityEngine.Transform, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} + SearchRadius: + rid: 8805856113439801515 + - rid: 8805856113439801686 + type: {class: CheckPunishPatternReadyAction, ns: , asm: Colosseum.Game} 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} + ID: + m_Value0: 17028571991082717895 + m_Value1: 7352148230105113793 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801679 + - rid: 8805856113439801687 + type: {class: UsePunishPatternAction, ns: , asm: Colosseum.Game} data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 0} - m_LinkedVariable: + ID: + m_Value0: 8069975285165892673 + m_Value1: 6614076379062333819 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801679 + Target: rid: 8805856000049152397 - - rid: 8805856000049152609 - type: {class: 'BlackboardVariable`1[[Unity.Behavior.ConditionOperator, Unity.Behavior]]', ns: Unity.Behavior, asm: Unity.Behavior} + - rid: 8805856113439801688 + type: {class: SelectTargetByDistanceAction, ns: , asm: Colosseum.Game} 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} + ID: + m_Value0: 2541997251605238282 + m_Value1: 17207302682821541222 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801680 + Target: + rid: 8805856000049152397 + Tag: + rid: 8805856113439801516 + MinRange: + rid: 8805856113439801517 + MaxRange: + rid: 8805856113439801518 + SelectionMode: + rid: 8805856113439801519 + - rid: 8805856113439801689 + type: {class: CheckMobilityPatternReadyAction, ns: , asm: Colosseum.Game} 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} + ID: + m_Value0: 1168026670980482786 + m_Value1: 10696105289007618014 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801680 + - rid: 8805856113439801690 + type: {class: UseMobilityPatternAction, ns: , asm: Colosseum.Game} 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} + ID: + m_Value0: 5133138069850922554 + m_Value1: 11111217626666621090 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801680 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801691 + type: {class: RefreshPrimaryTargetAction, ns: , asm: Colosseum.Game} 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} + ID: + m_Value0: 1336661570389436292 + m_Value1: 14184982584268272727 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801681 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801692 + type: {class: ValidateTargetAction, ns: , asm: Colosseum.Game} 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} + ID: + m_Value0: 1159320695782321619 + m_Value1: 1455929843613418813 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801681 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801693 + type: {class: CheckTargetInAttackRangeAction, ns: , asm: Colosseum.Game} data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 11400000, guid: 88e6cc7cab28baf4c8f8a742247000ec, type: 2} + ID: + m_Value0: 12573652026917026955 + m_Value1: 5552834901857357329 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801681 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801694 + type: {class: CheckSecondaryPatternTurnAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 3814268768543398152 + m_Value1: 2609183473855007568 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801681 + - rid: 8805856113439801695 + type: {class: CheckSecondaryPatternReadyAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 7006308348220467330 + m_Value1: 11049550376158880254 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801681 + - rid: 8805856113439801696 + type: {class: UseSecondaryPatternAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 9822364172009382639 + m_Value1: 11871502844696962604 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801681 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801697 + type: {class: RefreshPrimaryTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 14858217615681981828 + m_Value1: 8818105421142067472 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801682 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801698 + type: {class: ValidateTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 109114609900411872 + m_Value1: 8926719061613283666 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801682 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801699 + type: {class: CheckTargetInAttackRangeAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 3749161462120118103 + m_Value1: 2503175866245522430 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801682 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801700 + type: {class: CheckPrimaryPatternReadyAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 1856011962074969088 + m_Value1: 6243725556440796836 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801682 + - rid: 8805856113439801701 + type: {class: UsePrimaryPatternAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 7186990809598279497 + m_Value1: 3420770028979615744 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801682 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801702 + type: {class: RefreshPrimaryTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 4278553797089195640 + m_Value1: 9252751663660805834 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801683 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801703 + type: {class: ValidateTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 17817043910916039977 + m_Value1: 11383935187233238739 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801683 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801704 + type: {class: CheckTargetInAttackRangeAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 10974017013180213996 + m_Value1: 598595675438468009 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801683 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801705 + type: {class: CheckSecondaryPatternReadyAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 15652672805528451484 + m_Value1: 12680400870830473934 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801683 + - rid: 8805856113439801706 + type: {class: UseSecondaryPatternAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 11262280553926999856 + m_Value1: 9907295714702289646 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801683 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801707 + type: {class: RefreshPrimaryTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 14996338139681041873 + m_Value1: 11900659897878691184 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801684 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801708 + type: {class: ValidateTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 17175457747312659229 + m_Value1: 777420747333904416 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801684 + Target: + rid: 8805856000049152397 + - rid: 8805856113439801709 + type: {class: ChaseTargetAction, ns: , asm: Colosseum.Game} + data: + ID: + m_Value0: 15294844399589336592 + m_Value1: 16330539450226202290 + Graph: + rid: 8805855836547055693 + m_Parent: + rid: 8805856113439801684 + Target: + rid: 8805856000049152397 + Speed: + rid: 8805856113439801520 + StopDistance: + rid: 8805856113439801521 --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -600,29 +715,41 @@ MonoBehaviour: Blackboard: {fileID: -6591390698989283165} m_Description: m_Nodes: - - rid: 8805855836547055698 - - rid: 8805855841097089291 - - rid: 8805855841097089292 - - rid: 8805855841097089293 - - rid: 8805855841097089335 - - rid: 8805855841097089353 - - rid: 8805855841097089467 - - rid: 8805855841097089544 - - rid: 8805855841097089648 - - rid: 8805855841097089764 - - rid: 8805855841097089765 - - rid: 8805855841097089766 - - rid: 8805855846311395415 - - rid: 8805855941168464148 - - rid: 8805855941168464149 - - rid: 8805855941168464150 - - rid: 8805855941168464612 - - rid: 8805855948962791632 - - rid: 8805855956374126770 - - rid: 8805855974927368268 - - rid: 8805856000049152462 - - rid: 8805856000049152525 - m_VersionTimestamp: 639094532463569056 + - rid: 8805856113439801522 + - rid: 8805856113439801523 + - rid: 8805856113439801524 + - rid: 8805856113439801525 + - rid: 8805856113439801526 + - rid: 8805856113439801527 + - rid: 8805856113439801528 + - rid: 8805856113439801529 + - rid: 8805856113439801530 + - rid: 8805856113439801531 + - rid: 8805856113439801532 + - rid: 8805856113439801533 + - rid: 8805856113439801534 + - rid: 8805856113439801535 + - rid: 8805856113439801536 + - rid: 8805856113439801537 + - rid: 8805856113439801538 + - rid: 8805856113439801539 + - rid: 8805856113439801540 + - rid: 8805856113439801541 + - rid: 8805856113439801542 + - rid: 8805856113439801543 + - rid: 8805856113439801544 + - rid: 8805856113439801545 + - rid: 8805856113439801546 + - rid: 8805856113439801547 + - rid: 8805856113439801548 + - rid: 8805856113439801549 + - rid: 8805856113439801550 + - rid: 8805856113439801551 + - rid: 8805856113439801552 + - rid: 8805856113439801553 + - rid: 8805856113439801554 + - rid: 8805856113439801555 + m_VersionTimestamp: 639098784865219134 m_SerializedVersion: 2 m_DebugInfo: {fileID: -6758363554468061369} m_RuntimeGraph: {fileID: -3933356984444701103} @@ -644,33 +771,252 @@ MonoBehaviour: Variables: [] NamedChildren: [] IsPlaceholder: 0 - - Name: Conditional Branch + - Name: Repeat Story: - RuntimeTypeString: Unity.Behavior.BranchingConditionComposite, Unity.Behavior, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + RuntimeTypeString: Unity.Behavior.RepeaterModifier, Unity.Behavior, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null RuntimeTypeID: - m_Value0: 12334964803190848789 - m_Value1: 14608808926743427008 + m_Value0: 3696095273264312494 + m_Value1: 14191201703811421854 Variables: [] - NamedChildren: - - True - - False + NamedChildren: [] IsPlaceholder: 0 - - Name: Wait - Story: "\uB300\uAE30" - RuntimeTypeString: WaitAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, - PublicKeyToken=null + - Name: Try In Order + Story: + RuntimeTypeString: Unity.Behavior.SelectorComposite, Unity.Behavior, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null RuntimeTypeID: - m_Value0: 2068857283001694323 - m_Value1: 11359859023677000345 + m_Value0: 11477120919463386923 + m_Value1: 7730102824742023565 + Variables: [] + NamedChildren: [] + IsPlaceholder: 0 + - Name: Sequence + Story: + RuntimeTypeString: Unity.Behavior.SequenceComposite, Unity.Behavior, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 10181448252506100447 + m_Value1: 8737116843063128493 + Variables: [] + NamedChildren: [] + IsPlaceholder: 0 + - Name: Select Nearest Downed Target + Story: "[SearchRadius] \uBC18\uACBD \uB0B4 \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uB2E4\uC6B4 + \uB300\uC0C1\uC744 [Target]\uC73C\uB85C \uC120\uD0DD" + RuntimeTypeString: SelectNearestDownedTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 3479009025465913838 + m_Value1: 8189696432825349292 Variables: - - Name: Duration + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + - Name: SearchRadius Type: m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Tooltip: NamedChildren: [] IsPlaceholder: 0 + - Name: Check Punish Pattern Ready + Story: "\uC9D5\uBC8C \uD328\uD134 \uC900\uBE44 \uC5EC\uBD80 \uD655\uC778" + RuntimeTypeString: CheckPunishPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 17241132588797744616 + m_Value1: 12089745580882483368 + Variables: [] + NamedChildren: [] + IsPlaceholder: 0 + - Name: Use Punish Pattern + Story: "\uC9D5\uBC8C \uD328\uD134 \uC2E4\uD589" + RuntimeTypeString: UsePunishPatternAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + RuntimeTypeID: + m_Value0: 15871296011671630677 + m_Value1: 8078034232868777638 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 + - Name: Select Target By Distance + Story: "[Tag] \uB300\uC0C1 \uC911 [MinRange] \uC774\uC0C1 [MaxRange] \uC774\uD558 + \uBC94\uC704\uC5D0\uC11C [SelectionMode] \uBC29\uC2DD\uC73C\uB85C [Target] + \uC120\uD0DD" + RuntimeTypeString: SelectTargetByDistanceAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 17676628481821338191 + m_Value1: 4731651210062498751 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + - Name: Tag + Type: + m_SerializableType: System.String, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + Tooltip: + - Name: MinRange + Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + Tooltip: + - Name: MaxRange + Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + Tooltip: + - Name: SelectionMode + Type: + m_SerializableType: DistanceTargetSelectionMode, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 + - Name: Check Mobility Pattern Ready + Story: "\uAE30\uB3D9 \uD328\uD134 \uC900\uBE44 \uC5EC\uBD80 \uD655\uC778" + RuntimeTypeString: CheckMobilityPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 8450458953142456155 + m_Value1: 940103638269631644 + Variables: [] + NamedChildren: [] + IsPlaceholder: 0 + - Name: Use Mobility Pattern + Story: "\uAE30\uB3D9 \uD328\uD134 \uC2E4\uD589" + RuntimeTypeString: UseMobilityPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 10758284640051141051 + m_Value1: 14733138854283253894 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 + - Name: Refresh Primary Target + Story: "\uBCF4\uC2A4 \uC8FC \uB300\uC0C1\uC744 [Target]\uC73C\uB85C \uAC31\uC2E0" + RuntimeTypeString: RefreshPrimaryTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 1676760785695660983 + m_Value1: 3474893727400520085 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 + - Name: Validate Target + Story: "[Target]\uC774 \uC0B4\uC544 \uC788\uB294 \uC720\uD6A8 \uB300\uC0C1\uC778\uC9C0 + \uD655\uC778" + RuntimeTypeString: ValidateTargetAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + RuntimeTypeID: + m_Value0: 1389171756588788969 + m_Value1: 2283983672959160206 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 + - Name: Check Target In Attack Range + Story: "[Target]\uC774 \uBCF4\uC2A4 \uACF5\uACA9 \uC0AC\uAC70\uB9AC \uC548\uC5D0 + \uC788\uB294\uC9C0 \uD655\uC778" + RuntimeTypeString: CheckTargetInAttackRangeAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 17746747867388412438 + m_Value1: 14905810610476077465 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 + - Name: Check Secondary Pattern Turn + Story: "\uD604\uC7AC \uADFC\uC811 \uD328\uD134 \uCC28\uB840\uAC00 \uBCF4\uC870 + \uD328\uD134\uC778\uC9C0 \uD655\uC778" + RuntimeTypeString: CheckSecondaryPatternTurnAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 5206874914379224296 + m_Value1: 5224171301583253166 + Variables: [] + NamedChildren: [] + IsPlaceholder: 0 + - Name: Check Secondary Pattern Ready + Story: "\uBCF4\uC870 \uD328\uD134 \uC900\uBE44 \uC5EC\uBD80 \uD655\uC778" + RuntimeTypeString: CheckSecondaryPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 16451084940216554610 + m_Value1: 9193361044710023086 + Variables: [] + NamedChildren: [] + IsPlaceholder: 0 + - Name: Use Secondary Pattern + Story: "\uBCF4\uC870 \uD328\uD134 \uC2E4\uD589" + RuntimeTypeString: UseSecondaryPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 19154378423494993 + m_Value1: 8816885395727024046 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 + - Name: Check Primary Pattern Ready + Story: "\uAE30\uBCF8 \uD328\uD134 \uC900\uBE44 \uC5EC\uBD80 \uD655\uC778" + RuntimeTypeString: CheckPrimaryPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 17240727157284954760 + m_Value1: 16165053335543343767 + Variables: [] + NamedChildren: [] + IsPlaceholder: 0 + - Name: Use Primary Pattern + Story: "\uAE30\uBCF8 \uD328\uD134 \uC2E4\uD589" + RuntimeTypeString: UsePrimaryPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + RuntimeTypeID: + m_Value0: 13565513945432512325 + m_Value1: 17399476701763261371 + Variables: + - Name: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Tooltip: + NamedChildren: [] + IsPlaceholder: 0 - Name: ChaseTarget Story: "\uD0C0\uAC9F \uCD94\uC801" RuntimeTypeString: ChaseTargetAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, @@ -696,106 +1042,6 @@ MonoBehaviour: Tooltip: NamedChildren: [] IsPlaceholder: 0 - - Name: SetTargetInRange - Story: "[Range] \uB0B4\uC5D0 [Tag] \uC788\uB294\uC9C0 \uD655\uC778" - RuntimeTypeString: SetTargetInRangeAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, - PublicKeyToken=null - RuntimeTypeID: - m_Value0: 1767281477166675859 - m_Value1: 5208846103639504853 - Variables: - - Name: Target - Type: - m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - Tooltip: - - Name: Tag - Type: - m_SerializableType: System.String, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - Tooltip: - - Name: Range - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - Tooltip: - NamedChildren: [] - IsPlaceholder: 0 - - Name: RotateToTarget - Story: "[\uB300\uC0C1\uC744] \uBC14\uB77C\uBCF4\uB3C4\uB85D \uD68C\uC804" - RuntimeTypeString: RotateToTargetAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, - PublicKeyToken=null - RuntimeTypeID: - m_Value0: 6653769496062276656 - m_Value1: 2899785121618119178 - Variables: - - Name: Target - Type: - m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - Tooltip: - - Name: RotationSpeed - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - Tooltip: - - Name: AngleThreshold - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - Tooltip: - NamedChildren: [] - IsPlaceholder: 0 - - Name: Run In Parallel - Story: - RuntimeTypeString: Unity.Behavior.ParallelAllComposite, Unity.Behavior, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - RuntimeTypeID: - m_Value0: 6216542881172158703 - m_Value1: 2191282456596108218 - Variables: [] - NamedChildren: [] - IsPlaceholder: 0 - - Name: Repeat - Story: - RuntimeTypeString: Unity.Behavior.RepeaterModifier, Unity.Behavior, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - RuntimeTypeID: - m_Value0: 3696095273264312494 - m_Value1: 14191201703811421854 - Variables: [] - NamedChildren: [] - IsPlaceholder: 0 - - Name: Use Pattern - Story: "[Pattern] \uC2E4\uD589" - RuntimeTypeString: UsePatternAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, - PublicKeyToken=null - RuntimeTypeID: - m_Value0: 13305875091066958497 - m_Value1: 15475974310776131785 - Variables: - - Name: Pattern - Type: - 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 - Story: - RuntimeTypeString: Unity.Behavior.SelectorComposite, Unity.Behavior, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - RuntimeTypeID: - m_Value0: 11477120919463386923 - m_Value1: 7730102824742023565 - Variables: [] - NamedChildren: [] - IsPlaceholder: 0 m_Blackboards: [] m_MainBlackboardAuthoringAsset: {fileID: -6591390698989283165} m_CommandBuffer: @@ -809,16 +1055,16 @@ MonoBehaviour: RefIds: - rid: -2 type: {class: , ns: , asm: } - - rid: 8805855836547055698 + - rid: 8805856113439801522 type: {class: StartNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - Position: {x: 211.99992, y: -365.45004} + Position: {x: 420, y: -620} ID: - m_Value0: 8361680655506702021 - m_Value1: 11075116708293476273 + m_Value0: 3944491945985234464 + m_Value1: 10075432118744806958 Parents: [] PortModels: - - rid: 8805855836547055699 + - rid: 8805856113439801556 NodeType: m_SerializableType: Unity.Behavior.Start, Unity.Behavior, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null @@ -826,1196 +1072,19 @@ MonoBehaviour: m_Value0: 3335272451348827663 m_Value1: 11549843281177505721 m_FieldValues: [] - Repeat: 0 + Repeat: 1 AllowMultipleRepeatsPerTick: 0 - - rid: 8805855836547055699 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855836547055698 - m_Connections: - - rid: 8805855941168464613 - - rid: 8805855841097089283 - 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: 6473031571298860035, guid: 9f538e60b8b98634b8952310b91dfba0, type: 3} - - rid: 8805855841097089291 - type: {class: FloatingPortNodeModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - Position: {x: 496.73337, y: 259.3334} - ID: - m_Value0: 3250566284114224087 - m_Value1: 6530346834987549722 - Parents: [] - PortModels: - - rid: 8805855841097089294 - - rid: 8805855841097089295 - ParentNodeID: - m_Value0: 6087481783018872809 - m_Value1: 15765389902485577860 - PortName: True - - rid: 8805855841097089292 - type: {class: FloatingPortNodeModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - Position: {x: 66.99997, y: 260.66666} - ID: - m_Value0: 13470428754531769568 - m_Value1: 4199236078364731312 - Parents: [] - PortModels: - - rid: 8805855841097089296 - - rid: 8805855841097089297 - ParentNodeID: - m_Value0: 6087481783018872809 - m_Value1: 15765389902485577860 - PortName: False - - rid: 8805855841097089293 - type: {class: BranchingConditionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 299.33334, y: 126} - ID: - m_Value0: 6087481783018872809 - m_Value1: 15765389902485577860 - Parents: [] - PortModels: - - rid: 8805855841097089298 - - rid: 8805855841097089299 - - rid: 8805855841097089300 - NodeType: - m_SerializableType: Unity.Behavior.BranchingConditionComposite, Unity.Behavior, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - NodeTypeID: - m_Value0: 12334964803190848789 - m_Value1: 14608808926743427008 - m_FieldValues: [] - k__BackingField: - - ConditionType: - m_SerializableType: Unity.Behavior.VariableComparisonCondition, Unity.Behavior, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ConditionTypeID: - m_Value0: 4706153636540939941 - m_Value1: 1154942553909992356 - NodeModel: - rid: 8805855841097089293 - m_FieldValues: - - rid: 8805855841097089492 - - rid: 8805855841097089493 - - rid: 8805855841097089518 - OperatorFieldModel: - rid: 8805855841097089493 - k__BackingField: 0 - k__BackingField: 0 - k__BackingField: 0 - - rid: 8805855841097089294 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089291 - m_Connections: - - rid: 8805855841097089299 - - rid: 8805855841097089295 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089291 - m_Connections: - - rid: 8805855841097089771 - - rid: 8805855841097089296 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089292 - m_Connections: - - rid: 8805855841097089300 - - rid: 8805855841097089297 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089292 - m_Connections: - - rid: 8805855841097089336 - - rid: 8805855841097089298 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089293 - m_Connections: - - rid: 8805855841097089469 - - rid: 8805855841097089299 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: True - m_PortDataFlowType: 1 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089293 - m_Connections: - - rid: 8805855841097089294 - - rid: 8805855841097089300 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: False - m_PortDataFlowType: 1 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089293 - m_Connections: - - rid: 8805855841097089296 - - rid: 8805855841097089335 - type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 66.178566, y: 361.4942} - ID: - m_Value0: 7100545047213284048 - m_Value1: 17094481857695181652 - Parents: [] - PortModels: - - rid: 8805855841097089336 - - rid: 8805855841097089337 - NodeType: - m_SerializableType: WaitAction, Colosseum.Game, Version=0.0.0.0, Culture=neutral, - PublicKeyToken=null - NodeTypeID: - m_Value0: 2068857283001694323 - m_Value1: 11359859023677000345 - m_FieldValues: - - rid: 8805855841097089338 - - rid: 8805855841097089336 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089335 - m_Connections: - - rid: 8805855841097089297 - - rid: 8805855841097089337 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089335 - m_Connections: [] - - rid: 8805855841097089338 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Duration - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855841097089339 - LinkedVariable: - rid: -2 - - rid: 8805855841097089339 - 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: 8805855841097089353 - type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 364.27426, y: 640.57556} - ID: - m_Value0: 2775806344500587586 - m_Value1: 15450617276334001013 - Parents: [] - PortModels: - - rid: 8805855841097089354 - - rid: 8805855841097089355 - NodeType: - m_SerializableType: ChaseTargetAction, Colosseum.Game, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - NodeTypeID: - m_Value0: 4737707736320149768 - m_Value1: 7523468823499502926 - m_FieldValues: - - rid: 8805855841097089356 - - rid: 8805855841097089357 - - rid: 8805855841097089358 - - rid: 8805855841097089354 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089353 - m_Connections: - - rid: 8805855841097089650 - - rid: 8805855841097089355 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089353 - m_Connections: [] - - rid: 8805855841097089356 - 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: 8805855841097089359 - LinkedVariable: - rid: 8805855841097089283 - - rid: 8805855841097089357 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Speed - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855841097089360 - LinkedVariable: - rid: -2 - - rid: 8805855841097089358 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: StopDistance - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855841097089361 - LinkedVariable: - rid: -2 - - rid: 8805855841097089359 - 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: 8805855841097089360 - 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: 8805855841097089361 - 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: 8805855841097089467 - type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 299.42273, y: 39.243973} - ID: - m_Value0: 2112550037797404360 - m_Value1: 3268971171652514817 - Parents: [] - PortModels: - - rid: 8805855841097089468 - - rid: 8805855841097089469 - NodeType: - m_SerializableType: SetTargetInRangeAction, Colosseum.Game, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - NodeTypeID: - m_Value0: 1767281477166675859 - m_Value1: 5208846103639504853 - m_FieldValues: - - rid: 8805855841097089470 - - rid: 8805855841097089471 - - rid: 8805855841097089472 - - rid: 8805855841097089468 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089467 - m_Connections: - - rid: 8805855941168464154 - - rid: 8805855841097089469 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089467 - m_Connections: - - rid: 8805855841097089298 - - rid: 8805855841097089470 - 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: 8805855841097089473 - LinkedVariable: - rid: 8805856000049152392 - - rid: 8805855841097089471 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Tag - Type: - m_SerializableType: System.String, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855841097089475 - LinkedVariable: - rid: -2 - - rid: 8805855841097089472 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Range - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855841097089476 - LinkedVariable: - rid: -2 - - rid: 8805855841097089473 - 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: 8805855841097089475 - 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: 8805855841097089476 - 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: 8805855841097089492 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Variable - Type: - m_SerializableType: System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855841097089519 - LinkedVariable: - rid: 8805855841097089517 - - rid: 8805855841097089493 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Operator - Type: - m_SerializableType: Unity.Behavior.ConditionOperator, Unity.Behavior, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855841097089496 - LinkedVariable: - rid: -2 - - rid: 8805855841097089496 - 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: 8805855841097089517 - 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: 8805855841097089518 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: ComparisonValue - Type: - m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855841097089520 - LinkedVariable: - rid: -2 - - rid: 8805855841097089519 - 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: 8805855841097089520 - 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: 8805855841097089544 - type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 266.31882, y: 640.0522} - ID: - m_Value0: 2891087433149756878 - m_Value1: 17198679099733625875 - Parents: [] - PortModels: - - rid: 8805855841097089545 - - rid: 8805855841097089546 - 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: 8805855841097089547 - - rid: 8805855841097089548 - - rid: 8805855841097089549 - - rid: 8805855841097089545 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089544 - m_Connections: - - rid: 8805855841097089650 - - rid: 8805855841097089546 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089544 - m_Connections: [] - - rid: 8805855841097089547 - 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: 8805855841097089550 - LinkedVariable: - rid: 8805855841097089551 - - rid: 8805855841097089548 - 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: 8805855841097089552 - LinkedVariable: - rid: -2 - - rid: 8805855841097089549 - 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: 8805855841097089553 - LinkedVariable: - rid: -2 - - rid: 8805855841097089550 - 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: 8805855841097089551 - 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: 8805855841097089552 - 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: 8805855841097089553 - 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: 8805855841097089648 - type: {class: RunInParallelNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 364.38733, y: 548.3096} - ID: - m_Value0: 16536007759615694599 - m_Value1: 10970361502449028502 - Parents: [] - PortModels: - - rid: 8805855841097089649 - - rid: 8805855841097089650 - 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: 8805855841097089649 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089648 - m_Connections: [] - - rid: 8805855841097089650 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089648 - m_Connections: - - rid: 8805855841097089545 - - rid: 8805855841097089354 - - rid: 8805855841097089764 - type: {class: FloatingPortNodeModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - Position: {x: 665.6695, y: 458.07162} - ID: - m_Value0: 17935039214629093399 - m_Value1: 1091416046358248687 - Parents: [] - PortModels: - - rid: 8805855841097089767 - - rid: 8805855841097089768 - ParentNodeID: - m_Value0: 10925304658634853314 - m_Value1: 14003116682958237093 - PortName: True - - rid: 8805855841097089765 - type: {class: FloatingPortNodeModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - Position: {x: 364.38608, y: 456.9788} - ID: - m_Value0: 10801685884990672204 - m_Value1: 10231246884564843605 - Parents: [] - PortModels: - - rid: 8805855841097089769 - - rid: 8805855841097089770 - ParentNodeID: - m_Value0: 10925304658634853314 - m_Value1: 14003116682958237093 - PortName: False - - rid: 8805855841097089766 - type: {class: BranchingConditionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 496.44962, y: 343.05045} - ID: - m_Value0: 10925304658634853314 - m_Value1: 14003116682958237093 - Parents: [] - PortModels: - - rid: 8805855841097089771 - - rid: 8805855841097089772 - - rid: 8805855841097089773 - NodeType: - m_SerializableType: Unity.Behavior.BranchingConditionComposite, Unity.Behavior, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - NodeTypeID: - m_Value0: 12334964803190848789 - m_Value1: 14608808926743427008 - m_FieldValues: [] - k__BackingField: - - ConditionType: - m_SerializableType: Unity.Behavior.CheckDistanceCondition, Unity.Behavior, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ConditionTypeID: - m_Value0: 9868091468408157863 - m_Value1: 6989804287359126538 - NodeModel: - rid: 8805855841097089766 - m_FieldValues: - - rid: 8805855841097089781 - - rid: 8805855841097089782 - - rid: 8805855841097089783 - - rid: 8805855841097089784 - OperatorFieldModel: - rid: 8805855841097089783 - k__BackingField: 0 - k__BackingField: 0 - k__BackingField: 0 - - rid: 8805855841097089767 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089764 - m_Connections: - - rid: 8805855841097089772 - - rid: 8805855841097089768 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089764 - m_Connections: - - rid: 8805855846311395416 - - rid: 8805855841097089769 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089765 - m_Connections: - - rid: 8805855841097089773 - - rid: 8805855841097089770 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089765 - m_Connections: - - rid: 8805856000049152463 - - rid: 8805855841097089771 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855841097089766 - m_Connections: - - rid: 8805855841097089295 - - rid: 8805855841097089772 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: True - m_PortDataFlowType: 1 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089766 - m_Connections: - - rid: 8805855841097089767 - - rid: 8805855841097089773 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: False - m_PortDataFlowType: 1 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855841097089766 - m_Connections: - - rid: 8805855841097089769 - - rid: 8805855841097089781 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Transform - Type: - m_SerializableType: UnityEngine.Transform, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855841097089785 - LinkedVariable: - rid: 8805855841097089801 - - rid: 8805855841097089782 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Target - Type: - m_SerializableType: UnityEngine.Transform, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855841097089786 - LinkedVariable: - rid: 8805855841097089816 - - rid: 8805855841097089783 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Operator - Type: - m_SerializableType: Unity.Behavior.ConditionOperator, Unity.Behavior, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855841097089787 - LinkedVariable: - rid: -2 - - rid: 8805855841097089784 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Threshold - Type: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855841097089788 - LinkedVariable: - rid: 8805855841097089842 - - rid: 8805855841097089785 - type: {class: 'BlackboardVariable`1[[UnityEngine.Transform, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 0} - - rid: 8805855841097089786 - type: {class: 'BlackboardVariable`1[[UnityEngine.Transform, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: {fileID: 0} - - rid: 8805855841097089787 - 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: 8805855841097089788 - 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: 8805855841097089801 - type: {class: 'TypedVariableModel`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - ID: - m_Value0: 1 - m_Value1: 0 - Name: Self - IsExposed: 1 - m_IsShared: 0 - m_Value: {fileID: 0} - - rid: 8805855841097089816 - 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: 8805855841097089842 - type: {class: 'TypedVariableModel`1[[System.Single, mscorlib]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - ID: - m_Value0: 6179663786753870576 - m_Value1: 13045418693957266795 - Name: AttackRange - IsExposed: 1 - m_IsShared: 0 - m_Value: 0 - - rid: 8805855846311395415 - type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 665.83875, y: 546.31714} - ID: - m_Value0: 2656906456090040103 - m_Value1: 5313501299737419023 - Parents: [] - PortModels: - - rid: 8805855846311395416 - - rid: 8805855846311395417 - 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: 8805855846311395418 - - rid: 8805855846311395419 - - rid: 8805855846311395420 - - rid: 8805855846311395416 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855846311395415 - m_Connections: - - rid: 8805855841097089768 - - rid: 8805855846311395417 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855846311395415 - m_Connections: - - rid: 8805855956374126771 - - rid: 8805855846311395418 - 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: 8805855846311395421 - LinkedVariable: - rid: 8805855846311395422 - - rid: 8805855846311395419 - 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: 8805855846311395423 - LinkedVariable: - rid: -2 - - rid: 8805855846311395420 - 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: 8805855846311395424 - LinkedVariable: - rid: -2 - - rid: 8805855846311395421 - 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: 8805855846311395422 - 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: 8805855846311395423 - 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: 8805855846311395424 - 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: 8805855941168464148 - type: {class: FloatingPortNodeModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - Position: {x: 15.813689, y: -35.53409} - ID: - m_Value0: 7940545116008444959 - m_Value1: 7530289849580528934 - Parents: [] - PortModels: - - rid: 8805855941168464151 - - rid: 8805855941168464152 - ParentNodeID: - m_Value0: 3882872508468950798 - m_Value1: 3938133446346283639 - PortName: True - - rid: 8805855941168464149 - type: {class: FloatingPortNodeModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - Position: {x: 431.27527, y: -39.538033} - ID: - m_Value0: 17027785473523230719 - m_Value1: 11573909034072681315 - Parents: [] - PortModels: - - rid: 8805855941168464153 - - rid: 8805855941168464154 - ParentNodeID: - m_Value0: 3882872508468950798 - m_Value1: 3938133446346283639 - PortName: False - - rid: 8805855941168464150 - type: {class: BranchingConditionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 211.1149, y: -155.69766} - ID: - m_Value0: 3882872508468950798 - m_Value1: 3938133446346283639 - Parents: [] - PortModels: - - rid: 8805855941168464155 - - rid: 8805855941168464156 - - rid: 8805855941168464157 - NodeType: - m_SerializableType: Unity.Behavior.BranchingConditionComposite, Unity.Behavior, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - NodeTypeID: - m_Value0: 12334964803190848789 - m_Value1: 14608808926743427008 - m_FieldValues: [] - k__BackingField: - - ConditionType: - m_SerializableType: Unity.Behavior.VariableComparisonCondition, Unity.Behavior, - Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ConditionTypeID: - m_Value0: 4706153636540939941 - m_Value1: 1154942553909992356 - NodeModel: - rid: 8805855941168464150 - m_FieldValues: - - rid: 8805855941168464174 - - rid: 8805855941168464175 - - rid: 8805855941168464203 - OperatorFieldModel: - rid: 8805855941168464175 - k__BackingField: 0 - k__BackingField: 0 - k__BackingField: 0 - - rid: 8805855941168464151 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855941168464148 - m_Connections: - - rid: 8805855941168464156 - - rid: 8805855941168464152 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855941168464148 - m_Connections: [] - - rid: 8805855941168464153 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855941168464149 - m_Connections: - - rid: 8805855941168464157 - - rid: 8805855941168464154 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855941168464149 - m_Connections: - - rid: 8805855841097089468 - - rid: 8805855941168464155 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855941168464150 - m_Connections: - - rid: 8805855941168464614 - - rid: 8805855941168464156 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: True - m_PortDataFlowType: 1 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855941168464150 - m_Connections: - - rid: 8805855941168464151 - - rid: 8805855941168464157 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: False - m_PortDataFlowType: 1 - m_IsFloating: 1 - m_NodeModel: - rid: 8805855941168464150 - m_Connections: - - rid: 8805855941168464153 - - rid: 8805855941168464174 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Variable - Type: - m_SerializableType: System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855941168464204 - LinkedVariable: - rid: 8805855941168464202 - - rid: 8805855941168464175 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Operator - Type: - m_SerializableType: Unity.Behavior.ConditionOperator, Unity.Behavior, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855941168464178 - LinkedVariable: - rid: -2 - - rid: 8805855941168464178 - 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: 8805855941168464202 - type: {class: 'TypedVariableModel`1[[System.Boolean, mscorlib]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - ID: - m_Value0: 2997173512430605425 - m_Value1: 14990413519379198129 - Name: Die - IsExposed: 1 - m_IsShared: 0 - m_Value: 0 - - rid: 8805855941168464203 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: ComparisonValue - Type: - m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - LocalValue: - rid: 8805855941168464205 - LinkedVariable: - rid: -2 - - rid: 8805855941168464204 - type: {class: 'BlackboardVariable`1[[System.Boolean, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} - data: - GUID: - m_Value0: 0 - m_Value1: 0 - Name: - m_Value: 0 - - rid: 8805855941168464205 - 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: 8805855941168464612 + - rid: 8805856113439801523 type: {class: RepeatNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - Position: {x: 211.47302, y: -249.38625} + Position: {x: 420, y: -470} ID: - m_Value0: 16903089648015682040 - m_Value1: 5621269674286214316 + m_Value0: 18202383970471888822 + m_Value1: 5919000831638527321 Parents: [] PortModels: - - rid: 8805855941168464613 - - rid: 8805855941168464614 + - rid: 8805856113439801557 + - rid: 8805856113439801558 NodeType: m_SerializableType: Unity.Behavior.RepeaterModifier, Unity.Behavior, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null @@ -2030,94 +1099,17 @@ MonoBehaviour: m_RepeatMode: 0 k__BackingField: 0 k__BackingField: 1 - - rid: 8805855941168464613 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855941168464612 - m_Connections: - - rid: 8805855836547055699 - - rid: 8805855941168464614 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855941168464612 - m_Connections: - - rid: 8805855941168464155 - - rid: 8805855948962791632 - type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 568.5252, y: 737.35144} - ID: - m_Value0: 8803463902102802735 - m_Value1: 11879507492776070900 - Parents: [] - PortModels: - - rid: 8805855948962791633 - - rid: 8805855948962791634 - NodeType: - m_SerializableType: UsePatternAction, Colosseum.Game, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - NodeTypeID: - m_Value0: 13305875091066958497 - m_Value1: 15475974310776131785 - m_FieldValues: - - rid: 8805855948962791636 - - rid: 8805856000049152268 - - rid: 8805855948962791633 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855948962791632 - m_Connections: [] - - rid: 8805855948962791634 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855948962791632 - m_Connections: [] - - rid: 8805855948962791636 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Pattern - Type: - m_SerializableType: Colosseum.AI.BossPatternData, Colosseum.Game, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855948962791638 - LinkedVariable: - rid: -2 - - rid: 8805855948962791638 - 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: 8805855956374126770 + - rid: 8805856113439801524 type: {class: CompositeNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - Position: {x: 666.3364, y: 639.8787} + Position: {x: 420, y: -280} ID: - m_Value0: 1213596326002826456 - m_Value1: 9846416129968350328 + m_Value0: 398178747935607711 + m_Value1: 7574567307776651754 Parents: [] PortModels: - - rid: 8805855956374126771 - - rid: 8805855956374126772 + - rid: 8805856113439801559 + - rid: 8805856113439801560 NodeType: m_SerializableType: Unity.Behavior.SelectorComposite, Unity.Behavior, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null @@ -2125,222 +1117,804 @@ MonoBehaviour: m_Value0: 11477120919463386923 m_Value1: 7730102824742023565 m_FieldValues: [] - - rid: 8805855956374126771 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + - rid: 8805856113439801525 + type: {class: CompositeNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855956374126770 - m_Connections: - - rid: 8805855846311395417 - - rid: 8805855956374126772 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855956374126770 - m_Connections: [] - - rid: 8805855974927368268 - type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - Position: {x: 57.14644, y: 556.018} + Position: {x: -620, y: -40} ID: - m_Value0: 6072905976649188714 - m_Value1: 6639982183309942236 + m_Value0: 10441495572728319624 + m_Value1: 18145710329216171556 Parents: [] PortModels: - - rid: 8805855974927368269 - - rid: 8805855974927368270 + - rid: 8805856113439801561 + - rid: 8805856113439801562 NodeType: - m_SerializableType: UsePatternAction, Colosseum.Game, Version=0.0.0.0, + m_SerializableType: Unity.Behavior.SequenceComposite, Unity.Behavior, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null NodeTypeID: - m_Value0: 13305875091066958497 - m_Value1: 15475974310776131785 - m_FieldValues: - - rid: 8805855974927368271 - - rid: 8805856000049152230 - - rid: 8805855974927368269 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855974927368268 - m_Connections: - - rid: 8805856000049152464 - - rid: 8805855974927368270 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} - data: - m_Name: OutputPort - m_PortDataFlowType: 1 - m_IsFloating: 0 - m_NodeModel: - rid: 8805855974927368268 - m_Connections: [] - - rid: 8805855974927368271 - type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} - data: - FieldName: Pattern - Type: - m_SerializableType: Colosseum.AI.BossPatternData, Colosseum.Game, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - LocalValue: - rid: 8805855974927368272 - LinkedVariable: - rid: -2 - - rid: 8805855974927368272 - 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: 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_Value0: 10181448252506100447 + m_Value1: 8737116843063128493 m_FieldValues: [] - m_Mode: 0 - - rid: 8805856000049152463 - type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + - rid: 8805856113439801526 + type: {class: CompositeNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} 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} + Position: {x: -220, y: -40} ID: - m_Value0: 17771351983187136722 - m_Value1: 7918239022991775575 + m_Value0: 6168839543956477089 + m_Value1: 11275182414090957339 Parents: [] PortModels: - - rid: 8805856000049152526 - - rid: 8805856000049152527 + - rid: 8805856113439801563 + - rid: 8805856113439801564 NodeType: - m_SerializableType: RotateToTargetAction, Colosseum.Game, Version=0.0.0.0, + m_SerializableType: Unity.Behavior.SequenceComposite, Unity.Behavior, 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} + m_Value0: 10181448252506100447 + m_Value1: 8737116843063128493 + m_FieldValues: [] + - rid: 8805856113439801527 + type: {class: CompositeNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - m_Name: InputPort - m_PortDataFlowType: 0 - m_IsFloating: 0 - m_NodeModel: - rid: 8805856000049152525 - m_Connections: - - rid: 8805856000049152464 - - rid: 8805856000049152527 + Position: {x: 180, y: -40} + ID: + m_Value0: 16509142761903036207 + m_Value1: 11797946855901307058 + Parents: [] + PortModels: + - rid: 8805856113439801565 + - rid: 8805856113439801566 + NodeType: + m_SerializableType: Unity.Behavior.SequenceComposite, Unity.Behavior, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 10181448252506100447 + m_Value1: 8737116843063128493 + m_FieldValues: [] + - rid: 8805856113439801528 + type: {class: CompositeNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 580, y: -40} + ID: + m_Value0: 12671461730204450349 + m_Value1: 15265453094671554164 + Parents: [] + PortModels: + - rid: 8805856113439801567 + - rid: 8805856113439801568 + NodeType: + m_SerializableType: Unity.Behavior.SequenceComposite, Unity.Behavior, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 10181448252506100447 + m_Value1: 8737116843063128493 + m_FieldValues: [] + - rid: 8805856113439801529 + type: {class: CompositeNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 980, y: -40} + ID: + m_Value0: 18027270346692850458 + m_Value1: 8457381046822106713 + Parents: [] + PortModels: + - rid: 8805856113439801569 + - rid: 8805856113439801570 + NodeType: + m_SerializableType: Unity.Behavior.SequenceComposite, Unity.Behavior, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 10181448252506100447 + m_Value1: 8737116843063128493 + m_FieldValues: [] + - rid: 8805856113439801530 + type: {class: CompositeNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1380, y: -40} + ID: + m_Value0: 8713107049279116071 + m_Value1: 9769549314833514694 + Parents: [] + PortModels: + - rid: 8805856113439801571 + - rid: 8805856113439801572 + NodeType: + m_SerializableType: Unity.Behavior.SequenceComposite, Unity.Behavior, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 10181448252506100447 + m_Value1: 8737116843063128493 + m_FieldValues: [] + - rid: 8805856113439801531 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: -740, y: 240} + ID: + m_Value0: 13798264256640470984 + m_Value1: 9044784723309059020 + Parents: [] + PortModels: + - rid: 8805856113439801573 + - rid: 8805856113439801574 + NodeType: + m_SerializableType: SelectNearestDownedTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 3479009025465913838 + m_Value1: 8189696432825349292 + m_FieldValues: + - rid: 8805856113439801575 + - rid: 8805856113439801576 + - rid: 8805856113439801532 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: -620, y: 240} + ID: + m_Value0: 17028571991082717895 + m_Value1: 7352148230105113793 + Parents: [] + PortModels: + - rid: 8805856113439801577 + - rid: 8805856113439801578 + NodeType: + m_SerializableType: CheckPunishPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 17241132588797744616 + m_Value1: 12089745580882483368 + m_FieldValues: [] + - rid: 8805856113439801533 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: -500, y: 240} + ID: + m_Value0: 8069975285165892673 + m_Value1: 6614076379062333819 + Parents: [] + PortModels: + - rid: 8805856113439801579 + - rid: 8805856113439801580 + NodeType: + m_SerializableType: UsePunishPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 15871296011671630677 + m_Value1: 8078034232868777638 + m_FieldValues: + - rid: 8805856113439801581 + - rid: 8805856113439801534 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: -340, y: 240} + ID: + m_Value0: 2541997251605238282 + m_Value1: 17207302682821541222 + Parents: [] + PortModels: + - rid: 8805856113439801582 + - rid: 8805856113439801583 + NodeType: + m_SerializableType: SelectTargetByDistanceAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 17676628481821338191 + m_Value1: 4731651210062498751 + m_FieldValues: + - rid: 8805856113439801584 + - rid: 8805856113439801585 + - rid: 8805856113439801586 + - rid: 8805856113439801587 + - rid: 8805856113439801588 + - rid: 8805856113439801535 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: -220, y: 240} + ID: + m_Value0: 1168026670980482786 + m_Value1: 10696105289007618014 + Parents: [] + PortModels: + - rid: 8805856113439801589 + - rid: 8805856113439801590 + NodeType: + m_SerializableType: CheckMobilityPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 8450458953142456155 + m_Value1: 940103638269631644 + m_FieldValues: [] + - rid: 8805856113439801536 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: -100, y: 240} + ID: + m_Value0: 5133138069850922554 + m_Value1: 11111217626666621090 + Parents: [] + PortModels: + - rid: 8805856113439801591 + - rid: 8805856113439801592 + NodeType: + m_SerializableType: UseMobilityPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 10758284640051141051 + m_Value1: 14733138854283253894 + m_FieldValues: + - rid: 8805856113439801593 + - rid: 8805856113439801537 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 0, y: 240} + ID: + m_Value0: 1336661570389436292 + m_Value1: 14184982584268272727 + Parents: [] + PortModels: + - rid: 8805856113439801594 + - rid: 8805856113439801595 + NodeType: + m_SerializableType: RefreshPrimaryTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1676760785695660983 + m_Value1: 3474893727400520085 + m_FieldValues: + - rid: 8805856113439801596 + - rid: 8805856113439801538 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 120, y: 240} + ID: + m_Value0: 1159320695782321619 + m_Value1: 1455929843613418813 + Parents: [] + PortModels: + - rid: 8805856113439801597 + - rid: 8805856113439801598 + NodeType: + m_SerializableType: ValidateTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1389171756588788969 + m_Value1: 2283983672959160206 + m_FieldValues: + - rid: 8805856113439801599 + - rid: 8805856113439801539 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 240, y: 240} + ID: + m_Value0: 12573652026917026955 + m_Value1: 5552834901857357329 + Parents: [] + PortModels: + - rid: 8805856113439801600 + - rid: 8805856113439801601 + NodeType: + m_SerializableType: CheckTargetInAttackRangeAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 17746747867388412438 + m_Value1: 14905810610476077465 + m_FieldValues: + - rid: 8805856113439801602 + - rid: 8805856113439801540 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 360, y: 240} + ID: + m_Value0: 3814268768543398152 + m_Value1: 2609183473855007568 + Parents: [] + PortModels: + - rid: 8805856113439801603 + - rid: 8805856113439801604 + NodeType: + m_SerializableType: CheckSecondaryPatternTurnAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 5206874914379224296 + m_Value1: 5224171301583253166 + m_FieldValues: [] + - rid: 8805856113439801541 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 480, y: 240} + ID: + m_Value0: 7006308348220467330 + m_Value1: 11049550376158880254 + Parents: [] + PortModels: + - rid: 8805856113439801605 + - rid: 8805856113439801606 + NodeType: + m_SerializableType: CheckSecondaryPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 16451084940216554610 + m_Value1: 9193361044710023086 + m_FieldValues: [] + - rid: 8805856113439801542 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 600, y: 240} + ID: + m_Value0: 9822364172009382639 + m_Value1: 11871502844696962604 + Parents: [] + PortModels: + - rid: 8805856113439801607 + - rid: 8805856113439801608 + NodeType: + m_SerializableType: UseSecondaryPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 19154378423494993 + m_Value1: 8816885395727024046 + m_FieldValues: + - rid: 8805856113439801609 + - rid: 8805856113439801543 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 520, y: 240} + ID: + m_Value0: 14858217615681981828 + m_Value1: 8818105421142067472 + Parents: [] + PortModels: + - rid: 8805856113439801610 + - rid: 8805856113439801611 + NodeType: + m_SerializableType: RefreshPrimaryTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1676760785695660983 + m_Value1: 3474893727400520085 + m_FieldValues: + - rid: 8805856113439801612 + - rid: 8805856113439801544 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 640, y: 240} + ID: + m_Value0: 109114609900411872 + m_Value1: 8926719061613283666 + Parents: [] + PortModels: + - rid: 8805856113439801613 + - rid: 8805856113439801614 + NodeType: + m_SerializableType: ValidateTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1389171756588788969 + m_Value1: 2283983672959160206 + m_FieldValues: + - rid: 8805856113439801615 + - rid: 8805856113439801545 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 760, y: 240} + ID: + m_Value0: 3749161462120118103 + m_Value1: 2503175866245522430 + Parents: [] + PortModels: + - rid: 8805856113439801616 + - rid: 8805856113439801617 + NodeType: + m_SerializableType: CheckTargetInAttackRangeAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 17746747867388412438 + m_Value1: 14905810610476077465 + m_FieldValues: + - rid: 8805856113439801618 + - rid: 8805856113439801546 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 880, y: 240} + ID: + m_Value0: 1856011962074969088 + m_Value1: 6243725556440796836 + Parents: [] + PortModels: + - rid: 8805856113439801619 + - rid: 8805856113439801620 + NodeType: + m_SerializableType: CheckPrimaryPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 17240727157284954760 + m_Value1: 16165053335543343767 + m_FieldValues: [] + - rid: 8805856113439801547 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1000, y: 240} + ID: + m_Value0: 7186990809598279497 + m_Value1: 3420770028979615744 + Parents: [] + PortModels: + - rid: 8805856113439801621 + - rid: 8805856113439801622 + NodeType: + m_SerializableType: UsePrimaryPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 13565513945432512325 + m_Value1: 17399476701763261371 + m_FieldValues: + - rid: 8805856113439801623 + - rid: 8805856113439801548 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 920, y: 240} + ID: + m_Value0: 4278553797089195640 + m_Value1: 9252751663660805834 + Parents: [] + PortModels: + - rid: 8805856113439801624 + - rid: 8805856113439801625 + NodeType: + m_SerializableType: RefreshPrimaryTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1676760785695660983 + m_Value1: 3474893727400520085 + m_FieldValues: + - rid: 8805856113439801626 + - rid: 8805856113439801549 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1040, y: 240} + ID: + m_Value0: 17817043910916039977 + m_Value1: 11383935187233238739 + Parents: [] + PortModels: + - rid: 8805856113439801627 + - rid: 8805856113439801628 + NodeType: + m_SerializableType: ValidateTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1389171756588788969 + m_Value1: 2283983672959160206 + m_FieldValues: + - rid: 8805856113439801629 + - rid: 8805856113439801550 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1160, y: 240} + ID: + m_Value0: 10974017013180213996 + m_Value1: 598595675438468009 + Parents: [] + PortModels: + - rid: 8805856113439801630 + - rid: 8805856113439801631 + NodeType: + m_SerializableType: CheckTargetInAttackRangeAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 17746747867388412438 + m_Value1: 14905810610476077465 + m_FieldValues: + - rid: 8805856113439801632 + - rid: 8805856113439801551 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1280, y: 240} + ID: + m_Value0: 15652672805528451484 + m_Value1: 12680400870830473934 + Parents: [] + PortModels: + - rid: 8805856113439801633 + - rid: 8805856113439801634 + NodeType: + m_SerializableType: CheckSecondaryPatternReadyAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 16451084940216554610 + m_Value1: 9193361044710023086 + m_FieldValues: [] + - rid: 8805856113439801552 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1400, y: 240} + ID: + m_Value0: 11262280553926999856 + m_Value1: 9907295714702289646 + Parents: [] + PortModels: + - rid: 8805856113439801635 + - rid: 8805856113439801636 + NodeType: + m_SerializableType: UseSecondaryPatternAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 19154378423494993 + m_Value1: 8816885395727024046 + m_FieldValues: + - rid: 8805856113439801637 + - rid: 8805856113439801553 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1320, y: 240} + ID: + m_Value0: 14996338139681041873 + m_Value1: 11900659897878691184 + Parents: [] + PortModels: + - rid: 8805856113439801638 + - rid: 8805856113439801639 + NodeType: + m_SerializableType: RefreshPrimaryTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1676760785695660983 + m_Value1: 3474893727400520085 + m_FieldValues: + - rid: 8805856113439801640 + - rid: 8805856113439801554 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1440, y: 240} + ID: + m_Value0: 17175457747312659229 + m_Value1: 777420747333904416 + Parents: [] + PortModels: + - rid: 8805856113439801641 + - rid: 8805856113439801642 + NodeType: + m_SerializableType: ValidateTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 1389171756588788969 + m_Value1: 2283983672959160206 + m_FieldValues: + - rid: 8805856113439801643 + - rid: 8805856113439801555 + type: {class: ActionNodeModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + Position: {x: 1560, y: 240} + ID: + m_Value0: 15294844399589336592 + m_Value1: 16330539450226202290 + Parents: [] + PortModels: + - rid: 8805856113439801644 + - rid: 8805856113439801645 + NodeType: + m_SerializableType: ChaseTargetAction, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + NodeTypeID: + m_Value0: 4737707736320149768 + m_Value1: 7523468823499502926 + m_FieldValues: + - rid: 8805856113439801646 + - rid: 8805856113439801647 + - rid: 8805856113439801648 + - rid: 8805856113439801556 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 + rid: 8805856113439801522 + m_Connections: + - rid: 8805856113439801557 + - rid: 8805856113439801557 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801523 + m_Connections: + - rid: 8805856113439801556 + - rid: 8805856113439801558 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801523 + m_Connections: + - rid: 8805856113439801559 + - rid: 8805856113439801559 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801524 + m_Connections: + - rid: 8805856113439801558 + - rid: 8805856113439801560 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801524 + m_Connections: + - rid: 8805856113439801561 + - rid: 8805856113439801563 + - rid: 8805856113439801565 + - rid: 8805856113439801567 + - rid: 8805856113439801569 + - rid: 8805856113439801571 + - rid: 8805856113439801561 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801525 + m_Connections: + - rid: 8805856113439801560 + - rid: 8805856113439801562 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801525 + m_Connections: + - rid: 8805856113439801573 + - rid: 8805856113439801577 + - rid: 8805856113439801579 + - rid: 8805856113439801563 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801526 + m_Connections: + - rid: 8805856113439801560 + - rid: 8805856113439801564 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801526 + m_Connections: + - rid: 8805856113439801582 + - rid: 8805856113439801589 + - rid: 8805856113439801591 + - rid: 8805856113439801565 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801527 + m_Connections: + - rid: 8805856113439801560 + - rid: 8805856113439801566 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801527 + m_Connections: + - rid: 8805856113439801594 + - rid: 8805856113439801597 + - rid: 8805856113439801600 + - rid: 8805856113439801603 + - rid: 8805856113439801605 + - rid: 8805856113439801607 + - rid: 8805856113439801567 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801528 + m_Connections: + - rid: 8805856113439801560 + - rid: 8805856113439801568 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801528 + m_Connections: + - rid: 8805856113439801610 + - rid: 8805856113439801613 + - rid: 8805856113439801616 + - rid: 8805856113439801619 + - rid: 8805856113439801621 + - rid: 8805856113439801569 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801529 + m_Connections: + - rid: 8805856113439801560 + - rid: 8805856113439801570 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801529 + m_Connections: + - rid: 8805856113439801624 + - rid: 8805856113439801627 + - rid: 8805856113439801630 + - rid: 8805856113439801633 + - rid: 8805856113439801635 + - rid: 8805856113439801571 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801530 + m_Connections: + - rid: 8805856113439801560 + - rid: 8805856113439801572 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801530 + m_Connections: + - rid: 8805856113439801638 + - rid: 8805856113439801641 + - rid: 8805856113439801644 + - rid: 8805856113439801573 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801531 + m_Connections: + - rid: 8805856113439801562 + - rid: 8805856113439801574 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801531 m_Connections: [] - - rid: 8805856000049152528 + - rid: 8805856113439801575 type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: FieldName: Target @@ -2348,32 +1922,741 @@ MonoBehaviour: m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null LocalValue: - rid: 8805856000049152531 + rid: 8805856113439801649 LinkedVariable: - rid: 8805856000049152532 - - rid: 8805856000049152529 + rid: 8805856113439801650 + - rid: 8805856113439801576 type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - FieldName: RotationSpeed + FieldName: SearchRadius Type: m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 LocalValue: - rid: 8805856000049152533 + rid: 8805856113439801651 LinkedVariable: rid: -2 - - rid: 8805856000049152530 + - rid: 8805856113439801577 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801532 + m_Connections: + - rid: 8805856113439801562 + - rid: 8805856113439801578 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801532 + m_Connections: [] + - rid: 8805856113439801579 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801533 + m_Connections: + - rid: 8805856113439801562 + - rid: 8805856113439801580 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801533 + m_Connections: [] + - rid: 8805856113439801581 type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} data: - FieldName: AngleThreshold + FieldName: Target + Type: + m_SerializableType: UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + LocalValue: + rid: 8805856113439801652 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801582 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801534 + m_Connections: + - rid: 8805856113439801564 + - rid: 8805856113439801583 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801534 + m_Connections: [] + - rid: 8805856113439801584 + 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: 8805856113439801653 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801585 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: Tag + Type: + m_SerializableType: System.String, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + LocalValue: + rid: 8805856113439801654 + LinkedVariable: + rid: -2 + - rid: 8805856113439801586 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: MinRange Type: m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 LocalValue: - rid: 8805856000049152534 + rid: 8805856113439801655 LinkedVariable: rid: -2 - - rid: 8805856000049152531 + - rid: 8805856113439801587 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: MaxRange + Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + LocalValue: + rid: 8805856113439801656 + LinkedVariable: + rid: -2 + - rid: 8805856113439801588 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: SelectionMode + Type: + m_SerializableType: DistanceTargetSelectionMode, Colosseum.Game, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + LocalValue: + rid: 8805856113439801657 + LinkedVariable: + rid: -2 + - rid: 8805856113439801589 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801535 + m_Connections: + - rid: 8805856113439801564 + - rid: 8805856113439801590 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801535 + m_Connections: [] + - rid: 8805856113439801591 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801536 + m_Connections: + - rid: 8805856113439801564 + - rid: 8805856113439801592 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801536 + m_Connections: [] + - rid: 8805856113439801593 + 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: 8805856113439801658 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801594 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801537 + m_Connections: + - rid: 8805856113439801566 + - rid: 8805856113439801595 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801537 + m_Connections: [] + - rid: 8805856113439801596 + 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: 8805856113439801659 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801597 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801538 + m_Connections: + - rid: 8805856113439801566 + - rid: 8805856113439801598 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801538 + m_Connections: [] + - rid: 8805856113439801599 + 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: 8805856113439801660 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801600 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801539 + m_Connections: + - rid: 8805856113439801566 + - rid: 8805856113439801601 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801539 + m_Connections: [] + - rid: 8805856113439801602 + 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: 8805856113439801661 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801603 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801540 + m_Connections: + - rid: 8805856113439801566 + - rid: 8805856113439801604 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801540 + m_Connections: [] + - rid: 8805856113439801605 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801541 + m_Connections: + - rid: 8805856113439801566 + - rid: 8805856113439801606 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801541 + m_Connections: [] + - rid: 8805856113439801607 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801542 + m_Connections: + - rid: 8805856113439801566 + - rid: 8805856113439801608 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801542 + m_Connections: [] + - rid: 8805856113439801609 + 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: 8805856113439801662 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801610 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801543 + m_Connections: + - rid: 8805856113439801568 + - rid: 8805856113439801611 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801543 + m_Connections: [] + - rid: 8805856113439801612 + 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: 8805856113439801663 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801613 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801544 + m_Connections: + - rid: 8805856113439801568 + - rid: 8805856113439801614 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801544 + m_Connections: [] + - rid: 8805856113439801615 + 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: 8805856113439801664 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801616 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801545 + m_Connections: + - rid: 8805856113439801568 + - rid: 8805856113439801617 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801545 + m_Connections: [] + - rid: 8805856113439801618 + 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: 8805856113439801665 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801619 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801546 + m_Connections: + - rid: 8805856113439801568 + - rid: 8805856113439801620 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801546 + m_Connections: [] + - rid: 8805856113439801621 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801547 + m_Connections: + - rid: 8805856113439801568 + - rid: 8805856113439801622 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801547 + m_Connections: [] + - rid: 8805856113439801623 + 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: 8805856113439801666 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801624 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801548 + m_Connections: + - rid: 8805856113439801570 + - rid: 8805856113439801625 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801548 + m_Connections: [] + - rid: 8805856113439801626 + 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: 8805856113439801667 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801627 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801549 + m_Connections: + - rid: 8805856113439801570 + - rid: 8805856113439801628 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801549 + m_Connections: [] + - rid: 8805856113439801629 + 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: 8805856113439801668 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801630 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801550 + m_Connections: + - rid: 8805856113439801570 + - rid: 8805856113439801631 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801550 + m_Connections: [] + - rid: 8805856113439801632 + 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: 8805856113439801669 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801633 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801551 + m_Connections: + - rid: 8805856113439801570 + - rid: 8805856113439801634 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801551 + m_Connections: [] + - rid: 8805856113439801635 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801552 + m_Connections: + - rid: 8805856113439801570 + - rid: 8805856113439801636 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801552 + m_Connections: [] + - rid: 8805856113439801637 + 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: 8805856113439801670 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801638 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801553 + m_Connections: + - rid: 8805856113439801572 + - rid: 8805856113439801639 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801553 + m_Connections: [] + - rid: 8805856113439801640 + 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: 8805856113439801671 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801641 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801554 + m_Connections: + - rid: 8805856113439801572 + - rid: 8805856113439801642 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801554 + m_Connections: [] + - rid: 8805856113439801643 + 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: 8805856113439801672 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801644 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: InputPort + m_PortDataFlowType: 0 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801555 + m_Connections: + - rid: 8805856113439801572 + - rid: 8805856113439801645 + type: {class: PortModel, ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} + data: + m_Name: OutputPort + m_PortDataFlowType: 1 + m_IsFloating: 0 + m_NodeModel: + rid: 8805856113439801555 + m_Connections: [] + - rid: 8805856113439801646 + 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: 8805856113439801673 + LinkedVariable: + rid: 8805856113439801650 + - rid: 8805856113439801647 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: Speed + Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + LocalValue: + rid: 8805856113439801674 + LinkedVariable: + rid: -2 + - rid: 8805856113439801648 + type: {class: BehaviorGraphNodeModel/FieldModel, ns: Unity.Behavior, asm: Unity.Behavior.Authoring} + data: + FieldName: StopDistance + Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + LocalValue: + rid: 8805856113439801675 + LinkedVariable: + rid: -2 + - rid: 8805856113439801649 type: {class: 'BlackboardVariable`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior, asm: Unity.Behavior} data: GUID: @@ -2381,7 +2664,7 @@ MonoBehaviour: m_Value1: 0 Name: m_Value: {fileID: 0} - - rid: 8805856000049152532 + - rid: 8805856113439801650 type: {class: 'TypedVariableModel`1[[UnityEngine.GameObject, UnityEngine.CoreModule]]', ns: Unity.Behavior.GraphFramework, asm: Unity.Behavior.GraphFramework} data: ID: @@ -2391,22 +2674,206 @@ MonoBehaviour: IsExposed: 1 m_IsShared: 0 m_Value: {fileID: 0} - - rid: 8805856000049152533 + - rid: 8805856113439801651 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 + m_Value: 0 + - rid: 8805856113439801652 + 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: 8805856113439801653 + 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: 8805856113439801654 + 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: 8805856113439801655 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 + m_Value: 0 + - rid: 8805856113439801656 + type: {class: 'BlackboardVariable`1[[System.Single, mscorlib]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 20 + - rid: 8805856113439801657 + type: {class: 'BlackboardVariable`1[[DistanceTargetSelectionMode, Colosseum.Game]]', ns: Unity.Behavior, asm: Unity.Behavior} + data: + GUID: + m_Value0: 0 + m_Value1: 0 + Name: + m_Value: 1 + - rid: 8805856113439801658 + 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: 8805856113439801659 + 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: 8805856113439801660 + 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: 8805856113439801661 + 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: 8805856113439801662 + 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: 8805856113439801663 + 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: 8805856113439801664 + 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: 8805856113439801665 + 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: 8805856113439801666 + 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: 8805856113439801667 + 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: 8805856113439801668 + 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: 8805856113439801669 + 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: 8805856113439801670 + 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: 8805856113439801671 + 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: 8805856113439801672 + 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: 8805856113439801673 + 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: 8805856113439801674 + 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: 8805856113439801675 + 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 --- !u!114 &6694785542709420471 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2483,4 +2950,3 @@ MonoBehaviour: m_Value1: 14990413519379198129 Name: Die m_Value: 0 - diff --git a/Assets/_Game/Animations/Anim_Drog_스윙.fbx.meta b/Assets/_Game/Animations/Anim_Drog_스윙.fbx.meta index fcde3bba..bd47c7e4 100644 --- a/Assets/_Game/Animations/Anim_Drog_스윙.fbx.meta +++ b/Assets/_Game/Animations/Anim_Drog_스윙.fbx.meta @@ -62,6 +62,13 @@ ModelImporter: floatParameter: 0 intParameter: 0 messageOptions: 0 + - time: 0.53048134 + functionName: OnEffect + data: + objectReferenceParameter: {instanceID: 0} + floatParameter: 0 + intParameter: 1 + messageOptions: 0 - time: 0.99549305 functionName: OnSkillEnd data: diff --git a/Assets/_Game/Animations/Anim_Drog_오른손치기2.fbx.meta b/Assets/_Game/Animations/Anim_Drog_오른손치기2.fbx.meta index e82a6525..19cf285b 100644 --- a/Assets/_Game/Animations/Anim_Drog_오른손치기2.fbx.meta +++ b/Assets/_Game/Animations/Anim_Drog_오른손치기2.fbx.meta @@ -55,13 +55,6 @@ ModelImporter: bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 curves: [] events: - - time: 0.35211262 - functionName: OnEffect - data: - objectReferenceParameter: {instanceID: 0} - floatParameter: 0 - intParameter: 1 - messageOptions: 0 - time: 0.3636364 functionName: OnEffect data: @@ -69,6 +62,13 @@ ModelImporter: floatParameter: 0 intParameter: 0 messageOptions: 0 + - time: 0.37272727 + functionName: OnEffect + data: + objectReferenceParameter: {instanceID: 0} + floatParameter: 0 + intParameter: 1 + messageOptions: 0 - time: 0.9887324 functionName: OnSkillEnd data: diff --git a/Assets/_Game/Animations/Anim_Drog_점프.fbx.meta b/Assets/_Game/Animations/Anim_Drog_점프.fbx.meta index b02a761c..69811248 100644 --- a/Assets/_Game/Animations/Anim_Drog_점프.fbx.meta +++ b/Assets/_Game/Animations/Anim_Drog_점프.fbx.meta @@ -471,6 +471,13 @@ ModelImporter: floatParameter: 0 intParameter: 0 messageOptions: 0 + - time: 0.06148243 + functionName: OnEffect + data: + objectReferenceParameter: {instanceID: 0} + floatParameter: 0 + intParameter: 1 + messageOptions: 0 transformMask: [] maskType: 3 maskSource: {fileID: 31900000, guid: e8e1ad9aea8c740458a8550aa77c27b0, type: 2} diff --git a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset new file mode 100644 index 00000000..83104441 --- /dev/null +++ b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset @@ -0,0 +1,20 @@ +%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: 0ce956e0878565343974c31b8111c0c6, type: 3} + m_Name: "Data_Pattern_Drog_\uB0B4\uB824\uCC0D\uAE30" + m_EditorClassIdentifier: Colosseum.Game::Colosseum.AI.BossPatternData + patternName: "\uB0B4\uB824\uCC0D\uAE30" + steps: + - Type: 0 + Skill: {fileID: 11400000, guid: 773afd8dabe30374c826b7fa1d1a68ea, type: 2} + Duration: 0 + cooldown: 4 diff --git a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset.meta b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset.meta new file mode 100644 index 00000000..5fd56b74 --- /dev/null +++ b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_내려찍기.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a52d59d590b4eaa9ef92b7984eb08c7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_약2타-스윙.asset b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_약2타-스윙.asset index 32ee8c1c..2fd2242c 100644 --- a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_약2타-스윙.asset +++ b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_약2타-스윙.asset @@ -17,9 +17,6 @@ MonoBehaviour: - Type: 0 Skill: {fileID: 11400000, guid: 4f40629d4d334434285e8fdec3714536, type: 2} Duration: 0 - - Type: 0 - Skill: {fileID: 11400000, guid: 773afd8dabe30374c826b7fa1d1a68ea, type: 2} - Duration: 0 - Type: 0 Skill: {fileID: 11400000, guid: 3acbf1c5ec71bef4bb13f8534605d554, type: 2} Duration: 0.5 diff --git a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset index e93244d8..e6c67989 100644 --- a/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset +++ b/Assets/_Game/Data/Patterns/Data_Pattern_Drog_점프.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0ce956e0878565343974c31b8111c0c6, type: 3} m_Name: "Data_Pattern_Drog_\uC810\uD504" m_EditorClassIdentifier: Colosseum.Game::Colosseum.AI.BossPatternData - patternName: "\uAE30\uBCF8 \uD328\uD134" + patternName: "\uB3C4\uC57D" steps: - Type: 0 Skill: {fileID: 11400000, guid: 0e22d4b1dc395a04fb00ca4f82aeb838, type: 2} diff --git a/Assets/_Game/Data/Skills/Data_Skill_Drog_다운추가타.asset b/Assets/_Game/Data/Skills/Data_Skill_Drog_다운추가타.asset index 84311ae7..836145b9 100644 --- a/Assets/_Game/Data/Skills/Data_Skill_Drog_다운추가타.asset +++ b/Assets/_Game/Data/Skills/Data_Skill_Drog_다운추가타.asset @@ -25,3 +25,4 @@ MonoBehaviour: manaCost: 0 effects: - {fileID: 11400000, guid: 0f134a897a7e4d0e98c8d9058b1d79d1, type: 2} + - {fileID: 11400000, guid: 216d4b5f6ce9479e94e0d306399f4891, type: 2} diff --git a/Assets/_Game/Data/Skills/Data_Skill_Drog_스윙.asset b/Assets/_Game/Data/Skills/Data_Skill_Drog_스윙.asset index 18e3d60a..87c6234c 100644 --- a/Assets/_Game/Data/Skills/Data_Skill_Drog_스윙.asset +++ b/Assets/_Game/Data/Skills/Data_Skill_Drog_스윙.asset @@ -23,4 +23,5 @@ MonoBehaviour: manaCost: 0 effects: - {fileID: 11400000, guid: 94b0f3305cea88c458a56783a486340e, type: 2} + - {fileID: 11400000, guid: e9d73ea9d8f4462ab5d2f2d844eef2ab, type: 2} diff --git a/Assets/_Game/Data/Skills/Data_Skill_Drog_오른손치기2.asset b/Assets/_Game/Data/Skills/Data_Skill_Drog_오른손치기2.asset index 3129c624..36fc71a5 100644 --- a/Assets/_Game/Data/Skills/Data_Skill_Drog_오른손치기2.asset +++ b/Assets/_Game/Data/Skills/Data_Skill_Drog_오른손치기2.asset @@ -23,5 +23,5 @@ MonoBehaviour: manaCost: 0 effects: - {fileID: 11400000, guid: 87b064a0134987b4b9638e184ab07411, type: 2} - - {fileID: 11400000, guid: 0dba6dca651743bc84b0df42f9dbd290, type: 2} + - {fileID: 11400000, guid: 2db6d8d7f5da4f7ab9f0a12e65498ab1, type: 2} diff --git a/Assets/_Game/Data/Skills/Data_Skill_Drog_점프착지.asset b/Assets/_Game/Data/Skills/Data_Skill_Drog_점프착지.asset index 64892d31..23bf54ae 100644 --- a/Assets/_Game/Data/Skills/Data_Skill_Drog_점프착지.asset +++ b/Assets/_Game/Data/Skills/Data_Skill_Drog_점프착지.asset @@ -25,4 +25,5 @@ MonoBehaviour: manaCost: 0 effects: - {fileID: 11400000, guid: 11bd2d1ebdbfc2f4abf5a9d886615eb3, type: 2} + - {fileID: 11400000, guid: 74cc72abcf5f49d0aed2d0a2258c73d8, type: 2} diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset new file mode 100644 index 00000000..034bea20 --- /dev/null +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset @@ -0,0 +1,28 @@ +%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: 27cd4e4eb6a485845953db2a108a37f8, type: 3} + m_Name: "Data_SkillEffect_Drog_\uB2E4\uC6B4\uCD94\uAC00\uD0C0_1_\uB109\uBC31" + m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.Effects.KnockbackEffect + targetType: 1 + targetTeam: 0 + areaCenter: 0 + areaShape: 0 + targetLayers: + serializedVersion: 2 + m_Bits: 4294967295 + areaRadius: 3.25 + fanOriginDistance: 1 + fanRadius: 3 + fanHalfAngle: 45 + force: 6 + upwardForce: 1 + duration: 0.25 diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset.meta b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset.meta new file mode 100644 index 00000000..d084357d --- /dev/null +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_다운추가타_1_넉백.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 216d4b5f6ce9479e94e0d306399f4891 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset new file mode 100644 index 00000000..4db4083b --- /dev/null +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset @@ -0,0 +1,28 @@ +%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: 27cd4e4eb6a485845953db2a108a37f8, type: 3} + m_Name: "Data_SkillEffect_Drog_\uC2A4\uC719_1_\uB109\uBC31" + m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.Effects.KnockbackEffect + targetType: 1 + targetTeam: 0 + areaCenter: 0 + areaShape: 1 + targetLayers: + serializedVersion: 2 + m_Bits: 4294967295 + areaRadius: 3 + fanOriginDistance: 0 + fanRadius: 3 + fanHalfAngle: 45 + force: 7 + upwardForce: 1.5 + duration: 0.3 diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset.meta b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset.meta new file mode 100644 index 00000000..c72f7fdb --- /dev/null +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_스윙_1_넉백.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9d73ea9d8f4462ab5d2f2d844eef2ab +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset index 4c0b4eb2..ea982c3e 100644 --- a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset @@ -23,4 +23,4 @@ MonoBehaviour: fanOriginDistance: 0 fanRadius: 3 fanHalfAngle: 45 - duration: 2.5 + duration: 1.25 diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset.meta b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset.meta index 40dd05ca..baaf9c49 100644 --- a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset.meta +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_오른손치기2_1_다운.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0dba6dca651743bc84b0df42f9dbd290 +guid: 2db6d8d7f5da4f7ab9f0a12e65498ab1 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset new file mode 100644 index 00000000..08ec538b --- /dev/null +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset @@ -0,0 +1,28 @@ +%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: 27cd4e4eb6a485845953db2a108a37f8, type: 3} + m_Name: "Data_SkillEffect_Drog_\uC810\uD504_1_\uB109\uBC31" + m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.Effects.KnockbackEffect + targetType: 1 + targetTeam: 0 + areaCenter: 0 + areaShape: 0 + targetLayers: + serializedVersion: 2 + m_Bits: 4294967295 + areaRadius: 5 + fanOriginDistance: 1 + fanRadius: 3 + fanHalfAngle: 45 + force: 7 + upwardForce: 1.25 + duration: 0.35 diff --git a/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset.meta b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset.meta new file mode 100644 index 00000000..175e6b4a --- /dev/null +++ b/Assets/_Game/Data/Skills/Effects/Data_SkillEffect_Drog_점프_1_넉백.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74cc72abcf5f49d0aed2d0a2258c73d8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Prefabs/Bosses/Prefab_Boss_Drog.prefab b/Assets/_Game/Prefabs/Bosses/Prefab_Boss_Drog.prefab index 43d1b1bd..bb58da5b 100644 --- a/Assets/_Game/Prefabs/Bosses/Prefab_Boss_Drog.prefab +++ b/Assets/_Game/Prefabs/Bosses/Prefab_Boss_Drog.prefab @@ -2187,6 +2187,7 @@ MonoBehaviour: skillController: {fileID: 8818883032728065057} navMeshAgent: {fileID: 5153439431748782209} mainPattern: {fileID: 11400000, guid: 5efd8123be76bf844875d386d9d5f73d, type: 2} + slamPattern: {fileID: 11400000, guid: 4a52d59d590b4eaa9ef92b7984eb08c7, type: 2} leapPattern: {fileID: 11400000, guid: 88e6cc7cab28baf4c8f8a742247000ec, type: 2} downPunishPattern: {fileID: 11400000, guid: fe5100f855d14c0faac44b6d4f2c771e, type: 2} phase2HealthThreshold: 0.75 @@ -2194,7 +2195,10 @@ MonoBehaviour: targetRefreshInterval: 0.2 leapDistanceThreshold: 8 downPunishSearchRadius: 6 - disableBehaviorGraph: 1 + phase1SlamInterval: 3 + phase2SlamInterval: 2 + phase3SlamInterval: 2 + disableBehaviorGraph: 0 debugMode: 1 --- !u!114 &7544406269366897481 MonoBehaviour: diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs new file mode 100644 index 00000000..93b2088c --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs @@ -0,0 +1,249 @@ +using System; + +using Colosseum; +using Colosseum.AI; +using Colosseum.Combat; +using Colosseum.Enemy; +using Colosseum.Player; +using Colosseum.Skills; + +using Unity.Behavior; +using Unity.Properties; +using UnityEngine; + +using Action = Unity.Behavior.Action; + +/// +/// 보스 공통 패턴 실행용 Behavior Action 기반 클래스입니다. +/// +[Serializable, GeneratePropertyBag] +public abstract partial class BossPatternActionBase : Action +{ + [SerializeReference] + public BlackboardVariable Target; + + protected BossEnemy bossEnemy; + protected EnemyBase enemyBase; + protected SkillController skillController; + protected BossCombatBehaviorContext combatBehaviorContext; + protected UnityEngine.AI.NavMeshAgent navMeshAgent; + + private BossPatternData activePattern; + private GameObject activeTarget; + private int currentStepIndex; + private bool isWaiting; + private float waitEndTime; + + /// + /// 액션 시작 시 실제로 실행할 패턴과 대상을 결정합니다. + /// + protected abstract bool TryResolvePattern(out BossPatternData pattern, out GameObject target); + + protected override Status OnStart() + { + ResolveReferences(); + ClearRuntimeState(); + + if (!IsReady()) + return Status.Failure; + + if (bossEnemy.IsDead || bossEnemy.IsTransitioning) + return Status.Failure; + + if (skillController.IsPlayingAnimation) + return Status.Failure; + + if (!TryResolvePattern(out BossPatternData pattern, out GameObject target)) + return Status.Failure; + + activePattern = pattern; + activeTarget = target; + + if (Target != null) + Target.Value = target; + + StopMovement(); + return ExecuteCurrentStep(); + } + + protected override Status OnUpdate() + { + if (!IsReady() || activePattern == null) + return Status.Failure; + + if (bossEnemy.IsDead || bossEnemy.IsTransitioning) + return Status.Failure; + + if (isWaiting) + { + if (Time.time < waitEndTime) + return Status.Running; + + isWaiting = false; + } + else if (skillController.IsPlayingAnimation) + { + return Status.Running; + } + + currentStepIndex++; + if (currentStepIndex >= activePattern.Steps.Count) + { + UsePatternAction.MarkPatternUsed(GameObject, activePattern); + return Status.Success; + } + + return ExecuteCurrentStep(); + } + + protected override void OnEnd() + { + ClearRuntimeState(); + } + + protected virtual GameObject ResolveStepTarget(GameObject fallbackTarget) + { + return fallbackTarget; + } + + protected GameObject FindNearestLivingPlayer() + { + PlayerNetworkController[] players = UnityEngine.Object.FindObjectsByType(FindObjectsSortMode.None); + GameObject nearestTarget = null; + float nearestDistance = float.MaxValue; + float maxDistance = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity; + + for (int i = 0; i < players.Length; i++) + { + PlayerNetworkController player = players[i]; + if (player == null || player.IsDead || !player.gameObject.activeInHierarchy) + continue; + + GameObject candidate = player.gameObject; + if (Team.IsSameTeam(GameObject, candidate)) + continue; + + float distance = Vector3.Distance(GameObject.transform.position, candidate.transform.position); + if (distance > maxDistance || distance >= nearestDistance) + continue; + + nearestDistance = distance; + nearestTarget = candidate; + } + + return nearestTarget; + } + + protected GameObject ResolvePrimaryTarget() + { + GameObject highestThreatTarget = enemyBase != null + ? enemyBase.GetHighestThreatTarget(Target?.Value, null, enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity) + : null; + + GameObject target = highestThreatTarget != null ? highestThreatTarget : FindNearestLivingPlayer(); + if (Target != null) + Target.Value = target; + + return target; + } + + protected bool IsValidHostileTarget(GameObject candidate) + { + if (candidate == null || !candidate.activeInHierarchy) + return false; + + if (Team.IsSameTeam(GameObject, candidate)) + return false; + + IDamageable damageable = candidate.GetComponent(); + return damageable == null || !damageable.IsDead; + } + + protected void StopMovement() + { + if (navMeshAgent == null || !navMeshAgent.enabled) + return; + + navMeshAgent.isStopped = true; + navMeshAgent.ResetPath(); + } + + protected void LogDebug(string message) + { + combatBehaviorContext?.LogDebug(GetType().Name, message); + } + + private Status ExecuteCurrentStep() + { + if (activePattern == null || currentStepIndex < 0 || currentStepIndex >= activePattern.Steps.Count) + return Status.Failure; + + PatternStep step = activePattern.Steps[currentStepIndex]; + if (step.Type == PatternStepType.Wait) + { + isWaiting = true; + waitEndTime = Time.time + step.Duration; + return Status.Running; + } + + if (step.Skill == null) + { + Debug.LogWarning($"[{GetType().Name}] 스킬이 비어 있는 패턴 스텝입니다: {activePattern.PatternName} / Step={currentStepIndex}"); + return Status.Failure; + } + + GameObject skillTarget = activeTarget; + if (step.Skill.JumpToTarget) + { + skillTarget = ResolveStepTarget(activeTarget); + if (skillTarget == null) + { + LogDebug($"점프 타겟을 찾지 못해 실패: {activePattern.PatternName}"); + return Status.Failure; + } + + enemyBase?.SetJumpTarget(skillTarget.transform.position); + } + + if (!skillController.ExecuteSkill(step.Skill)) + { + Debug.LogWarning($"[{GetType().Name}] 스킬 실행 실패: {step.Skill.SkillName}"); + return Status.Failure; + } + + LogDebug($"패턴 실행: {activePattern.PatternName} / Step={currentStepIndex} / Skill={step.Skill.SkillName}"); + return Status.Running; + } + + private bool IsReady() + { + return bossEnemy != null && enemyBase != null && skillController != null && combatBehaviorContext != null; + } + + private void ResolveReferences() + { + if (bossEnemy == null) + bossEnemy = GameObject.GetComponent(); + + if (enemyBase == null) + enemyBase = GameObject.GetComponent(); + + if (skillController == null) + skillController = GameObject.GetComponent(); + + if (combatBehaviorContext == null) + combatBehaviorContext = GameObject.GetComponent(); + + if (navMeshAgent == null) + navMeshAgent = GameObject.GetComponent(); + } + + private void ClearRuntimeState() + { + activePattern = null; + activeTarget = null; + currentStepIndex = 0; + isWaiting = false; + waitEndTime = 0f; + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs.meta new file mode 100644 index 00000000..5a3cfebf --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/BossPatternActionBase.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 44fff80e86b16f6419b0e952efbebf2a \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs new file mode 100644 index 00000000..cac0d366 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 기동 패턴 준비 여부를 확인하는 체크 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Check Mobility Pattern Ready", + story: "기동 패턴 준비 여부 확인", + category: "Action", + id: "5b4f133ba50f46759c1c1d3347eb0b0d")] +public partial class CheckMobilityPatternReadyAction : CheckPatternReadyActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Mobility; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs.meta new file mode 100644 index 00000000..079dbf5d --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckMobilityPatternReadyAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 489f56d9043e6d24fbe8e5574b6729be \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs new file mode 100644 index 00000000..0f369108 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs @@ -0,0 +1,31 @@ +using System; + +using Colosseum.AI; +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +using Action = Unity.Behavior.Action; + +/// +/// 지정된 공통 패턴 역할의 준비 여부를 확인하는 체크 액션 기반 클래스입니다. +/// +[Serializable, GeneratePropertyBag] +public abstract partial class CheckPatternReadyActionBase : Action +{ + /// + /// 현재 액션이 검사할 패턴 역할입니다. + /// + protected abstract BossCombatPatternRole PatternRole { get; } + + protected override Status OnStart() + { + BossCombatBehaviorContext context = GameObject.GetComponent(); + if (context == null) + return Status.Failure; + + BossPatternData pattern = context.GetPattern(PatternRole); + return UsePatternAction.IsPatternReady(GameObject, pattern) ? Status.Success : Status.Failure; + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs.meta new file mode 100644 index 00000000..50b6f0f6 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPatternReadyActionBase.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 59a58b1d5cc33f943a1af10764ee11b5 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs new file mode 100644 index 00000000..cec1c3a0 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 기본 패턴 준비 여부를 확인하는 체크 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Check Primary Pattern Ready", + story: "기본 패턴 준비 여부 확인", + category: "Action", + id: "88626617015e43ef97ea4dd05cce55e0")] +public partial class CheckPrimaryPatternReadyAction : CheckPatternReadyActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Primary; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs.meta new file mode 100644 index 00000000..e870a180 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPrimaryPatternReadyAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e3b45dc2b81beac44a35a3a6545c0488 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs new file mode 100644 index 00000000..32de2a02 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 징벌 패턴 준비 여부를 확인하는 체크 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Check Punish Pattern Ready", + story: "징벌 패턴 준비 여부 확인", + category: "Action", + id: "e855b3f8bdce44efa85859358d67c7a7")] +public partial class CheckPunishPatternReadyAction : CheckPatternReadyActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Punish; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs.meta new file mode 100644 index 00000000..176ff300 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckPunishPatternReadyAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2211d1182dbbf7741b0058718afae162 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs new file mode 100644 index 00000000..2a031f35 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 보조 패턴 준비 여부를 확인하는 체크 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Check Secondary Pattern Ready", + story: "보조 패턴 준비 여부 확인", + category: "Action", + id: "72d4626f97fe4de4aedfda612961957f")] +public partial class CheckSecondaryPatternReadyAction : CheckPatternReadyActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Secondary; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs.meta new file mode 100644 index 00000000..f7bd368a --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternReadyAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e155d7ca234bf8148bef34617a3a8739 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs new file mode 100644 index 00000000..3e90e61e --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs @@ -0,0 +1,26 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +using Action = Unity.Behavior.Action; + +/// +/// 현재 근접 패턴 차례가 보조 패턴인지 확인하는 공통 체크 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Check Secondary Pattern Turn", + story: "현재 근접 패턴 차례가 보조 패턴인지 확인", + category: "Action", + id: "e85477bd25894248aeeea8b41efc7f48")] +public partial class CheckSecondaryPatternTurnAction : Action +{ + protected override Status OnStart() + { + BossCombatBehaviorContext context = GameObject.GetComponent(); + return context != null && context.IsNextSecondaryPattern() ? Status.Success : Status.Failure; + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs.meta new file mode 100644 index 00000000..c1258b5c --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckSecondaryPatternTurnAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 435950077eea65d43beb6bfaba38dc60 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs new file mode 100644 index 00000000..de5137aa --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs @@ -0,0 +1,35 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; +using UnityEngine; + +using Action = Unity.Behavior.Action; + +/// +/// 현재 타겟이 보스의 공격 사거리 안에 있는지 확인하는 공통 체크 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Check Target In Attack Range", + story: "[Target]이 보스 공격 사거리 안에 있는지 확인", + category: "Action", + id: "16821bba281d49f699d1ac9ec613dcce")] +public partial class CheckTargetInAttackRangeAction : Action +{ + [SerializeReference] + public BlackboardVariable Target; + + protected override Status OnStart() + { + if (Target?.Value == null) + return Status.Failure; + + EnemyBase enemyBase = GameObject.GetComponent(); + float attackRange = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AttackRange : 2f; + float distance = Vector3.Distance(GameObject.transform.position, Target.Value.transform.position); + return distance <= attackRange + 0.25f ? Status.Success : Status.Failure; + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs.meta new file mode 100644 index 00000000..db814576 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/CheckTargetInAttackRangeAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5b3844411f6dd784089c40c5d4325b45 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs new file mode 100644 index 00000000..dd94b5a9 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs @@ -0,0 +1,46 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; +using UnityEngine; + +using Action = Unity.Behavior.Action; + +/// +/// 보스의 주 대상을 갱신하는 공통 Behavior Action입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Refresh Primary Target", + story: "보스 주 대상을 [Target]으로 갱신", + category: "Action", + id: "b7dbb1fc0c0d451795e9f02d6f4d3930")] +public partial class RefreshPrimaryTargetAction : Action +{ + [SerializeReference] + public BlackboardVariable Target; + + protected override Status OnStart() + { + EnemyBase enemyBase = GameObject.GetComponent(); + if (enemyBase == null) + return Status.Failure; + + GameObject currentTarget = Target != null ? Target.Value : null; + float aggroRange = enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity; + GameObject resolvedTarget = enemyBase.GetHighestThreatTarget(currentTarget, null, aggroRange); + + if (resolvedTarget == null) + { + BossCombatBehaviorContext context = GameObject.GetComponent(); + resolvedTarget = context != null ? context.FindNearestLivingTarget() : null; + } + + if (Target != null) + Target.Value = resolvedTarget; + + return resolvedTarget != null ? Status.Success : Status.Failure; + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs.meta new file mode 100644 index 00000000..2bf3827f --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/RefreshPrimaryTargetAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 47bff77f5775ca3409b7f9676596d561 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs new file mode 100644 index 00000000..f9611d58 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs @@ -0,0 +1,93 @@ +using System; + +using Colosseum; +using Colosseum.Combat; +using Colosseum.Enemy; +using Colosseum.Player; + +using Unity.Behavior; +using Unity.Properties; +using UnityEngine; + +using Action = Unity.Behavior.Action; + +/// +/// 일정 반경 내에서 가장 가까운 다운 대상 플레이어를 선택하는 Behavior Action입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Select Nearest Downed Target", + story: "[SearchRadius] 반경 내 가장 가까운 다운 대상을 [Target]으로 선택", + category: "Action", + id: "ee1146ad46ec4730acb4d6c883a5a771")] +public partial class SelectNearestDownedTargetAction : Action +{ + [SerializeReference] + public BlackboardVariable Target; + + [SerializeReference] + public BlackboardVariable SearchRadius = new BlackboardVariable(0f); + + protected override Status OnStart() + { + float searchRadius = ResolveSearchRadius(); + HitReactionController[] hitReactionControllers = UnityEngine.Object.FindObjectsByType(FindObjectsSortMode.None); + + GameObject nearestTarget = null; + float nearestDistance = float.MaxValue; + + for (int i = 0; i < hitReactionControllers.Length; i++) + { + HitReactionController controller = hitReactionControllers[i]; + if (controller == null || !controller.IsDowned) + continue; + + GameObject candidate = controller.gameObject; + if (candidate == null || !candidate.activeInHierarchy) + continue; + + if (Team.IsSameTeam(GameObject, candidate)) + continue; + + IDamageable damageable = candidate.GetComponent(); + if (damageable != null && damageable.IsDead) + continue; + + float distance = Vector3.Distance(GameObject.transform.position, candidate.transform.position); + if (distance > searchRadius || distance >= nearestDistance) + continue; + + nearestDistance = distance; + nearestTarget = candidate; + } + + if (nearestTarget == null) + return Status.Failure; + + Target.Value = nearestTarget; + LogDebug($"다운 대상 선택: {nearestTarget.name}"); + return Status.Success; + } + + private float ResolveSearchRadius() + { + if (SearchRadius.Value > 0f) + return SearchRadius.Value; + + BossCombatBehaviorContext context = GameObject.GetComponent(); + if (context != null) + return context.PunishSearchRadius; + + EnemyBase enemyBase = GameObject.GetComponent(); + if (enemyBase != null && enemyBase.Data != null) + return enemyBase.Data.AttackRange + 4f; + + return 6f; + } + + private void LogDebug(string message) + { + BossCombatBehaviorContext context = GameObject.GetComponent(); + context?.LogDebug(nameof(SelectNearestDownedTargetAction), message); + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs.meta new file mode 100644 index 00000000..7557f7c3 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectNearestDownedTargetAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f7453c48fa1599a44a10be23750ade75 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs new file mode 100644 index 00000000..f2b93521 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs @@ -0,0 +1,172 @@ +using System; + +using Unity.Behavior; +using Unity.Properties; +using UnityEngine; + +using Colosseum; +using Colosseum.Combat; +using Colosseum.Enemy; + +using Action = Unity.Behavior.Action; + +/// +/// 거리 조건에 맞는 대상을 선택하는 Behavior Action입니다. +/// 가장 가까운 대상, 가장 먼 대상, 후보 중 랜덤 선택을 지원합니다. +/// +[Serializable] +public enum DistanceTargetSelectionMode +{ + Nearest = 0, + Farthest = 1, + Random = 2, +} + +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Select Target By Distance", + story: "[Tag] 대상 중 [MinRange] 이상 [MaxRange] 이하 범위에서 [SelectionMode] 방식으로 [Target] 선택", + category: "Action", + id: "4f6a830df3ff4ff5bf8bd2c8b433aa41")] +public partial class SelectTargetByDistanceAction : Action +{ + [SerializeReference] + public BlackboardVariable Target; + + [SerializeReference] + public BlackboardVariable Tag = new BlackboardVariable("Player"); + + [SerializeReference] + public BlackboardVariable MinRange = new BlackboardVariable(0f); + + [SerializeReference] + public BlackboardVariable MaxRange = new BlackboardVariable(20f); + + [SerializeReference] + public BlackboardVariable SelectionMode = + new BlackboardVariable(DistanceTargetSelectionMode.Farthest); + + protected override Status OnStart() + { + if (string.IsNullOrEmpty(Tag.Value)) + return Status.Failure; + + GameObject[] candidates = GameObject.FindGameObjectsWithTag(Tag.Value); + if (candidates == null || candidates.Length == 0) + return Status.Failure; + + float minRange = Mathf.Max(0f, MinRange.Value); + float maxRange = Mathf.Max(minRange, MaxRange.Value); + BossCombatBehaviorContext context = GameObject.GetComponent(); + + if (minRange <= 0f && context != null) + minRange = context.MobilityTriggerDistance; + + if (maxRange <= minRange) + { + EnemyBase enemyBase = GameObject.GetComponent(); + maxRange = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AggroRange : 20f; + } + + GameObject selectedTarget = SelectionMode.Value switch + { + DistanceTargetSelectionMode.Nearest => FindNearestTarget(candidates, minRange, maxRange), + DistanceTargetSelectionMode.Random => FindRandomTarget(candidates, minRange, maxRange), + _ => FindFarthestTarget(candidates, minRange, maxRange), + }; + + if (selectedTarget == null) + return Status.Failure; + + Target.Value = selectedTarget; + return Status.Success; + } + + private GameObject FindNearestTarget(GameObject[] candidates, float minRange, float maxRange) + { + GameObject bestTarget = null; + float bestDistance = float.MaxValue; + + for (int i = 0; i < candidates.Length; i++) + { + GameObject candidate = candidates[i]; + if (!IsValidTarget(candidate, minRange, maxRange, out float distance)) + continue; + + if (distance >= bestDistance) + continue; + + bestDistance = distance; + bestTarget = candidate; + } + + return bestTarget; + } + + private GameObject FindFarthestTarget(GameObject[] candidates, float minRange, float maxRange) + { + GameObject bestTarget = null; + float bestDistance = minRange; + + for (int i = 0; i < candidates.Length; i++) + { + GameObject candidate = candidates[i]; + if (!IsValidTarget(candidate, minRange, maxRange, out float distance)) + continue; + + if (distance <= bestDistance) + continue; + + bestDistance = distance; + bestTarget = candidate; + } + + return bestTarget; + } + + private GameObject FindRandomTarget(GameObject[] candidates, float minRange, float maxRange) + { + System.Collections.Generic.List validTargets = new System.Collections.Generic.List(); + + for (int i = 0; i < candidates.Length; i++) + { + GameObject candidate = candidates[i]; + if (!IsValidTarget(candidate, minRange, maxRange, out _)) + continue; + + validTargets.Add(candidate); + } + + if (validTargets.Count == 0) + return null; + + int randomIndex = UnityEngine.Random.Range(0, validTargets.Count); + return validTargets[randomIndex]; + } + + private bool IsValidTarget(GameObject candidate, float minRange, float maxRange, out float distance) + { + distance = 0f; + + if (candidate == null || !candidate.activeInHierarchy) + return false; + + if (Team.IsSameTeam(GameObject, candidate)) + return false; + + IDamageable damageable = candidate.GetComponent(); + if (damageable != null && damageable.IsDead) + return false; + + EnemyBase enemyBase = GameObject.GetComponent(); + float sightRange = enemyBase != null && enemyBase.Data != null + ? enemyBase.Data.AggroRange + : maxRange; + + distance = Vector3.Distance(GameObject.transform.position, candidate.transform.position); + if (distance < minRange || distance > maxRange || distance > sightRange) + return false; + + return true; + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs.meta new file mode 100644 index 00000000..c45a57ae --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/SelectTargetByDistanceAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ce75af43cd1bd434495f187749228a63 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs new file mode 100644 index 00000000..43528456 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 기동 패턴을 실행하는 공통 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Use Mobility Pattern", + story: "기동 패턴 실행", + category: "Action", + id: "bb19ca5ae11a4d9586180f7cba9f76cc")] +public partial class UseMobilityPatternAction : UsePatternRoleActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Mobility; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs.meta new file mode 100644 index 00000000..0b8c90b0 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseMobilityPatternAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 137700b0db09e724899700f0da861132 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs index 1a6f929a..cbd6a591 100644 --- a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternAction.cs @@ -1,9 +1,15 @@ using System; + +using Colosseum; using Colosseum.AI; +using Colosseum.Combat; +using Colosseum.Enemy; using Colosseum.Skills; + using Unity.Behavior; using Unity.Properties; using UnityEngine; + using Action = Unity.Behavior.Action; /// @@ -17,11 +23,13 @@ public partial class UsePatternAction : Action [SerializeReference] public BlackboardVariable Pattern; [SerializeReference] public BlackboardVariable Target; + private static readonly System.Collections.Generic.Dictionary patternReadyTimes = + new System.Collections.Generic.Dictionary(); + private SkillController skillController; private int currentStepIndex; private float waitEndTime; private bool isWaiting; - private float lastUsedTime = float.MinValue; protected override Status OnStart() { @@ -31,13 +39,21 @@ public partial class UsePatternAction : Action return Status.Failure; } - if (Time.time - lastUsedTime < Pattern.Value.Cooldown) + if (!IsPatternReady(GameObject, Pattern.Value)) { + LogDebug($"쿨다운 중: {Pattern.Value.PatternName}"); return Status.Failure; } if (Pattern.Value.Steps.Count == 0) { + LogDebug("스텝이 비어 있는 패턴이라 실패합니다."); + return Status.Failure; + } + + if (RequiresJumpTarget(Pattern.Value) && ResolveJumpTarget() == null) + { + LogDebug($"점프 타겟을 찾지 못해 실패: {Pattern.Value.PatternName}"); return Status.Failure; } @@ -76,7 +92,7 @@ public partial class UsePatternAction : Action if (currentStepIndex >= Pattern.Value.Steps.Count) { - lastUsedTime = Time.time; + MarkPatternUsed(GameObject, Pattern.Value); return Status.Success; } @@ -106,6 +122,16 @@ public partial class UsePatternAction : Action return Status.Failure; } + GameObject jumpTarget = null; + if (step.Skill.JumpToTarget) + { + jumpTarget = ResolveJumpTarget(); + if (jumpTarget == null) + { + return Status.Failure; + } + } + bool success = skillController.ExecuteSkill(step.Skill); if (!success) { @@ -113,15 +139,101 @@ public partial class UsePatternAction : Action return Status.Failure; } + LogDebug($"패턴 실행: {Pattern.Value.PatternName} / Step={currentStepIndex} / Skill={step.Skill.SkillName}"); + // 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); + GameObject.GetComponent()?.SetJumpTarget(jumpTarget.transform.position); } return Status.Running; } + + /// + /// 점프 대상이 근접 상태라면, 더 멀리 있는 유효 타겟으로 재선택합니다. + /// 도약 패턴이 전방 탱커 대신 원거리 플레이어를 징벌할 수 있도록 합니다. + /// + private GameObject ResolveJumpTarget() + { + GameObject currentTarget = Target?.Value; + EnemyBase enemyBase = GameObject.GetComponent(); + float maxJumpDistance = enemyBase?.Data != null ? enemyBase.Data.AggroRange : 20f; + return IsValidJumpTarget(currentTarget, maxJumpDistance) ? currentTarget : null; + } + + /// + /// 점프 타겟의 생존 여부, 팀, 거리 조건을 검사합니다. + /// + private bool IsValidJumpTarget(GameObject candidate, float maxDistance) + { + if (candidate == null || !candidate.activeInHierarchy) + return false; + + if (Team.IsSameTeam(GameObject, candidate)) + return false; + + IDamageable damageable = candidate.GetComponent(); + if (damageable != null && damageable.IsDead) + return false; + + float distance = Vector3.Distance(GameObject.transform.position, candidate.transform.position); + return distance <= maxDistance; + } + + /// + /// 패턴 안에 점프 타겟이 필요한 스텝이 있는지 확인합니다. + /// + private static bool RequiresJumpTarget(BossPatternData pattern) + { + if (pattern == null || pattern.Steps == null) + return false; + + for (int i = 0; i < pattern.Steps.Count; i++) + { + PatternStep step = pattern.Steps[i]; + if (step.Type == PatternStepType.Skill && step.Skill != null && step.Skill.JumpToTarget) + return true; + } + + return false; + } + + /// + /// 동일한 보스 오브젝트가 같은 패턴을 다시 사용할 수 있는지 확인합니다. + /// + public static bool IsPatternReady(GameObject owner, BossPatternData pattern) + { + if (owner == null || pattern == null) + return false; + + string cooldownKey = BuildCooldownKey(owner, pattern); + if (!patternReadyTimes.TryGetValue(cooldownKey, out float readyTime)) + return true; + + return Time.time >= readyTime; + } + + /// + /// 패턴 사용 직후 다음 사용 가능 시점을 기록합니다. + /// + public static void MarkPatternUsed(GameObject owner, BossPatternData pattern) + { + if (owner == null || pattern == null) + return; + + string cooldownKey = BuildCooldownKey(owner, pattern); + patternReadyTimes[cooldownKey] = Time.time + pattern.Cooldown; + } + + private static string BuildCooldownKey(GameObject owner, BossPatternData pattern) + { + return $"{owner.GetInstanceID()}_{pattern.GetInstanceID()}"; + } + + private void LogDebug(string message) + { + BossCombatBehaviorContext context = GameObject.GetComponent(); + context?.LogDebug(nameof(UsePatternAction), message); + } } diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs new file mode 100644 index 00000000..06762d56 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs @@ -0,0 +1,57 @@ +using System; + +using Colosseum.AI; +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; +using UnityEngine; + +/// +/// 지정된 공통 패턴 역할을 실행하는 액션 기반 클래스입니다. +/// +[Serializable, GeneratePropertyBag] +public abstract partial class UsePatternRoleActionBase : BossPatternActionBase +{ + /// + /// 현재 액션이 실행할 공통 패턴 역할입니다. + /// + protected abstract BossCombatPatternRole PatternRole { get; } + + protected override bool TryResolvePattern(out BossPatternData pattern, out GameObject target) + { + BossCombatBehaviorContext context = GameObject.GetComponent(); + pattern = context != null ? context.GetPattern(PatternRole) : null; + target = Target != null ? Target.Value : null; + + if (pattern == null || !UsePatternAction.IsPatternReady(GameObject, pattern)) + return false; + + if (target == null && PatternRole.IsMeleeRole()) + target = ResolvePrimaryTarget(); + + if (target == null && PatternRole == BossCombatPatternRole.Mobility) + target = context != null ? context.FindMobilityTarget() : null; + + if (target == null) + return false; + + if (PatternRole.IsMeleeRole() && context != null) + context.RegisterPatternUse(PatternRole); + + return true; + } + + protected override GameObject ResolveStepTarget(GameObject fallbackTarget) + { + BossCombatBehaviorContext context = GameObject.GetComponent(); + if (PatternRole == BossCombatPatternRole.Mobility && context != null) + { + return context.IsValidMobilityTarget(fallbackTarget) + ? fallbackTarget + : context.FindMobilityTarget(); + } + + return base.ResolveStepTarget(fallbackTarget); + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs.meta new file mode 100644 index 00000000..bf61d208 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePatternRoleActionBase.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 33384929fd7ec3c4f9240ac748de185c \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs new file mode 100644 index 00000000..f6bf79f4 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 기본 패턴을 실행하는 공통 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Use Primary Pattern", + story: "기본 패턴 실행", + category: "Action", + id: "45d71c690f6342bcbbd348b6df5b77f1")] +public partial class UsePrimaryPatternAction : UsePatternRoleActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Primary; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs.meta new file mode 100644 index 00000000..a75ed8fa --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePrimaryPatternAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2d8de0b13ad776845a14b35e16485f53 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs new file mode 100644 index 00000000..785aaa19 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 징벌 패턴을 실행하는 공통 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Use Punish Pattern", + story: "징벌 패턴 실행", + category: "Action", + id: "55f3c204a22b42dca6ae96e555f11a70")] +public partial class UsePunishPatternAction : UsePatternRoleActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Punish; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs.meta new file mode 100644 index 00000000..f8b684ef --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UsePunishPatternAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 16cef0dbbe7946d46b3021b0c1802669 \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs new file mode 100644 index 00000000..19b4b796 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs @@ -0,0 +1,20 @@ +using System; + +using Colosseum.Enemy; + +using Unity.Behavior; +using Unity.Properties; + +/// +/// 보조 패턴을 실행하는 공통 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Use Secondary Pattern", + story: "보조 패턴 실행", + category: "Action", + id: "5169d341ce0c4400ae7fa3b58dde5b7a")] +public partial class UseSecondaryPatternAction : UsePatternRoleActionBase +{ + protected override BossCombatPatternRole PatternRole => BossCombatPatternRole.Secondary; +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs.meta new file mode 100644 index 00000000..8f2c03c7 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/UseSecondaryPatternAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 79cd3375939c8a244bad9d8e1f02a45d \ No newline at end of file diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs new file mode 100644 index 00000000..375f2302 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs @@ -0,0 +1,33 @@ +using System; + +using Colosseum.Combat; + +using Unity.Behavior; +using Unity.Properties; +using UnityEngine; + +using Action = Unity.Behavior.Action; + +/// +/// 현재 타겟이 살아 있는 유효 대상인지 확인하는 공통 체크 액션입니다. +/// +[Serializable, GeneratePropertyBag] +[NodeDescription( + name: "Validate Target", + story: "[Target]이 살아 있는 유효 대상인지 확인", + category: "Action", + id: "e9ec7a3b5a5447138ecf85ab0c57b21f")] +public partial class ValidateTargetAction : Action +{ + [SerializeReference] + public BlackboardVariable Target; + + protected override Status OnStart() + { + if (Target?.Value == null || !Target.Value.activeInHierarchy) + return Status.Failure; + + IDamageable damageable = Target.Value.GetComponent(); + return damageable != null && damageable.IsDead ? Status.Failure : Status.Success; + } +} diff --git a/Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs.meta b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs.meta new file mode 100644 index 00000000..eea79c12 --- /dev/null +++ b/Assets/_Game/Scripts/AI/BehaviorActions/Actions/ValidateTargetAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4108d806232628e43839703188adeae8 \ No newline at end of file diff --git a/Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs b/Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs new file mode 100644 index 00000000..39702278 --- /dev/null +++ b/Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs @@ -0,0 +1,304 @@ +using System; +using System.Collections; +using System.Linq; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace Colosseum.Editor +{ + /// + /// 드로그 Behavior Graph authoring 자산을 현재 BT 우선순위 구조로 재생성합니다. + /// + public static class RebuildDrogBehaviorAuthoringGraph + { + private const string GraphAssetPath = "Assets/_Game/AI/BT_Drog.asset"; + + [MenuItem("Tools/Colosseum/Rebuild Drog Behavior Authoring Graph")] + private static void Rebuild() + { + UnityEngine.Object graphAsset = AssetDatabase.LoadMainAssetAtPath(GraphAssetPath); + if (graphAsset == null) + { + Debug.LogError($"[DrogBTRebuild] 그래프 자산을 찾을 수 없습니다: {GraphAssetPath}"); + return; + } + + try + { + Type authoringGraphType = graphAsset.GetType(); + Assembly authoringAssembly = authoringGraphType.Assembly; + Assembly runtimeAssembly = typeof(Unity.Behavior.BehaviorGraph).Assembly; + + MethodInfo createNodeMethod = authoringGraphType.BaseType?.GetMethod("CreateNode", BindingFlags.Instance | BindingFlags.Public); + MethodInfo connectEdgeMethod = authoringGraphType.BaseType?.GetMethod("ConnectEdge", BindingFlags.Instance | BindingFlags.Public); + MethodInfo buildRuntimeGraphMethod = authoringGraphType.GetMethod("BuildRuntimeGraph", BindingFlags.Instance | BindingFlags.Public); + MethodInfo saveAssetMethod = authoringGraphType.BaseType?.GetMethod("SaveAsset", BindingFlags.Instance | BindingFlags.Public); + MethodInfo setAssetDirtyMethod = authoringGraphType.BaseType?.GetMethod("SetAssetDirty", BindingFlags.Instance | BindingFlags.Public); + MethodInfo getNodeInfoMethod = authoringAssembly.GetType("Unity.Behavior.NodeRegistry", true) + ?.GetMethod("GetInfo", BindingFlags.Static | BindingFlags.NonPublic); + + if (createNodeMethod == null || connectEdgeMethod == null || buildRuntimeGraphMethod == null || saveAssetMethod == null || setAssetDirtyMethod == null || getNodeInfoMethod == null) + { + Debug.LogError("[DrogBTRebuild] Behavior Authoring 리플렉션 메서드를 찾지 못했습니다."); + return; + } + + SerializedObject serializedObject = new SerializedObject(graphAsset); + SerializedProperty nodesProperty = serializedObject.FindProperty("m_Nodes"); + if (nodesProperty == null) + { + Debug.LogError("[DrogBTRebuild] m_Nodes 프로퍼티를 찾지 못했습니다."); + return; + } + + nodesProperty.ClearArray(); + serializedObject.ApplyModifiedPropertiesWithoutUndo(); + + object targetVariable = FindBlackboardVariableModel("Target"); + if (targetVariable == null) + { + Debug.LogError("[DrogBTRebuild] Target 블랙보드 변수를 찾지 못했습니다."); + return; + } + + object startNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.Start", true), new Vector2(420f, -620f)); + object repeatNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.RepeaterModifier", true), new Vector2(420f, -470f)); + object selectorNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SelectorComposite", true), new Vector2(420f, -280f)); + + object downSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(-620f, -40f)); + object leapSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(-220f, -40f)); + object slamSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(180f, -40f)); + object mainSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(580f, -40f)); + object slamFallbackSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(980f, -40f)); + object chaseSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(1380f, -40f)); + + object downSelectNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(SelectNearestDownedTargetAction), new Vector2(-740f, 240f)); + object downReadyNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckPunishPatternReadyAction), new Vector2(-620f, 240f)); + object downUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(UsePunishPatternAction), new Vector2(-500f, 240f)); + + object leapSelectNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(SelectTargetByDistanceAction), new Vector2(-340f, 240f)); + object leapReadyNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckMobilityPatternReadyAction), new Vector2(-220f, 240f)); + object leapUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(UseMobilityPatternAction), new Vector2(-100f, 240f)); + + object slamRefreshNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(RefreshPrimaryTargetAction), new Vector2(0f, 240f)); + object slamHasTargetNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(ValidateTargetAction), new Vector2(120f, 240f)); + object slamRangeNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckTargetInAttackRangeAction), new Vector2(240f, 240f)); + object slamTurnNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckSecondaryPatternTurnAction), new Vector2(360f, 240f)); + object slamReadyNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckSecondaryPatternReadyAction), new Vector2(480f, 240f)); + object slamUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(UseSecondaryPatternAction), new Vector2(600f, 240f)); + + object mainRefreshNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(RefreshPrimaryTargetAction), new Vector2(520f, 240f)); + object mainHasTargetNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(ValidateTargetAction), new Vector2(640f, 240f)); + object mainRangeNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckTargetInAttackRangeAction), new Vector2(760f, 240f)); + object mainReadyNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckPrimaryPatternReadyAction), new Vector2(880f, 240f)); + object mainUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(UsePrimaryPatternAction), new Vector2(1000f, 240f)); + + object fallbackRefreshNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(RefreshPrimaryTargetAction), new Vector2(920f, 240f)); + object fallbackHasTargetNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(ValidateTargetAction), new Vector2(1040f, 240f)); + object fallbackRangeNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckTargetInAttackRangeAction), new Vector2(1160f, 240f)); + object fallbackReadyNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckSecondaryPatternReadyAction), new Vector2(1280f, 240f)); + object fallbackUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(UseSecondaryPatternAction), new Vector2(1400f, 240f)); + + object chaseRefreshNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(RefreshPrimaryTargetAction), new Vector2(1320f, 240f)); + object chaseHasTargetNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(ValidateTargetAction), new Vector2(1440f, 240f)); + object chaseUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(ChaseTargetAction), new Vector2(1560f, 240f)); + + Connect(graphAsset, connectEdgeMethod, GetDefaultOutputPort(startNode), GetDefaultInputPort(repeatNode)); + Connect(graphAsset, connectEdgeMethod, GetDefaultOutputPort(repeatNode), GetDefaultInputPort(selectorNode)); + ConnectChildren(graphAsset, connectEdgeMethod, selectorNode, downSequence, leapSequence, slamSequence, mainSequence, slamFallbackSequence, chaseSequence); + + ConnectChildren(graphAsset, connectEdgeMethod, downSequence, downSelectNode, downReadyNode, downUseNode); + ConnectChildren(graphAsset, connectEdgeMethod, leapSequence, leapSelectNode, leapReadyNode, leapUseNode); + ConnectChildren(graphAsset, connectEdgeMethod, slamSequence, slamRefreshNode, slamHasTargetNode, slamRangeNode, slamTurnNode, slamReadyNode, slamUseNode); + ConnectChildren(graphAsset, connectEdgeMethod, mainSequence, mainRefreshNode, mainHasTargetNode, mainRangeNode, mainReadyNode, mainUseNode); + ConnectChildren(graphAsset, connectEdgeMethod, slamFallbackSequence, fallbackRefreshNode, fallbackHasTargetNode, fallbackRangeNode, fallbackReadyNode, fallbackUseNode); + ConnectChildren(graphAsset, connectEdgeMethod, chaseSequence, chaseRefreshNode, chaseHasTargetNode, chaseUseNode); + + LinkTarget(downSelectNode, targetVariable); + LinkTarget(downUseNode, targetVariable); + LinkTarget(leapSelectNode, targetVariable); + LinkTarget(leapUseNode, targetVariable); + LinkTarget(slamRefreshNode, targetVariable); + LinkTarget(slamHasTargetNode, targetVariable); + LinkTarget(slamRangeNode, targetVariable); + LinkTarget(slamUseNode, targetVariable); + LinkTarget(mainRefreshNode, targetVariable); + LinkTarget(mainHasTargetNode, targetVariable); + LinkTarget(mainRangeNode, targetVariable); + LinkTarget(mainUseNode, targetVariable); + LinkTarget(fallbackRefreshNode, targetVariable); + LinkTarget(fallbackHasTargetNode, targetVariable); + LinkTarget(fallbackRangeNode, targetVariable); + LinkTarget(fallbackUseNode, targetVariable); + LinkTarget(chaseRefreshNode, targetVariable); + LinkTarget(chaseHasTargetNode, targetVariable); + LinkTarget(chaseUseNode, targetVariable); + + SetStartRepeatFlags(startNode, repeat: true, allowMultipleRepeatsPerTick: false); + setAssetDirtyMethod.Invoke(graphAsset, new object[] { true }); + buildRuntimeGraphMethod.Invoke(graphAsset, new object[] { true }); + saveAssetMethod.Invoke(graphAsset, null); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + Debug.Log("[DrogBTRebuild] 드로그 Behavior Graph authoring 자산 재구성이 완료되었습니다."); + } + catch (Exception exception) + { + Debug.LogException(exception); + } + } + + private static object CreateNode(UnityEngine.Object graphAsset, MethodInfo createNodeMethod, MethodInfo getNodeInfoMethod, Type runtimeType, Vector2 position) + { + if (runtimeType == null) + throw new InvalidOperationException("[DrogBTRebuild] 런타임 타입이 null입니다."); + + object nodeInfo = getNodeInfoMethod.Invoke(null, new object[] { runtimeType }); + if (nodeInfo == null) + throw new InvalidOperationException($"[DrogBTRebuild] NodeInfo를 찾지 못했습니다: {runtimeType.FullName}"); + + Type nodeInfoType = nodeInfo.GetType(); + FieldInfo modelTypeField = nodeInfoType.GetField("ModelType", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + object serializableType = modelTypeField?.GetValue(nodeInfo); + PropertyInfo serializableTypeValueProperty = serializableType?.GetType().GetProperty("Type", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + Type modelType = serializableTypeValueProperty?.GetValue(serializableType) as Type; + if (modelType == null) + throw new InvalidOperationException($"[DrogBTRebuild] ModelType을 찾지 못했습니다: {runtimeType.FullName}"); + + return createNodeMethod.Invoke(graphAsset, new object[] { modelType, position, null, new object[] { nodeInfo } }); + } + + private static void ConnectChildren(UnityEngine.Object graphAsset, MethodInfo connectEdgeMethod, object parentNode, params object[] children) + { + object outputPort = GetDefaultOutputPort(parentNode); + for (int i = 0; i < children.Length; i++) + { + Connect(graphAsset, connectEdgeMethod, outputPort, GetDefaultInputPort(children[i])); + } + } + + private static void Connect(UnityEngine.Object graphAsset, MethodInfo connectEdgeMethod, object outputPort, object inputPort) + { + if (outputPort == null || inputPort == null) + throw new InvalidOperationException("[DrogBTRebuild] 포트 연결 대상이 null입니다."); + + connectEdgeMethod.Invoke(graphAsset, new[] { outputPort, inputPort }); + } + + private static object GetDefaultInputPort(object node) + { + return GetDefaultPort(node, "TryDefaultInputPortModel"); + } + + private static object GetDefaultOutputPort(object node) + { + return GetDefaultPort(node, "TryDefaultOutputPortModel"); + } + + private static object GetDefaultPort(object node, string methodName) + { + MethodInfo method = node.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public); + object[] parameters = { null }; + bool success = method != null && (bool)method.Invoke(node, parameters); + return success ? parameters[0] : null; + } + + private static object FindBlackboardVariableModel(string variableName) + { + UnityEngine.Object blackboardAsset = AssetDatabase.LoadAllAssetsAtPath(GraphAssetPath) + .FirstOrDefault(asset => asset != null && asset.GetType().Name.Contains("BehaviorBlackboardAuthoringAsset", StringComparison.Ordinal)); + + if (blackboardAsset == null) + return null; + + PropertyInfo variablesProperty = blackboardAsset.GetType().GetProperty("Variables", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + FieldInfo variablesField = blackboardAsset.GetType().GetField("m_Variables", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + IEnumerable variables = variablesProperty?.GetValue(blackboardAsset) as IEnumerable ?? variablesField?.GetValue(blackboardAsset) as IEnumerable; + if (variables == null) + return null; + + foreach (object variable in variables) + { + if (variable == null) + continue; + + PropertyInfo nameProperty = variable.GetType().GetProperty("Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + FieldInfo nameField = variable.GetType().GetField("Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + string name = nameProperty?.GetValue(variable) as string ?? nameField?.GetValue(variable) as string; + if (name == variableName) + return variable; + } + + return null; + } + + private static void LinkTarget(object node, object targetVariable) + { + LinkFieldToVariable(node, "Target", typeof(GameObject), targetVariable); + } + + private static void LinkFieldToVariable(object node, string fieldName, Type fieldType, object variableModel) + { + MethodInfo getVariableLinkMethod = node.GetType().GetMethod("GetVariableLink", BindingFlags.Instance | BindingFlags.Public); + object variableLink = getVariableLinkMethod?.Invoke(node, new object[] { fieldName, fieldType }); + if (variableLink != null) + { + PropertyInfo blackboardVariableProperty = variableLink.GetType().GetProperty("BlackboardVariable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + blackboardVariableProperty?.SetValue(variableLink, variableModel); + } + + object fieldModel = FindFieldModel(node, fieldName); + if (fieldModel == null) + return; + + PropertyInfo linkedVariableProperty = fieldModel.GetType().GetProperty("LinkedVariable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + FieldInfo linkedVariableField = fieldModel.GetType().GetField("LinkedVariable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + if (linkedVariableProperty != null && linkedVariableProperty.CanWrite) + { + linkedVariableProperty.SetValue(fieldModel, variableModel); + } + else + { + linkedVariableField?.SetValue(fieldModel, variableModel); + } + } + + private static object FindFieldModel(object node, string fieldName) + { + FieldInfo fieldValuesField = node.GetType().GetField("m_FieldValues", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + PropertyInfo fieldValuesProperty = node.GetType().GetProperty("FieldValues", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + IEnumerable fieldValues = fieldValuesField?.GetValue(node) as IEnumerable ?? fieldValuesProperty?.GetValue(node) as IEnumerable; + if (fieldValues == null) + return null; + + foreach (object fieldModel in fieldValues) + { + if (fieldModel == null) + continue; + + PropertyInfo fieldNameProperty = fieldModel.GetType().GetProperty("FieldName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + FieldInfo fieldNameField = fieldModel.GetType().GetField("FieldName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + string currentFieldName = fieldNameProperty?.GetValue(fieldModel) as string ?? fieldNameField?.GetValue(fieldModel) as string; + if (currentFieldName == fieldName) + return fieldModel; + } + + return null; + } + + private static void SetStartRepeatFlags(object startNode, bool repeat, bool allowMultipleRepeatsPerTick) + { + Type startNodeType = startNode.GetType(); + FieldInfo repeatField = startNodeType.GetField("Repeat", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + FieldInfo allowField = startNodeType.GetField("AllowMultipleRepeatsPerTick", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + repeatField?.SetValue(startNode, repeat); + allowField?.SetValue(startNode, allowMultipleRepeatsPerTick); + } + } +} diff --git a/Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs.meta b/Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs.meta new file mode 100644 index 00000000..870b9918 --- /dev/null +++ b/Assets/_Game/Scripts/Editor/RebuildDrogBehaviorAuthoringGraph.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 32898a7b79779e04d8dea1e3530df132 \ No newline at end of file diff --git a/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs b/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs new file mode 100644 index 00000000..983c5529 --- /dev/null +++ b/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs @@ -0,0 +1,520 @@ +using System.Collections; +using System.Collections.Generic; + +using Colosseum.AI; +using Colosseum.Combat; +using Colosseum.Player; +using Colosseum.Skills; + +using Unity.Behavior; +using Unity.Netcode; +using UnityEngine; +using UnityEngine.Serialization; + +namespace Colosseum.Enemy +{ + /// + /// 보스 공통 전투 BT가 참조하는 전투 컨텍스트입니다. + /// 패턴 슬롯, 거리 기준, 페이즈별 주기, 공통 타겟 판정 정보를 제공합니다. + /// + [DisallowMultipleComponent] + [RequireComponent(typeof(BossEnemy))] + [RequireComponent(typeof(SkillController))] + public abstract class BossCombatBehaviorContext : NetworkBehaviour + { + [Header("References")] + [SerializeField] protected BossEnemy bossEnemy; + [SerializeField] protected EnemyBase enemyBase; + [SerializeField] protected SkillController skillController; + [SerializeField] protected UnityEngine.AI.NavMeshAgent navMeshAgent; + [SerializeField] protected BehaviorGraphAgent behaviorGraphAgent; + + [Header("Pattern Data")] + [Tooltip("기본 근접 압박 패턴")] + [FormerlySerializedAs("mainPattern")] + [SerializeField] protected BossPatternData primaryPattern; + + [Tooltip("보조 근접 압박 패턴")] + [FormerlySerializedAs("slamPattern")] + [SerializeField] protected BossPatternData secondaryPattern; + + [Tooltip("기동 또는 거리 징벌 패턴")] + [FormerlySerializedAs("leapPattern")] + [SerializeField] protected BossPatternData mobilityPattern; + + [Tooltip("특정 상황에서 우선 발동하는 징벌 패턴")] + [FormerlySerializedAs("downPunishPattern")] + [SerializeField] protected BossPatternData punishPattern; + + [Header("Phase Thresholds")] + [Tooltip("2페이즈 진입 체력 비율")] + [Range(0f, 1f)] [SerializeField] protected float phase2HealthThreshold = 0.75f; + + [Tooltip("3페이즈 진입 체력 비율")] + [Range(0f, 1f)] [SerializeField] protected float phase3HealthThreshold = 0.4f; + + [Header("Targeting")] + [Tooltip("타겟 재탐색 주기")] + [FormerlySerializedAs("targetRefreshInterval")] + [Min(0.05f)] [SerializeField] protected float primaryTargetRefreshInterval = 0.2f; + + [Tooltip("기동 패턴을 고려하기 시작하는 거리")] + [FormerlySerializedAs("leapDistanceThreshold")] + [Min(0f)] [SerializeField] protected float mobilityTriggerDistance = 8f; + + [Tooltip("징벌 패턴을 고려할 최대 반경")] + [FormerlySerializedAs("downPunishSearchRadius")] + [Min(0f)] [SerializeField] protected float punishSearchRadius = 6f; + + [Header("Pattern Cadence")] + [Tooltip("1페이즈에서 몇 번의 근접 패턴마다 보조 패턴을 섞을지")] + [FormerlySerializedAs("phase1SlamInterval")] + [Min(1)] [SerializeField] protected int phase1SecondaryInterval = 3; + + [Tooltip("2페이즈에서 몇 번의 근접 패턴마다 보조 패턴을 섞을지")] + [FormerlySerializedAs("phase2SlamInterval")] + [Min(1)] [SerializeField] protected int phase2SecondaryInterval = 2; + + [Tooltip("3페이즈에서 몇 번의 근접 패턴마다 보조 패턴을 섞을지")] + [FormerlySerializedAs("phase3SlamInterval")] + [Min(1)] [SerializeField] protected int phase3SecondaryInterval = 2; + + [Header("Behavior")] + [Tooltip("전용 컨텍스트 사용 시 기존 BehaviorGraph를 비활성화할지 여부")] + [SerializeField] protected bool disableBehaviorGraph = true; + + [Tooltip("디버그 로그 출력 여부")] + [SerializeField] protected bool debugMode = false; + + protected readonly Dictionary patternCooldownTracker = new Dictionary(); + + protected Coroutine activePatternCoroutine; + protected GameObject currentTarget; + protected float nextTargetRefreshTime; + protected int meleePatternCounter; + + /// + /// 전용 컨텍스트 사용 시 BehaviorGraph를 비활성화할지 여부 + /// + public bool DisableBehaviorGraph => disableBehaviorGraph; + + /// + /// 기동 패턴을 고려하는 최소 거리 + /// + public float MobilityTriggerDistance => mobilityTriggerDistance; + + /// + /// 징벌 패턴을 고려하는 최대 반경 + /// + public float PunishSearchRadius => punishSearchRadius; + + /// + /// 디버그 로그 출력 여부 + /// + public bool DebugModeEnabled => debugMode; + + /// + /// 현재 보스 패턴 페이즈 + /// + public int CurrentPatternPhase + { + get + { + float healthRatio = bossEnemy != null && bossEnemy.MaxHealth > 0f + ? bossEnemy.CurrentHealth / bossEnemy.MaxHealth + : 1f; + + if (healthRatio <= phase3HealthThreshold) + return 3; + + if (healthRatio <= phase2HealthThreshold) + return 2; + + return 1; + } + } + + protected virtual void Awake() + { + ResolveReferences(); + } + + public override void OnNetworkSpawn() + { + ResolveReferences(); + + if (!IsServer) + enabled = false; + } + + protected virtual void Update() + { + if (!IsServer) + return; + + ResolveReferences(); + if (bossEnemy == null || enemyBase == null || skillController == null) + return; + + if (bossEnemy.IsDead || bossEnemy.IsTransitioning) + return; + + if (!disableBehaviorGraph) + return; + + RefreshTargetIfNeeded(); + UpdateMovement(); + + if (skillController.IsPlayingAnimation) + return; + + if (TryStartMobilityPattern()) + return; + + TryStartPrimaryLoopPattern(); + } + + /// + /// 현재 역할의 패턴 데이터를 반환합니다. + /// + public BossPatternData GetPattern(BossCombatPatternRole role) + { + return role switch + { + BossCombatPatternRole.Primary => primaryPattern, + BossCombatPatternRole.Secondary => secondaryPattern, + BossCombatPatternRole.Mobility => mobilityPattern, + BossCombatPatternRole.Punish => punishPattern, + _ => null, + }; + } + + /// + /// 다음 근접 패턴 차례가 보조 패턴인지 여부 + /// + public bool IsNextSecondaryPattern() + { + int secondaryInterval = GetSecondaryIntervalForPhase(CurrentPatternPhase); + if (secondaryInterval <= 1) + return true; + + return (meleePatternCounter + 1) % secondaryInterval == 0; + } + + /// + /// 현재 페이즈 기준의 보조 근접 패턴 주기를 반환합니다. + /// + public int GetSecondaryIntervalForPhase(int phase) + { + return phase switch + { + 1 => Mathf.Max(1, phase1SecondaryInterval), + 2 => Mathf.Max(1, phase2SecondaryInterval), + _ => Mathf.Max(1, phase3SecondaryInterval), + }; + } + + /// + /// 근접 패턴 사용 카운터를 갱신합니다. + /// + public void RegisterPatternUse(BossCombatPatternRole role) + { + if (!role.IsMeleeRole()) + return; + + meleePatternCounter++; + } + + /// + /// 살아 있는 적대 대상인지 확인합니다. + /// + public bool IsValidHostileTarget(GameObject candidate) + { + if (candidate == null || !candidate.activeInHierarchy) + return false; + + if (Team.IsSameTeam(gameObject, candidate)) + return false; + + IDamageable damageable = candidate.GetComponent(); + return damageable == null || !damageable.IsDead; + } + + /// + /// 기동 패턴 대상으로 유효한지 확인합니다. + /// + public bool IsValidMobilityTarget(GameObject candidate) + { + if (!IsValidHostileTarget(candidate)) + return false; + + float maxDistance = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AggroRange : 20f; + float distance = Vector3.Distance(transform.position, candidate.transform.position); + return distance >= mobilityTriggerDistance && distance <= maxDistance; + } + + /// + /// 기동 패턴 대상으로 사용할 수 있는 가장 먼 유효 타겟을 찾습니다. + /// + public GameObject FindMobilityTarget() + { + GameObject[] candidates = GameObject.FindGameObjectsWithTag("Player"); + GameObject farthestTarget = null; + float bestDistance = mobilityTriggerDistance; + float maxDistance = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AggroRange : 20f; + + for (int i = 0; i < candidates.Length; i++) + { + GameObject candidate = candidates[i]; + if (!IsValidMobilityTarget(candidate)) + continue; + + float distance = Vector3.Distance(transform.position, candidate.transform.position); + if (distance > maxDistance || distance <= bestDistance) + continue; + + bestDistance = distance; + farthestTarget = candidate; + } + + return farthestTarget; + } + + /// + /// 가장 가까운 생존 플레이어를 찾습니다. + /// + public GameObject FindNearestLivingTarget() + { + PlayerNetworkController[] players = FindObjectsByType(FindObjectsSortMode.None); + + GameObject nearestTarget = null; + float nearestDistance = float.MaxValue; + float aggroRange = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity; + + for (int i = 0; i < players.Length; i++) + { + PlayerNetworkController player = players[i]; + if (player == null || player.IsDead || !player.gameObject.activeInHierarchy) + continue; + + GameObject candidate = player.gameObject; + if (!IsValidHostileTarget(candidate)) + continue; + + float distance = Vector3.Distance(transform.position, candidate.transform.position); + if (distance > aggroRange || distance >= nearestDistance) + continue; + + nearestDistance = distance; + nearestTarget = candidate; + } + + return nearestTarget; + } + + /// + /// 로그를 출력합니다. + /// + public void LogDebug(string source, string message) + { + if (debugMode) + Debug.Log($"[{source}] {message}"); + } + + protected virtual bool TryStartPrimaryLoopPattern() + { + if (currentTarget == null) + return false; + + float distanceToTarget = Vector3.Distance(transform.position, currentTarget.transform.position); + float attackRange = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AttackRange : 2f; + if (distanceToTarget > attackRange + 0.25f) + return false; + + BossPatternData selectedPattern = SelectPrimaryLoopPattern(); + if (selectedPattern == null) + return false; + + StartPattern(selectedPattern, currentTarget); + return true; + } + + protected virtual bool TryStartMobilityPattern() + { + BossPatternData pattern = GetPattern(BossCombatPatternRole.Mobility); + if (!IsPatternReady(pattern)) + return false; + + GameObject target = FindMobilityTarget(); + if (target == null) + return false; + + currentTarget = target; + StartPattern(pattern, target); + return true; + } + + protected virtual BossPatternData SelectPrimaryLoopPattern() + { + BossPatternData primary = GetPattern(BossCombatPatternRole.Primary); + BossPatternData secondary = GetPattern(BossCombatPatternRole.Secondary); + + bool canUsePrimary = IsPatternReady(primary); + bool canUseSecondary = IsPatternReady(secondary); + + if (canUseSecondary && IsNextSecondaryPattern()) + { + meleePatternCounter++; + return secondary; + } + + if (canUsePrimary) + { + meleePatternCounter++; + return primary; + } + + if (canUseSecondary) + { + meleePatternCounter++; + return secondary; + } + + return null; + } + + protected virtual void StartPattern(BossPatternData pattern, GameObject target) + { + if (pattern == null || activePatternCoroutine != null) + return; + + LogDebug(GetType().Name, $"패턴 시작: {pattern.PatternName} / Target={(target != null ? target.name : "None")} / Phase={CurrentPatternPhase}"); + activePatternCoroutine = StartCoroutine(RunPatternCoroutine(pattern, target)); + } + + protected virtual IEnumerator RunPatternCoroutine(BossPatternData pattern, GameObject target) + { + StopMovement(); + bool completed = true; + + for (int i = 0; i < pattern.Steps.Count; i++) + { + PatternStep step = pattern.Steps[i]; + if (step.Type == PatternStepType.Wait) + { + yield return new WaitForSeconds(step.Duration); + continue; + } + + if (step.Skill == null) + { + completed = false; + Debug.LogWarning($"[{GetType().Name}] 패턴 스텝 스킬이 비어 있습니다. Pattern={pattern.PatternName}, Index={i}"); + break; + } + + if (step.Skill.JumpToTarget && target != null) + { + enemyBase?.SetJumpTarget(target.transform.position); + } + + if (!skillController.ExecuteSkill(step.Skill)) + { + completed = false; + LogDebug(GetType().Name, $"스킬 실행 실패: {step.Skill.SkillName}"); + break; + } + + yield return new WaitUntil(() => skillController == null || !skillController.IsPlayingAnimation || bossEnemy == null || bossEnemy.IsDead); + if (bossEnemy == null || bossEnemy.IsDead) + break; + } + + if (completed) + { + patternCooldownTracker[pattern] = Time.time + pattern.Cooldown; + } + + activePatternCoroutine = null; + currentTarget = target; + } + + protected bool IsPatternReady(BossPatternData pattern) + { + if (pattern == null || pattern.Steps == null || pattern.Steps.Count == 0) + return false; + + if (!patternCooldownTracker.TryGetValue(pattern, out float readyTime)) + return true; + + return Time.time >= readyTime; + } + + protected virtual void RefreshTargetIfNeeded() + { + if (Time.time < nextTargetRefreshTime) + return; + + nextTargetRefreshTime = Time.time + primaryTargetRefreshInterval; + GameObject highestThreatTarget = enemyBase.GetHighestThreatTarget(currentTarget, null, enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity); + currentTarget = highestThreatTarget != null ? highestThreatTarget : FindNearestLivingTarget(); + } + + protected virtual void UpdateMovement() + { + if (navMeshAgent == null || !navMeshAgent.enabled) + return; + + if (skillController != null && skillController.IsPlayingAnimation) + { + StopMovement(); + return; + } + + if (currentTarget == null) + { + StopMovement(); + return; + } + + float attackRange = enemyBase != null && enemyBase.Data != null ? enemyBase.Data.AttackRange : 2f; + float distanceToTarget = Vector3.Distance(transform.position, currentTarget.transform.position); + if (distanceToTarget <= attackRange) + { + StopMovement(); + return; + } + + navMeshAgent.isStopped = false; + navMeshAgent.stoppingDistance = attackRange; + navMeshAgent.SetDestination(currentTarget.transform.position); + } + + protected void StopMovement() + { + if (navMeshAgent == null || !navMeshAgent.enabled) + return; + + navMeshAgent.isStopped = true; + navMeshAgent.ResetPath(); + } + + protected virtual void ResolveReferences() + { + if (bossEnemy == null) + bossEnemy = GetComponent(); + + if (enemyBase == null) + enemyBase = GetComponent(); + + if (skillController == null) + skillController = GetComponent(); + + if (navMeshAgent == null) + navMeshAgent = GetComponent(); + + if (behaviorGraphAgent == null) + behaviorGraphAgent = GetComponent(); + } + } +} diff --git a/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs.meta b/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs.meta new file mode 100644 index 00000000..811a0b3f --- /dev/null +++ b/Assets/_Game/Scripts/Enemy/BossCombatBehaviorContext.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3568a8ab7f49c5242a8f7c4bc655b68d \ No newline at end of file diff --git a/Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs b/Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs new file mode 100644 index 00000000..cd6c2e4c --- /dev/null +++ b/Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs @@ -0,0 +1,27 @@ +namespace Colosseum.Enemy +{ + /// + /// 보스 전투 BT에서 사용하는 공통 패턴 역할 구분값입니다. + /// + public enum BossCombatPatternRole + { + Primary = 0, + Secondary = 1, + Mobility = 2, + Punish = 3, + } + + /// + /// 공통 패턴 역할 보조 확장 메서드입니다. + /// + public static class BossCombatPatternRoleExtensions + { + /// + /// 현재 역할이 근접 순환 패턴인지 반환합니다. + /// + public static bool IsMeleeRole(this BossCombatPatternRole role) + { + return role == BossCombatPatternRole.Primary || role == BossCombatPatternRole.Secondary; + } + } +} diff --git a/Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs.meta b/Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs.meta new file mode 100644 index 00000000..30934732 --- /dev/null +++ b/Assets/_Game/Scripts/Enemy/BossCombatPatternRole.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ee34c0af35cdfbd45baf0a6b9dcc2dd9 \ No newline at end of file diff --git a/Assets/_Game/Scripts/Enemy/BossEnemy.cs b/Assets/_Game/Scripts/Enemy/BossEnemy.cs index 1dcc43c1..4a92b084 100644 --- a/Assets/_Game/Scripts/Enemy/BossEnemy.cs +++ b/Assets/_Game/Scripts/Enemy/BossEnemy.cs @@ -33,7 +33,7 @@ namespace Colosseum.Enemy // 컴포넌트 private BehaviorGraphAgent behaviorAgent; - private DrogPatternController drogPatternController; + private BossCombatBehaviorContext combatBehaviorContext; // 페이즈 상태 private int currentPhaseIndex = 0; @@ -78,10 +78,10 @@ namespace Colosseum.Enemy behaviorAgent = gameObject.AddComponent(); } - drogPatternController = GetComponent(); + combatBehaviorContext = GetComponent(); // 초기 AI 설정 - if (IsServer && drogPatternController != null && drogPatternController.DisableBehaviorGraph) + if (IsServer && combatBehaviorContext != null && combatBehaviorContext.DisableBehaviorGraph) { behaviorAgent.enabled = false; behaviorAgent.Graph = null; diff --git a/Assets/_Game/Scripts/Enemy/DrogPatternController.cs b/Assets/_Game/Scripts/Enemy/DrogPatternController.cs index d2b483f4..7c7a618e 100644 --- a/Assets/_Game/Scripts/Enemy/DrogPatternController.cs +++ b/Assets/_Game/Scripts/Enemy/DrogPatternController.cs @@ -1,408 +1,10 @@ -using System.Collections; -using System.Collections.Generic; - -using UnityEngine; -using Unity.Netcode; - -using Colosseum.AI; -using Colosseum.Player; -using Colosseum.Skills; - namespace Colosseum.Enemy { /// - /// 드로그 전용 패턴 선택 컨트롤러입니다. - /// 기본 루프, 도약, 다운 추가타 같은 고우선 패턴을 직접 선택합니다. + /// 드로그가 사용하는 보스 전투 컨텍스트 컴포넌트입니다. + /// 현재는 공통 보스 전투 BT 프레임워크를 그대로 사용합니다. /// - [DisallowMultipleComponent] - [RequireComponent(typeof(BossEnemy))] - [RequireComponent(typeof(SkillController))] - public class DrogPatternController : NetworkBehaviour + public class DrogPatternController : BossCombatBehaviorContext { - [Header("References")] - [SerializeField] private BossEnemy bossEnemy; - [SerializeField] private EnemyBase enemyBase; - [SerializeField] private SkillController skillController; - [SerializeField] private UnityEngine.AI.NavMeshAgent navMeshAgent; - - [Header("Pattern Data")] - [Tooltip("기본 근접 압박 패턴")] - [SerializeField] private BossPatternData mainPattern; - - [Tooltip("먼 대상 징벌용 도약 패턴")] - [SerializeField] private BossPatternData leapPattern; - - [Tooltip("다운 대상이 있을 때 우선 발동하는 광역 추가타 패턴")] - [SerializeField] private BossPatternData downPunishPattern; - - [Header("Phase Thresholds")] - [Tooltip("2페이즈 진입 체력 비율")] - [Range(0f, 1f)] [SerializeField] private float phase2HealthThreshold = 0.75f; - - [Tooltip("3페이즈 진입 체력 비율")] - [Range(0f, 1f)] [SerializeField] private float phase3HealthThreshold = 0.4f; - - [Header("Targeting")] - [Tooltip("타겟 재탐색 주기")] - [Min(0.05f)] [SerializeField] private float targetRefreshInterval = 0.2f; - - [Tooltip("도약 패턴을 고려하기 시작하는 거리")] - [Min(0f)] [SerializeField] private float leapDistanceThreshold = 8f; - - [Tooltip("다운 추가타를 고려할 최대 반경")] - [Min(0f)] [SerializeField] private float downPunishSearchRadius = 6f; - - [Header("Behavior")] - [Tooltip("드로그 전용 컨트롤러 사용 시 기존 BehaviorGraph를 비활성화할지 여부")] - [SerializeField] private bool disableBehaviorGraph = true; - - [Tooltip("디버그 로그 출력 여부")] - [SerializeField] private bool debugMode = false; - - private readonly Dictionary patternCooldownTracker = new Dictionary(); - - private Coroutine activePatternCoroutine; - private GameObject currentTarget; - private float nextTargetRefreshTime; - - /// - /// 드로그 컨트롤러 사용 시 BehaviorGraph를 비활성화할지 여부 - /// - public bool DisableBehaviorGraph => disableBehaviorGraph; - - /// - /// 현재 전용 패턴 실행 중인지 여부 - /// - public bool IsExecutingPattern => activePatternCoroutine != null; - - /// - /// 현재 드로그 패턴 페이즈 - /// - public int CurrentPatternPhase - { - get - { - float healthRatio = bossEnemy != null && bossEnemy.MaxHealth > 0f - ? bossEnemy.CurrentHealth / bossEnemy.MaxHealth - : 1f; - - if (healthRatio <= phase3HealthThreshold) - return 3; - - if (healthRatio <= phase2HealthThreshold) - return 2; - - return 1; - } - } - - private void Awake() - { - ResolveReferences(); - } - - public override void OnNetworkSpawn() - { - ResolveReferences(); - - if (!IsServer) - { - enabled = false; - } - } - - private void Update() - { - if (!IsServer) - return; - - ResolveReferences(); - - if (bossEnemy == null || enemyBase == null || skillController == null) - return; - - if (bossEnemy.IsDead || bossEnemy.IsTransitioning) - return; - - RefreshTargetIfNeeded(); - UpdateMovement(); - - if (activePatternCoroutine != null || skillController.IsPlayingAnimation) - return; - - if (TryStartDownPunishPattern()) - return; - - TryStartMainPattern(); - } - - private bool TryStartDownPunishPattern() - { - if (!IsPatternReady(downPunishPattern)) - return false; - - GameObject downedTarget = FindNearestDownedTarget(); - if (downedTarget == null) - return false; - - StartPattern(downPunishPattern, downedTarget); - return true; - } - - private bool TryStartMainPattern() - { - if (currentTarget == null) - return false; - - float distanceToTarget = Vector3.Distance(transform.position, currentTarget.transform.position); - - if (distanceToTarget >= leapDistanceThreshold && IsPatternReady(leapPattern)) - { - StartPattern(leapPattern, currentTarget); - return true; - } - - float attackRange = enemyBase.Data != null ? enemyBase.Data.AttackRange : 2f; - if (distanceToTarget <= attackRange + 0.25f && IsPatternReady(mainPattern)) - { - StartPattern(mainPattern, currentTarget); - return true; - } - - return false; - } - - private void StartPattern(BossPatternData pattern, GameObject target) - { - if (pattern == null || activePatternCoroutine != null) - return; - - if (debugMode) - { - string targetName = target != null ? target.name : "None"; - Debug.Log($"[DrogPattern] 패턴 시작: {pattern.PatternName} / Target={targetName} / Phase={CurrentPatternPhase}"); - } - - activePatternCoroutine = StartCoroutine(RunPatternCoroutine(pattern, target)); - } - - private IEnumerator RunPatternCoroutine(BossPatternData pattern, GameObject target) - { - StopMovement(); - - bool completed = true; - BossPatternData chainedPattern = null; - GameObject chainedTarget = null; - - for (int i = 0; i < pattern.Steps.Count; i++) - { - PatternStep step = pattern.Steps[i]; - - if (step.Type == PatternStepType.Wait) - { - yield return new WaitForSeconds(step.Duration); - continue; - } - - if (step.Skill == null) - { - completed = false; - Debug.LogWarning($"[DrogPattern] 패턴 스텝 스킬이 비어 있습니다. Pattern={pattern.PatternName}, Index={i}"); - break; - } - - if (step.Skill.JumpToTarget && target != null) - { - enemyBase?.SetJumpTarget(target.transform.position); - } - - if (!skillController.ExecuteSkill(step.Skill)) - { - completed = false; - if (debugMode) - { - Debug.LogWarning($"[DrogPattern] 스킬 실행 실패: {step.Skill.SkillName}"); - } - break; - } - - yield return new WaitUntil(() => skillController == null || !skillController.IsPlayingAnimation || bossEnemy == null || bossEnemy.IsDead); - - if (bossEnemy == null || bossEnemy.IsDead) - { - completed = false; - break; - } - - if (pattern != downPunishPattern && TryPrepareDownPunishChain(out chainedTarget)) - { - chainedPattern = downPunishPattern; - break; - } - } - - if (completed) - { - patternCooldownTracker[pattern] = Time.time + pattern.Cooldown; - } - - activePatternCoroutine = null; - - if (chainedPattern != null && chainedTarget != null && bossEnemy != null && !bossEnemy.IsDead) - { - StartPattern(chainedPattern, chainedTarget); - } - } - - private bool IsPatternReady(BossPatternData pattern) - { - if (pattern == null || pattern.Steps == null || pattern.Steps.Count == 0) - return false; - - if (!patternCooldownTracker.TryGetValue(pattern, out float readyTime)) - return true; - - return Time.time >= readyTime; - } - - private void RefreshTargetIfNeeded() - { - if (Time.time < nextTargetRefreshTime) - return; - - nextTargetRefreshTime = Time.time + targetRefreshInterval; - - GameObject highestThreatTarget = enemyBase.GetHighestThreatTarget(currentTarget, null, enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity); - currentTarget = highestThreatTarget != null ? highestThreatTarget : FindNearestLivingPlayer(); - } - - private void UpdateMovement() - { - if (navMeshAgent == null || !navMeshAgent.enabled) - return; - - if (activePatternCoroutine != null || (skillController != null && skillController.IsPlayingAnimation)) - { - StopMovement(); - return; - } - - if (currentTarget == null) - { - StopMovement(); - return; - } - - float attackRange = enemyBase.Data != null ? enemyBase.Data.AttackRange : 2f; - float distanceToTarget = Vector3.Distance(transform.position, currentTarget.transform.position); - if (distanceToTarget <= attackRange) - { - StopMovement(); - return; - } - - navMeshAgent.isStopped = false; - navMeshAgent.SetDestination(currentTarget.transform.position); - } - - private void StopMovement() - { - if (navMeshAgent == null || !navMeshAgent.enabled) - return; - - navMeshAgent.isStopped = true; - navMeshAgent.ResetPath(); - } - - private GameObject FindNearestDownedTarget() - { - HitReactionController[] hitReactionControllers = FindObjectsByType(FindObjectsSortMode.None); - - GameObject bestTarget = null; - float bestDistance = float.MaxValue; - - for (int i = 0; i < hitReactionControllers.Length; i++) - { - HitReactionController controller = hitReactionControllers[i]; - if (controller == null || !controller.IsDowned) - continue; - - GameObject candidate = controller.gameObject; - if (candidate == null || !candidate.activeInHierarchy || Team.IsSameTeam(gameObject, candidate)) - continue; - - float distance = Vector3.Distance(transform.position, candidate.transform.position); - if (distance > downPunishSearchRadius || distance >= bestDistance) - continue; - - bestDistance = distance; - bestTarget = candidate; - } - - return bestTarget; - } - - private bool TryPrepareDownPunishChain(out GameObject downedTarget) - { - downedTarget = null; - - if (!IsPatternReady(downPunishPattern)) - return false; - - downedTarget = FindNearestDownedTarget(); - if (downedTarget == null) - return false; - - if (debugMode) - { - Debug.Log($"[DrogPattern] 다운 대상 감지, 다운 추가타 연계 준비: {downedTarget.name}"); - } - - return true; - } - - private GameObject FindNearestLivingPlayer() - { - PlayerNetworkController[] players = FindObjectsByType(FindObjectsSortMode.None); - - GameObject bestTarget = null; - float bestDistance = float.MaxValue; - float aggroRange = enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity; - - for (int i = 0; i < players.Length; i++) - { - PlayerNetworkController player = players[i]; - if (player == null || player.IsDead || !player.gameObject.activeInHierarchy) - continue; - - GameObject candidate = player.gameObject; - if (Team.IsSameTeam(gameObject, candidate)) - continue; - - float distance = Vector3.Distance(transform.position, candidate.transform.position); - if (distance > aggroRange || distance >= bestDistance) - continue; - - bestDistance = distance; - bestTarget = candidate; - } - - return bestTarget; - } - - private void ResolveReferences() - { - if (bossEnemy == null) - bossEnemy = GetComponent(); - - if (enemyBase == null) - enemyBase = GetComponent(); - - if (skillController == null) - skillController = GetComponent(); - - if (navMeshAgent == null) - navMeshAgent = GetComponent(); - } } } diff --git a/Tools/Reload-Obsidian.ps1 b/Tools/Reload-Obsidian.ps1 new file mode 100644 index 00000000..956fcbca --- /dev/null +++ b/Tools/Reload-Obsidian.ps1 @@ -0,0 +1,13 @@ +param( + [string]$VaultName = "Obsidian Vault" +) + +$obsidianPath = "C:\Program Files\Obsidian\Obsidian.exe" + +if (-not (Test-Path $obsidianPath)) +{ + Write-Error "Obsidian.exe를 찾을 수 없습니다: $obsidianPath" + exit 1 +} + +& $obsidianPath reload vault=$VaultName