#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()
{
pirateAi.MoveTarget(pirateAi.GetTargetTransform().position);
pirateAi.MoveTarget(pirateAi.GetTargetTransform().position, GlobalValue.MAXIMUM_STOP_DISTANCE);
}
public override TaskStatus OnUpdate()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
using System;
using System.Diagnostics;
using BehaviorDesigner.Runtime;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Assertions;
@ -139,6 +139,12 @@ namespace BlueWaterProject
Debug.Log("근처에 갈 수 있는 위치가 없습니다.");
return false;
}
public static void SetBehaviorVariable<T>(Behavior behaviorTreeComponent, string behaviorVariableName, T value)
{
var sharedVariable = behaviorTreeComponent.GetVariable(behaviorVariableName);
sharedVariable?.SetValue(value);
}
#if UNITY_EDITOR
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
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 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
DefensePos Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.CompareSharedTransform","NodeData":{"Offset":"(-327.5169,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
Comeback Defense Pos Of Enemy","Instant":true},{"Type":"BlueWaterProject.IncreaseSharedInt","NodeData":{"Offset":"(105.676559,147.274521)"},"ID":16,"Name":"Increase
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
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
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
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,"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
Attack Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-230,150)"},"ID":26,"Name":"Move
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
Attack Of Enemy","Instant":true}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-84.35962,147.179443)"},"ID":29,"Name":"Set
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
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
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
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-141.443,148.954468)"},"ID":34,"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
Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(153.181641,148.636353)"},"ID":36,"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}]}'
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":"(-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":"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
== 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
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
Comeback Defense Pos Of Enemy","Instant":true},{"Type":"BlueWaterProject.IncreaseSharedInt","NodeData":{"Offset":"(0.512756348,136.922852)"},"ID":21,"Name":"Increase
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
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
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
Defense Pos Of Enemy","Instant":true},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.SharedVariables.SetSharedInt","NodeData":{"Offset":"(169.428146,150)"},"ID":27,"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":"(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 Selector","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Sequence","NodeData":{"Offset":"(-230,150)"},"ID":31,"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
Attack Of Enemy","Instant":true}]},{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-84.35962,147.179443)"},"ID":34,"Name":"Set
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
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
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
Sequence","Instant":true,"AbortTypeabortType":"None","Children":[{"Type":"BehaviorDesigner.Runtime.Tasks.Unity.UnityNavMeshAgent.SetIsStopped","NodeData":{"Offset":"(-141.443,148.954468)"},"ID":39,"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":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:
typeName: []
fieldNameHash: