#23 디펜스 Ai 보완

This commit is contained in:
NTG_Lenovo 2023-09-18 14:02:11 +09:00
parent b342cb3adf
commit 08233a9f1e
15 changed files with 647748 additions and 647644 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
using BehaviorDesigner.Runtime.Tasks;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[TaskCategory("Custom/EnemyAction")]
public class BeAttackedOfEnemy : EnemyAction
{
public override TaskStatus OnUpdate()
{
if (enemyAi.GetCombatAgent().pathPending || enemyAi.GetCombatAgent().remainingDistance > enemyAi.GetCombatAgent().stoppingDistance)
{
return TaskStatus.Running;
}
enemyAi.SetBeAttacked(false, true);
return TaskStatus.Success;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d11582d2ef4686a45b306c5a93d70bb6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,19 @@
using BehaviorDesigner.Runtime.Tasks;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[TaskCategory("Custom/EnemyAction")]
public class ReturnDefensePosOfEnemy : EnemyAction
{
public override void OnStart()
{
enemyAi.ReturnDefensePos(enemyAi.GetDefensePos());
}
public override TaskStatus OnUpdate()
{
return TaskStatus.Success;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0984e3cb3464c4247922ba7d9eae2b71
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -8,7 +8,7 @@ namespace BlueWaterProject
{ {
public override void OnStart() public override void OnStart()
{ {
pirateAi.MoveTarget(pirateAi.GetTargetTransform().position); pirateAi.MoveTarget(pirateAi.GetTargetTransform().position, GlobalValue.MAXIMUM_STOP_DISTANCE);
} }
public override TaskStatus OnUpdate() public override TaskStatus OnUpdate()

View File

@ -45,7 +45,7 @@ namespace BlueWaterProject
#region Abstract methods #region Abstract methods
protected abstract void SetLayer(); protected abstract void SetLayer();
protected abstract void SetCurrentHp(float value); protected abstract void SetCurrentHp(float value, bool useBehaviorTreeVariable = false);
protected abstract void RemoveAiListElement(); protected abstract void RemoveAiListElement();
public abstract void FindTarget(); public abstract void FindTarget();
public abstract bool CanAttack(); public abstract bool CanAttack();
@ -122,10 +122,11 @@ namespace BlueWaterProject
behaviorTree.EnableBehavior(); behaviorTree.EnableBehavior();
} }
public void MoveTarget(Vector3 targetPos) public void MoveTarget(Vector3 targetPos, float stopDistance)
{ {
if (Vector3.Distance(combatAgent.destination, targetPos) < 0.1f) return; if (Vector3.Distance(combatAgent.destination, targetPos) < 0.1f) return;
combatAgent.stoppingDistance = stopDistance;
combatAgent.SetDestination(targetPos); combatAgent.SetDestination(targetPos);
} }
@ -145,12 +146,13 @@ namespace BlueWaterProject
} }
} }
public void SetTargetTransform(Transform value) public void SetTargetTransform(Transform value, bool useBehaviorTreeVariable = false)
{ {
targetTransform = value; targetTransform = value;
var btTargetTransform = behaviorTree.GetVariable("TargetTransform"); if (!useBehaviorTreeVariable) return;
btTargetTransform?.SetValue(value);
Utils.SetBehaviorVariable(behaviorTree, "TargetTransform", value);
} }
public void Die() public void Die()
@ -184,6 +186,7 @@ namespace BlueWaterProject
public void SetDefendingIslandInfo(IslandInfo info) => defendingIslandInfo = info; public void SetDefendingIslandInfo(IslandInfo info) => defendingIslandInfo = info;
public Transform GetTargetTransform() => targetTransform; public Transform GetTargetTransform() => targetTransform;
public Vector3 GetDefensePos() => defensePos; public Vector3 GetDefensePos() => defensePos;
public NavMeshAgent GetCombatAgent() => combatAgent;
#endregion #endregion
} }

View File

@ -15,6 +15,7 @@ namespace BlueWaterProject
[field: SerializeField] public EnemyStat EnemyStat { get; set; } [field: SerializeField] public EnemyStat EnemyStat { get; set; }
protected bool isAttackCoroutine; protected bool isAttackCoroutine;
private bool beAttacked;
private EnemyUnit enemyUnit; private EnemyUnit enemyUnit;
private int childNum; private int childNum;
@ -62,7 +63,7 @@ namespace BlueWaterProject
public void TakeDamage(float attackerPower, float attackerShieldPenetrationRate, Vector3? attackPos = null) public void TakeDamage(float attackerPower, float attackerShieldPenetrationRate, Vector3? attackPos = null)
{ {
if (attackPos != null && combatAgent.enabled && EnemyStat.AttackerType == EAttackerType.DEFENSE && !targetTransform) if (attackPos != null && EnemyStat.AttackerType == EAttackerType.DEFENSE && !targetTransform)
{ {
BeAttackedMovement((Vector3)attackPos); BeAttackedMovement((Vector3)attackPos);
} }
@ -103,7 +104,7 @@ namespace BlueWaterProject
return; return;
} }
var changeHp = Mathf.Max(EnemyStat.CurrentHp - finalDamage, 0); var changeHp = Mathf.Max(EnemyStat.CurrentHp - finalDamage, 0);
SetCurrentHp(changeHp); SetCurrentHp(changeHp, true);
// 죽었는지 체크 // 죽었는지 체크
if (changeHp == 0f) return; if (changeHp == 0f) return;
@ -154,13 +155,14 @@ namespace BlueWaterProject
InitViewModel(enemyViewData); InitViewModel(enemyViewData);
SetBehaviorTree(UnitManager.Inst.EnemyBehaviorTree); SetBehaviorTree(UnitManager.Inst.EnemyBehaviorTree);
SetCurrentHp(EnemyStat.MaxHp); SetCurrentHp(EnemyStat.MaxHp, true);
SetMoveSpeed(EnemyStat.MoveSpd); SetMoveSpeed(EnemyStat.MoveSpd);
childNum = enemyUnit.transform.GetSiblingIndex();
if (EnemyStat.AttackerType == EAttackerType.DEFENSE) if (EnemyStat.AttackerType == EAttackerType.DEFENSE)
{ {
SetDefensePos(transform.position); SetDefensePos(transform.position, true);
childNum = transform.GetSiblingIndex();
enemyUnit.SetDefensePos(defensePos, childNum); enemyUnit.SetDefensePos(defensePos, childNum);
} }
} }
@ -257,7 +259,7 @@ namespace BlueWaterProject
if (nearestTarget == null) return; if (nearestTarget == null) return;
SetTargetTransform(nearestTarget); SetTargetTransform(nearestTarget, true);
} }
private void FindTargetInDefense() private void FindTargetInDefense()
@ -293,7 +295,7 @@ namespace BlueWaterProject
if (maxColliderCount <= 0) if (maxColliderCount <= 0)
{ {
SetTargetTransform(null); SetTargetTransform(null, true);
return; return;
} }
@ -310,7 +312,7 @@ namespace BlueWaterProject
nearestTargetTransform = colliderWithinRange[i].transform; nearestTargetTransform = colliderWithinRange[i].transform;
} }
SetTargetTransform(nearestTargetTransform); SetTargetTransform(nearestTargetTransform, true);
} }
public void MoveTargetInDefense(Vector3 targetPos) public void MoveTargetInDefense(Vector3 targetPos)
@ -324,7 +326,12 @@ namespace BlueWaterProject
case EDefenseType.MIDFIELDER: case EDefenseType.MIDFIELDER:
break; break;
case EDefenseType.DEFENDER: case EDefenseType.DEFENDER:
if (Vector3.Distance(targetPos, defensePos) > EnemyStat.DefenseRange) return; if (Vector3.Distance(targetPos, defensePos) > EnemyStat.DefenseRange)
{
combatAgent.stoppingDistance = GlobalValue.MINIMUM_STOP_DISTANCE;
combatAgent.SetDestination(defensePos);
return;
}
break; break;
case EDefenseType.KEEPER: case EDefenseType.KEEPER:
return; return;
@ -334,15 +341,25 @@ namespace BlueWaterProject
if (Vector3.Distance(combatAgent.destination, targetPos) < 0.1f) return; if (Vector3.Distance(combatAgent.destination, targetPos) < 0.1f) return;
combatAgent.stoppingDistance = GlobalValue.MAXIMUM_STOP_DISTANCE;
combatAgent.SetDestination(targetPos); combatAgent.SetDestination(targetPos);
} }
protected override void SetCurrentHp(float value) public void ReturnDefensePos(Vector3 targetPos)
{
if (Vector3.Distance(combatAgent.destination, targetPos) < 0.1f) return;
combatAgent.stoppingDistance = GlobalValue.MINIMUM_STOP_DISTANCE;
combatAgent.SetDestination(targetPos);
}
protected override void SetCurrentHp(float value, bool useBehaviorTreeVariable = false)
{ {
EnemyStat.CurrentHp = value; EnemyStat.CurrentHp = value;
var btCurrentHp = behaviorTree.GetVariable("CurrentHp"); if (!useBehaviorTreeVariable) return;
btCurrentHp?.SetValue(value);
Utils.SetBehaviorVariable(behaviorTree, "CurrentHp", value);
} }
protected override void RemoveAiListElement() protected override void RemoveAiListElement()
@ -352,8 +369,7 @@ namespace BlueWaterProject
enemyUnit.enemyUnitStat.EnemyAiList.Remove(this); enemyUnit.enemyUnitStat.EnemyAiList.Remove(this);
} }
childNum = enemyUnit.transform.GetSiblingIndex(); enemyUnit.ResetDefensePos();
SetDefensePos(enemyUnit.GetDefensePos(childNum));
} }
private void BeAttackedMovement(Vector3 attackPos) private void BeAttackedMovement(Vector3 attackPos)
@ -379,16 +395,27 @@ namespace BlueWaterProject
{ {
if (item.GetTargetTransform()) continue; if (item.GetTargetTransform()) continue;
item.MoveTarget(attackPos); item.SetBeAttacked(true, true);
item.MoveTarget(attackPos, GlobalValue.MAXIMUM_STOP_DISTANCE);
} }
} }
public void SetDefensePos(Vector3 value) public void SetDefensePos(Vector3 value, bool useBehaviorTreeVariable = false)
{ {
defensePos = value; defensePos = value;
var btDefensePos = behaviorTree.GetVariable("DefensePos"); if (!useBehaviorTreeVariable) return;
btDefensePos?.SetValue(value);
Utils.SetBehaviorVariable(behaviorTree, "DefensePos", value);
}
public void SetBeAttacked(bool value, bool useBehaviorTreeVariable = false)
{
beAttacked = value;
if (!useBehaviorTreeVariable) return;
Utils.SetBehaviorVariable(behaviorTree, "BeAttacked", value);
} }
public bool GetIsAttackCoroutine() => isAttackCoroutine; public bool GetIsAttackCoroutine() => isAttackCoroutine;

View File

@ -128,7 +128,7 @@ namespace BlueWaterProject
if (nearestTarget == null) return; if (nearestTarget == null) return;
SetTargetTransform(nearestTarget); SetTargetTransform(nearestTarget, true);
} }
protected override void FindNearestTargetInRange(Vector3 centerPos, float range) protected override void FindNearestTargetInRange(Vector3 centerPos, float range)
@ -140,7 +140,7 @@ namespace BlueWaterProject
if (maxColliderCount <= 0) if (maxColliderCount <= 0)
{ {
SetTargetTransform(null); SetTargetTransform(null, true);
return; return;
} }
@ -158,7 +158,7 @@ namespace BlueWaterProject
nearestTargetTransform = colliderWithinRange[i].transform; nearestTargetTransform = colliderWithinRange[i].transform;
} }
SetTargetTransform(nearestTargetTransform); SetTargetTransform(nearestTargetTransform, true);
} }
private bool IsRaycastHitTarget(Vector3 myPos, Transform target) private bool IsRaycastHitTarget(Vector3 myPos, Transform target)

View File

@ -147,7 +147,7 @@ namespace BlueWaterProject
return; return;
} }
var changeHp = Mathf.Max(PirateStat.CurrentHp - finalDamage, 0); var changeHp = Mathf.Max(PirateStat.CurrentHp - finalDamage, 0);
SetCurrentHp(changeHp); SetCurrentHp(changeHp, true);
// 죽었는지 체크 // 죽었는지 체크
if (changeHp == 0f) return; if (changeHp == 0f) return;
@ -189,7 +189,7 @@ namespace BlueWaterProject
FindMaterial(); FindMaterial();
SetBehaviorTree(UnitManager.Inst.PirateBehaviorTree); SetBehaviorTree(UnitManager.Inst.PirateBehaviorTree);
SetCurrentHp(PirateStat.MaxHp); SetCurrentHp(PirateStat.MaxHp, true);
SetMoveSpeed(PirateStat.MoveSpd); SetMoveSpeed(PirateStat.MoveSpd);
if (PirateStat.AttackerType == EAttackerType.DEFENSE) if (PirateStat.AttackerType == EAttackerType.DEFENSE)
@ -242,15 +242,16 @@ namespace BlueWaterProject
yield return null; yield return null;
} }
combatAgent.stoppingDistance = GlobalValue.MAXIMUM_STOP_DISTANCE;
combatAgent.SetDestination(movePos); combatAgent.SetDestination(movePos);
SetIsCommanded(true); SetIsCommanded(true, true);
while (combatAgent.pathPending || combatAgent.remainingDistance > combatAgent.stoppingDistance) while (combatAgent.pathPending || combatAgent.remainingDistance > combatAgent.stoppingDistance)
{ {
yield return null; yield return null;
} }
SetIsCommanded(false); SetIsCommanded(false, true);
} }
public override void FindTarget() public override void FindTarget()
@ -334,7 +335,7 @@ namespace BlueWaterProject
if (nearestTarget == null) return; if (nearestTarget == null) return;
SetTargetTransform(nearestTarget); SetTargetTransform(nearestTarget, true);
} }
private void FindTargetInDefense() private void FindTargetInDefense()
@ -370,7 +371,7 @@ namespace BlueWaterProject
if (maxColliderCount <= 0) if (maxColliderCount <= 0)
{ {
SetTargetTransform(null); SetTargetTransform(null, true);
return; return;
} }
@ -387,7 +388,7 @@ namespace BlueWaterProject
nearestTargetTransform = colliderWithinRange[i].transform; nearestTargetTransform = colliderWithinRange[i].transform;
} }
SetTargetTransform(nearestTargetTransform); SetTargetTransform(nearestTargetTransform, true);
} }
private void SetOutlineColor(Color color) private void SetOutlineColor(Color color)
@ -398,20 +399,22 @@ namespace BlueWaterProject
} }
} }
public void SetIsCommanded(bool value) public void SetIsCommanded(bool value, bool useBehaviorTreeVariable = false)
{ {
isCommanded = value; isCommanded = value;
var btIsCommanded = behaviorTree.GetVariable("IsCommanded"); if (!useBehaviorTreeVariable) return;
btIsCommanded?.SetValue(value);
Utils.SetBehaviorVariable(behaviorTree, "IsCommanded", value);
} }
protected override void SetCurrentHp(float value) protected override void SetCurrentHp(float value, bool useBehaviorTreeVariable = false)
{ {
PirateStat.CurrentHp = value; PirateStat.CurrentHp = value;
var btCurrentHp = behaviorTree.GetVariable("CurrentHp"); if (!useBehaviorTreeVariable) return;
btCurrentHp?.SetValue(value);
Utils.SetBehaviorVariable(behaviorTree, "CurrentHp", value);
} }
protected override void RemoveAiListElement() protected override void RemoveAiListElement()

View File

@ -127,7 +127,7 @@ namespace BlueWaterProject
if (nearestTarget == null) return; if (nearestTarget == null) return;
SetTargetTransform(nearestTarget); SetTargetTransform(nearestTarget, true);
} }
protected override void FindNearestTargetInRange(Vector3 centerPos, float range) protected override void FindNearestTargetInRange(Vector3 centerPos, float range)
@ -139,7 +139,7 @@ namespace BlueWaterProject
if (maxColliderCount <= 0) if (maxColliderCount <= 0)
{ {
SetTargetTransform(null); SetTargetTransform(null, true);
return; return;
} }
@ -156,7 +156,7 @@ namespace BlueWaterProject
nearestTargetTransform = colliderWithinRange[i].transform; nearestTargetTransform = colliderWithinRange[i].transform;
} }
SetTargetTransform(nearestTargetTransform); SetTargetTransform(nearestTargetTransform, true);
} }
private bool IsRaycastHitTarget(Vector3 myPos, Transform target) private bool IsRaycastHitTarget(Vector3 myPos, Transform target)

View File

@ -1,4 +1,3 @@
using System;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
@ -12,7 +11,7 @@ namespace BlueWaterProject
[PropertyOrder(-10)] [PropertyOrder(-10)]
public EnemyUnitStat enemyUnitStat; public EnemyUnitStat enemyUnitStat;
private Vector3[] defensePos; [SerializeField] private Vector3[] defensePos;
private bool isClickedTypeAllButton; private bool isClickedTypeAllButton;
#endregion #endregion
@ -87,7 +86,7 @@ namespace BlueWaterProject
{ {
for (var i = 0; i < enemyUnitStat.EnemyAiList.Count; i++) for (var i = 0; i < enemyUnitStat.EnemyAiList.Count; i++)
{ {
enemyUnitStat.EnemyAiList[i].SetDefensePos(defensePos[i]); enemyUnitStat.EnemyAiList[i].SetDefensePos(defensePos[i], true);
} }
} }

View File

@ -16,6 +16,9 @@ namespace BlueWaterProject
public const int MAX_CANON_COUNT = 5; public const int MAX_CANON_COUNT = 5;
public const float MINIMUM_STOP_DISTANCE = 0f;
public const float MAXIMUM_STOP_DISTANCE = 3f;
/// <summary> Radar 바늘이 레이더에 겹치는 허용 범위 </summary> /// <summary> Radar 바늘이 레이더에 겹치는 허용 범위 </summary>
public const float RADAR_OVERLAP_TOLERANCE = 5f; public const float RADAR_OVERLAP_TOLERANCE = 5f;
public const float RADAR_RANGE = 100f; public const float RADAR_RANGE = 100f;

View File

@ -1,7 +1,7 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using BehaviorDesigner.Runtime;
using UnityEditor; using UnityEditor;
using UnityEditor.Animations;
using UnityEngine; using UnityEngine;
using UnityEngine.AI; using UnityEngine.AI;
using UnityEngine.Assertions; using UnityEngine.Assertions;
@ -140,6 +140,12 @@ namespace BlueWaterProject
return false; return false;
} }
public static void SetBehaviorVariable<T>(Behavior behaviorTreeComponent, string behaviorVariableName, T value)
{
var sharedVariable = behaviorTreeComponent.GetVariable(behaviorVariableName);
sharedVariable?.SetValue(value);
}
#if UNITY_EDITOR #if UNITY_EDITOR
public static T LoadFromFolder<T>(string folderPath, string name, string extension) where T : Object public static T LoadFromFolder<T>(string folderPath, string name, string extension) where T : Object
{ {

View File

@ -28,25 +28,27 @@ MonoBehaviour:
Shared Float","Instant":true,"SharedFloatvariable":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},"SharedFloatcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0}},{"Type":"BlueWaterProject.DieOfCombat","NodeData":{"Offset":"(-77.26136,151.369934)"},"ID":7,"Name":"Die Shared Float","Instant":true,"SharedFloatvariable":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},"SharedFloatcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0}},{"Type":"BlueWaterProject.DieOfCombat","NodeData":{"Offset":"(-77.26136,151.369934)"},"ID":7,"Name":"Die
Of Combat","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(57.2359619,148.672363)"},"ID":8,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":3},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityGameObject.Destroy","NodeData":{"Offset":"(197.235962,148.672363)"},"ID":9,"Name":"Destroy","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"Singletime":0}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(259.285675,150)"},"ID":10,"Name":"Find Of Combat","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(57.2359619,148.672363)"},"ID":8,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":3},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityGameObject.Destroy","NodeData":{"Offset":"(197.235962,148.672363)"},"ID":9,"Name":"Destroy","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"Singletime":0}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(259.285675,150)"},"ID":10,"Name":"Find
Target Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.FindTargetOfEnemy","NodeData":{"Offset":"(-132.406738,148.091431)"},"ID":11,"Name":"Find Target Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.FindTargetOfEnemy","NodeData":{"Offset":"(-132.406738,148.091431)"},"ID":11,"Name":"Find
Target Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(140.2998,153.643066)"},"ID":12,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-633.8519,153.138184)"},"ID":13,"Name":"Comeback Target Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(140.2998,153.643066)"},"ID":12,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-1107.87732,153.138184)"},"ID":13,"Name":"Comeback
DefensePos Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedTransform","NodeData":{"Offset":"(-327.5169,146.846512)","Comment":"TargetTransform DefensePos Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedTransform","NodeData":{"Offset":"(-214.613708,146.846512)","Comment":"TargetTransform
== null"},"ID":14,"Name":"Compare Shared Transform","Instant":true,"SharedTransformvariable":{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":"TargetTransform","IsShared":true},"SharedTransformcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":null}},{"Type":"BlueWaterProject.CanComebackDefensePosOfEnemy","NodeData":{"Offset":"(-107.697006,150)"},"ID":15,"Name":"Can == null"},"ID":14,"Name":"Compare Shared Transform","Instant":true,"SharedTransformvariable":{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":"TargetTransform","IsShared":true},"SharedTransformcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":null}},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(154.442932,151.637573)"},"ID":15,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-382.760773,150)"},"ID":16,"Name":"Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedBool","NodeData":{"Offset":"(-136.8067,148.564941)","Comment":"BeAttacked
Comeback Defense Pos Of Enemy","Instant":true},{"Type":"BlueWaterProject.IncreaseSharedInt","NodeData":{"Offset":"(105.676559,147.274521)"},"ID":16,"Name":"Increase == true"},"ID":17,"Name":"Compare Shared Bool","Instant":true,"SharedBoolvariable":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":"BeAttacked","IsShared":true,"BooleanmValue":false},"SharedBoolcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true}},{"Type":"BlueWaterProject.BeAttackedOfEnemy","NodeData":{"Offset":"(123.1254,153.531)"},"ID":18,"Name":"Be
Shared Int","Instant":true,"SharedInttargetInt":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(245.33844,154.789917)"},"ID":17,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-87.7636948,149.236938)"},"ID":18,"Name":"Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedInt","NodeData":{"Offset":"(-265.106171,150)"},"ID":19,"Name":"Compare Attacked Of Enemy","Instant":true}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(258.7465,154.556519)"},"ID":19,"Name":"Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BlueWaterProject.CanComebackDefensePosOfEnemy","NodeData":{"Offset":"(-219.48703,136.922852)"},"ID":20,"Name":"Can
Shared Int","Instant":true,"SharedIntvariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0},"SharedIntcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":6}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-119.574951,148.297974)"},"ID":20,"Name":"Set Comeback Defense Pos Of Enemy","Instant":true},{"Type":"BlueWaterProject.IncreaseSharedInt","NodeData":{"Offset":"(0.512756348,136.922852)"},"ID":21,"Name":"Increase
Is Stopped","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedBoolisStopped":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetDestination","NodeData":{"Offset":"(2.55319023,150)"},"ID":21,"Name":"Set Shared Int","Instant":true,"SharedInttargetInt":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(140.512756,136.922852)"},"ID":22,"Name":"Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-120.434143,149.236938)"},"ID":23,"Name":"Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedInt","NodeData":{"Offset":"(-327.606171,150)"},"ID":24,"Name":"Compare
Destination","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedVector3destination":{"Type":"BehaviorDesigner.Runtime.SharedVector3","Name":"DefensePos","IsShared":true,"Vector3mValue":"(0,0,0)"}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(122.553185,150)"},"ID":22,"Name":"Set Shared Int","Instant":true,"SharedIntvariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0},"SharedIntcompareTo":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":6}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-182.07489,148.297974)"},"ID":25,"Name":"Set
Shared Int","Instant":true,"SharedInttargetValue":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedInttargetVariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(242.553162,150)"},"ID":23,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0.5},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(104.242462,150)"},"ID":24,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0.5},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(368.432861,147.142334)"},"ID":25,"Name":"Can Is Stopped","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedBoolisStopped":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false}},{"Type":"BlueWaterProject.ReturnDefensePosOfEnemy","NodeData":{"Offset":"(0,150)"},"ID":26,"Name":"Return
Attack Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-230,150)"},"ID":26,"Name":"Move Defense Pos Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(169.428146,150)"},"ID":27,"Name":"Set
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Inverter","NodeData":{"Offset":"(-211.24556,149.7959)"},"ID":27,"Name":"Inverter","Instant":true,"Children":[{"Type":"BlueWaterProject.CanAttackOfEnemy","NodeData":{"Offset":"(0,150)"},"ID":28,"Name":"Can Shared Int","Instant":true,"SharedInttargetValue":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedInttargetVariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(289.428162,150)"},"ID":28,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0.5},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(126.969711,150)"},"ID":29,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0.5},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}}]}]}]}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Selector","NodeData":{"Offset":"(368.432861,147.142334)"},"ID":30,"Name":"Can
Attack Of Enemy","Instant":true}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-84.35962,147.179443)"},"ID":29,"Name":"Set Attack Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-230,150)"},"ID":31,"Name":"Move
Is Stopped","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedBoolisStopped":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false}},{"Type":"BlueWaterProject.MoveTargetOfEnemy","NodeData":{"Offset":"(77.3227158,145.83252)"},"ID":30,"Name":"Move Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Inverter","NodeData":{"Offset":"(-211.24556,149.7959)"},"ID":32,"Name":"Inverter","Instant":true,"Children":[{"Type":"BlueWaterProject.CanAttackOfEnemy","NodeData":{"Offset":"(0,150)"},"ID":33,"Name":"Can
Target Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(226.923065,150)"},"ID":31,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0.5},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(356.6842,147.223755)"},"ID":32,"Name":"Set Attack Of Enemy","Instant":true}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-84.35962,147.179443)"},"ID":34,"Name":"Set
Shared Int","Instant":true,"SharedInttargetValue":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedInttargetVariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(426.8182,150)"},"ID":33,"Name":"Attack Is Stopped","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedBoolisStopped":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false}},{"Type":"BlueWaterProject.MoveTargetOfEnemy","NodeData":{"Offset":"(77.3227158,145.83252)"},"ID":35,"Name":"Move
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-141.443,148.954468)"},"ID":34,"Name":"Set Target Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Wait","NodeData":{"Offset":"(226.923065,150)"},"ID":36,"Name":"Wait","Instant":true,"SharedFloatwaitTime":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":0.5},"SharedBoolrandomWait":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":false},"SharedFloatrandomWaitMin":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1},"SharedFloatrandomWaitMax":{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":null,"SinglemValue":1}},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(356.6842,147.223755)"},"ID":37,"Name":"Set
Is Stopped","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedBoolisStopped":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true}},{"Type":"BlueWaterProject.AttackOfEnemy","NodeData":{"Offset":"(-3.29175377,147.723267)"},"ID":35,"Name":"Attack Shared Int","Instant":true,"SharedInttargetValue":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedInttargetVariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(426.8182,150)"},"ID":38,"Name":"Attack
Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(153.181641,148.636353)"},"ID":36,"Name":"Set Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-141.443,148.954468)"},"ID":39,"Name":"Set
Shared Int","Instant":true,"SharedInttargetValue":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedInttargetVariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}}]}]}]}]}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":"TargetTransform","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},{"Type":"BehaviorDesigner.Runtime.SharedVector3","Name":"DefensePos","IsShared":true,"Vector3mValue":"(0,0,0)"},{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}]}' Is Stopped","Instant":true,"SharedGameObjecttargetGameObject":{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},"SharedBoolisStopped":{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":null,"BooleanmValue":true}},{"Type":"BlueWaterProject.AttackOfEnemy","NodeData":{"Offset":"(-3.29175377,147.723267)"},"ID":40,"Name":"Attack
Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(153.181641,148.636353)"},"ID":41,"Name":"Set
Shared Int","Instant":true,"SharedInttargetValue":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":null,"Int32mValue":0},"SharedInttargetVariable":{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0}}]}]}]}]}]}]}]},"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedGameObject","Name":"MyObj","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedTransform","Name":"TargetTransform","IsShared":true},{"Type":"BehaviorDesigner.Runtime.SharedFloat","Name":"CurrentHp","IsShared":true,"SinglemValue":0},{"Type":"BehaviorDesigner.Runtime.SharedVector3","Name":"DefensePos","IsShared":true,"Vector3mValue":"(0,0,0)"},{"Type":"BehaviorDesigner.Runtime.SharedInt","Name":"FailCount","IsShared":true,"Int32mValue":0},{"Type":"BehaviorDesigner.Runtime.SharedBool","Name":"BeAttacked","IsShared":true,"BooleanmValue":false}]}'
fieldSerializationData: fieldSerializationData:
typeName: [] typeName: []
fieldNameHash: fieldNameHash: