Ai 전체 구조 변경 중
This commit is contained in:
parent
639ee838bc
commit
fd050c4f68
@ -178,32 +178,32 @@ namespace BlueWaterProject
|
|||||||
UpdateLookAtTarget();
|
UpdateLookAtTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMouseEnter()
|
// private void OnMouseEnter()
|
||||||
{
|
// {
|
||||||
if (AiStat.AiType == EAiType.ENEMY) return;
|
// if (AiStat.AiType == EAiType.ENEMY) return;
|
||||||
|
//
|
||||||
mouseEnterUnitController = gameObject.GetComponentInParent<UnitController>();
|
// mouseEnterUnitController = gameObject.GetComponentInParent<UnitController>();
|
||||||
|
//
|
||||||
if (mouseEnterUnitController == unitSelection.SelectedUnitController) return;
|
// if (mouseEnterUnitController == unitSelection.SelectedUnitController) return;
|
||||||
|
//
|
||||||
foreach (var unit in mouseEnterUnitController.unit.UnitList)
|
// foreach (var unit in mouseEnterUnitController.unit.UnitList)
|
||||||
{
|
// {
|
||||||
unit.MouseEnterHighlight();
|
// unit.MouseEnterHighlight();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private void OnMouseExit()
|
// private void OnMouseExit()
|
||||||
{
|
// {
|
||||||
if (AiStat.AiType == EAiType.ENEMY ||
|
// if (AiStat.AiType == EAiType.ENEMY ||
|
||||||
!mouseEnterUnitController || mouseEnterUnitController == unitSelection.SelectedUnitController) return;
|
// !mouseEnterUnitController || mouseEnterUnitController == unitSelection.SelectedUnitController) return;
|
||||||
|
//
|
||||||
foreach (var unit in mouseEnterUnitController.unit.UnitList)
|
// foreach (var unit in mouseEnterUnitController.unit.UnitList)
|
||||||
{
|
// {
|
||||||
unit.ResetHighlight();
|
// unit.ResetHighlight();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
mouseEnterUnitController = null;
|
// mouseEnterUnitController = null;
|
||||||
}
|
// }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -607,7 +607,7 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(getAiViewData(AiStat.ViewIdx).RightWeapon).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(getAiViewData(AiStat.ViewIdx).RightWeapon).AddComponent<CloseWeapon>();
|
||||||
closeWeapon.gameObject.layer = LayerMask.NameToLayer("Weapon");
|
closeWeapon.gameObject.layer = LayerMask.NameToLayer("Weapon");
|
||||||
closeWeapon.SetAttackerAiType(AiStat.AiType);
|
//closeWeapon.SetAttackerAiType(AiStat.AiType);
|
||||||
closeWeapon.SetBoxCollider();
|
closeWeapon.SetBoxCollider();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -749,37 +749,37 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
protected virtual void SetLayer()
|
protected virtual void SetLayer()
|
||||||
{
|
{
|
||||||
switch (AiStat.AiType)
|
// switch (AiStat.AiType)
|
||||||
{
|
// {
|
||||||
case EAiType.NONE:
|
// case EAiType.NONE:
|
||||||
print("AiStat.AiType == NONE Error");
|
// print("AiStat.AiType == NONE Error");
|
||||||
break;
|
// break;
|
||||||
case EAiType.PLAYER:
|
// case EAiType.PLAYER:
|
||||||
gameObject.layer = LayerMask.NameToLayer("Player");
|
// gameObject.layer = LayerMask.NameToLayer("Player");
|
||||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
// hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||||
hitBoxCollider.gameObject.tag = "Player";
|
// hitBoxCollider.gameObject.tag = "Player";
|
||||||
TargetLayer = LayerMask.GetMask("Enemy");
|
// TargetLayer = LayerMask.GetMask("Enemy");
|
||||||
break;
|
// break;
|
||||||
case EAiType.PIRATE:
|
// case EAiType.PIRATE:
|
||||||
gameObject.layer = LayerMask.NameToLayer("Pirate");
|
// gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
// hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||||
hitBoxCollider.gameObject.tag = "Pirate";
|
// hitBoxCollider.gameObject.tag = "Pirate";
|
||||||
TargetLayer = LayerMask.GetMask("Enemy");
|
// TargetLayer = LayerMask.GetMask("Enemy");
|
||||||
break;
|
// break;
|
||||||
case EAiType.ENEMY:
|
// case EAiType.ENEMY:
|
||||||
gameObject.layer = LayerMask.NameToLayer("Enemy");
|
// gameObject.layer = LayerMask.NameToLayer("Enemy");
|
||||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
// hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||||
hitBoxCollider.gameObject.tag = "Enemy";
|
// hitBoxCollider.gameObject.tag = "Enemy";
|
||||||
TargetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
// TargetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
||||||
break;
|
// break;
|
||||||
default:
|
// default:
|
||||||
throw new ArgumentOutOfRangeException();
|
// throw new ArgumentOutOfRangeException();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (AiStat.AttackerType == EAttackerType.OFFENSE)
|
// if (AiStat.AttackerType == EAttackerType.OFFENSE)
|
||||||
{
|
// {
|
||||||
TargetLayer |= LayerMask.GetMask("Props");
|
// TargetLayer |= LayerMask.GetMask("Props");
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public IslandInfo GetIslandInfo() => islandInfo;
|
public IslandInfo GetIslandInfo() => islandInfo;
|
||||||
|
10
BlueWater/Assets/02.Scripts/Ai/BaseAi.cs
Normal file
10
BlueWater/Assets/02.Scripts/Ai/BaseAi.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class BaseAi : MonoBehaviour
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
BlueWater/Assets/02.Scripts/Ai/BaseAi.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Ai/BaseAi.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a1c1a5b338eae1e40a84da3eba99b987
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
BlueWater/Assets/02.Scripts/Ai/Human.meta
Normal file
8
BlueWater/Assets/02.Scripts/Ai/Human.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 22754cea389b9fc49a6a943b90c2710a
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
BlueWater/Assets/02.Scripts/Ai/Human/Enemy.meta
Normal file
8
BlueWater/Assets/02.Scripts/Ai/Human/Enemy.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 76fb3986699b27a49b77bbe71fa5056d
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
10
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/EnemyAi.cs
Normal file
10
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/EnemyAi.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class EnemyAi : HumanAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/EnemyAi.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/EnemyAi.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9bc95105830b2294d9941f686fc2f0ba
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -6,7 +6,7 @@ using UnityEngine;
|
|||||||
namespace BlueWaterProject
|
namespace BlueWaterProject
|
||||||
{
|
{
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AiStat : IIdx
|
public class EnemyStat : IIdx
|
||||||
{
|
{
|
||||||
#region Property and variable
|
#region Property and variable
|
||||||
|
|
||||||
@ -19,10 +19,6 @@ namespace BlueWaterProject
|
|||||||
[field: Tooltip("Ai 종류")]
|
[field: Tooltip("Ai 종류")]
|
||||||
[field: SerializeField] public GlobalValue.UnitType UnitType { get; set; }
|
[field: SerializeField] public GlobalValue.UnitType UnitType { get; set; }
|
||||||
|
|
||||||
[field: Tooltip("Ai 종류")]
|
|
||||||
[field: EnumToggleButtons]
|
|
||||||
[field: SerializeField] public EAiType AiType { get; set; }
|
|
||||||
|
|
||||||
[field: Tooltip("공격방식 종류")]
|
[field: Tooltip("공격방식 종류")]
|
||||||
[field: DisableIf("@true")]
|
[field: DisableIf("@true")]
|
||||||
[field: SerializeField] public EAttackerType AttackerType { get; set; }
|
[field: SerializeField] public EAttackerType AttackerType { get; set; }
|
||||||
@ -93,12 +89,11 @@ namespace BlueWaterProject
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 기본 생성자
|
/// 기본 생성자
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public AiStat()
|
public EnemyStat()
|
||||||
{
|
{
|
||||||
Idx = null;
|
Idx = null;
|
||||||
ViewIdx = null;
|
ViewIdx = null;
|
||||||
UnitType = GlobalValue.UnitType.NONE;
|
UnitType = GlobalValue.UnitType.NONE;
|
||||||
AiType = EAiType.NONE;
|
|
||||||
AttackerType = EAttackerType.NONE;
|
AttackerType = EAttackerType.NONE;
|
||||||
OffenseType = EOffenseType.NONE;
|
OffenseType = EOffenseType.NONE;
|
||||||
DefenseType = EDefenseType.NONE;
|
DefenseType = EDefenseType.NONE;
|
||||||
@ -122,14 +117,13 @@ namespace BlueWaterProject
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 일반 생성자
|
/// 일반 생성자
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public AiStat(string idx, string viewIdx, GlobalValue.UnitType unitType, EAiType aiType, float maxHp, float currentHp, float atk, float def,
|
public EnemyStat(string idx, string viewIdx, GlobalValue.UnitType unitType, float maxHp, float currentHp, float atk, float def,
|
||||||
float moveSpd, float atkCooldown, float viewRange, float atkRange, float defenseRange, int shieldPenetrationRate, int avoidanceRate,
|
float moveSpd, float atkCooldown, float viewRange, float atkRange, float defenseRange, int shieldPenetrationRate, int avoidanceRate,
|
||||||
bool usingShield, int penetrationResistivity, bool usingBow, float inaccuracy)
|
bool usingShield, int penetrationResistivity, bool usingBow, float inaccuracy)
|
||||||
{
|
{
|
||||||
Idx = idx;
|
Idx = idx;
|
||||||
ViewIdx = viewIdx;
|
ViewIdx = viewIdx;
|
||||||
UnitType = unitType;
|
UnitType = unitType;
|
||||||
AiType = aiType;
|
|
||||||
MaxHp = maxHp;
|
MaxHp = maxHp;
|
||||||
CurrentHp = currentHp;
|
CurrentHp = currentHp;
|
||||||
Atk = atk;
|
Atk = atk;
|
||||||
@ -150,30 +144,29 @@ namespace BlueWaterProject
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 복사 생성자
|
/// 복사 생성자
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public AiStat(AiStat aiStat)
|
public EnemyStat(EnemyStat enemyStat)
|
||||||
{
|
{
|
||||||
Idx = aiStat.Idx;
|
Idx = enemyStat.Idx;
|
||||||
ViewIdx = aiStat.ViewIdx;
|
ViewIdx = enemyStat.ViewIdx;
|
||||||
UnitType = aiStat.UnitType;
|
UnitType = enemyStat.UnitType;
|
||||||
AiType = aiStat.AiType;
|
AttackerType = enemyStat.AttackerType;
|
||||||
AttackerType = aiStat.AttackerType;
|
OffenseType = enemyStat.OffenseType;
|
||||||
OffenseType = aiStat.OffenseType;
|
DefenseType = enemyStat.DefenseType;
|
||||||
DefenseType = aiStat.DefenseType;
|
MaxHp = enemyStat.MaxHp;
|
||||||
MaxHp = aiStat.MaxHp;
|
CurrentHp = enemyStat.CurrentHp;
|
||||||
CurrentHp = aiStat.CurrentHp;
|
Atk = enemyStat.Atk;
|
||||||
Atk = aiStat.Atk;
|
Def = enemyStat.Def;
|
||||||
Def = aiStat.Def;
|
MoveSpd = enemyStat.MoveSpd;
|
||||||
MoveSpd = aiStat.MoveSpd;
|
AtkCooldown = enemyStat.AtkCooldown;
|
||||||
AtkCooldown = aiStat.AtkCooldown;
|
ViewRange = enemyStat.ViewRange;
|
||||||
ViewRange = aiStat.ViewRange;
|
AtkRange = enemyStat.AtkRange;
|
||||||
AtkRange = aiStat.AtkRange;
|
DefenseRange = enemyStat.DefenseRange;
|
||||||
DefenseRange = aiStat.DefenseRange;
|
ShieldPenetrationRate = enemyStat.ShieldPenetrationRate;
|
||||||
ShieldPenetrationRate = aiStat.ShieldPenetrationRate;
|
AvoidanceRate = enemyStat.AvoidanceRate;
|
||||||
AvoidanceRate = aiStat.AvoidanceRate;
|
UsingShield = enemyStat.UsingShield;
|
||||||
UsingShield = aiStat.UsingShield;
|
PenetrationResistivity = enemyStat.PenetrationResistivity;
|
||||||
PenetrationResistivity = aiStat.PenetrationResistivity;
|
UsingBow = enemyStat.UsingBow;
|
||||||
UsingBow = aiStat.UsingBow;
|
Inaccuracy = enemyStat.Inaccuracy;
|
||||||
Inaccuracy = aiStat.Inaccuracy;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
11
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/EnemyStat.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/EnemyStat.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4c8366e51a915e1428ed891371635918
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/Type.meta
Normal file
8
BlueWater/Assets/02.Scripts/Ai/Human/Enemy/Type.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bd54d1697b7a75545858c144d17671c0
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class EnemyArcher : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3f93377933923904282d8a32d7b6dcd8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class EnemySpearKnight : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3081b5da8eafc39478ee39b61bd01249
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class EnemySpearman : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c14f537594d346b408093acb546136d8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class EnemySwordKnight : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 215148f883898b34a99799d0ad0236e5
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class EnemySwordman : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3bf2b5b70d0f63e40b3dddbd22c90c84
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
112
BlueWater/Assets/02.Scripts/Ai/Human/HumanAi.cs
Normal file
112
BlueWater/Assets/02.Scripts/Ai/Human/HumanAi.cs
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.AI;
|
||||||
|
using UnityEngine.Animations;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class HumanAi : BaseAi
|
||||||
|
{
|
||||||
|
#region Properties and variables
|
||||||
|
|
||||||
|
// 모델링 관련 변수
|
||||||
|
protected Transform backpackContainer;
|
||||||
|
protected Transform leftWeaponContainer;
|
||||||
|
protected Transform leftShieldContainer;
|
||||||
|
protected Transform headContainer;
|
||||||
|
protected Transform rightWeaponContainer;
|
||||||
|
protected Transform bodyContainer;
|
||||||
|
protected Transform flagContainer;
|
||||||
|
|
||||||
|
// 컴포넌트 관련 변수
|
||||||
|
protected Animator humanAnimator;
|
||||||
|
protected NavMeshAgent humanAgent;
|
||||||
|
protected CapsuleCollider myCollider;
|
||||||
|
protected CapsuleCollider hitBoxCollider;
|
||||||
|
protected LookAtConstraint lookAtConstraint;
|
||||||
|
|
||||||
|
// 애니메이션 관련 변수
|
||||||
|
protected static readonly int SpeedHash = Animator.StringToHash("Speed");
|
||||||
|
protected static readonly int AttackHash = Animator.StringToHash("Attack");
|
||||||
|
protected static readonly int DamageHash = Animator.StringToHash("TakeDamage");
|
||||||
|
protected static readonly int DeathTypeHash = Animator.StringToHash("DeathType");
|
||||||
|
protected static readonly int DeathHash = Animator.StringToHash("Death");
|
||||||
|
protected static readonly int ShieldHash = Animator.StringToHash("Shield");
|
||||||
|
protected static readonly int OutlineColorHash = Shader.PropertyToID("_OutlineColor");
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Unity built-in methods
|
||||||
|
|
||||||
|
protected virtual void Awake()
|
||||||
|
{
|
||||||
|
InitComponent();
|
||||||
|
FlagLookAtFlag();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void Start()
|
||||||
|
{
|
||||||
|
InitStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Custom methods
|
||||||
|
|
||||||
|
protected virtual void InitComponent()
|
||||||
|
{
|
||||||
|
backpackContainer = Utils.GetComponentAndAssert<Transform>(transform.
|
||||||
|
Find("Bip001/Bip001 Pelvis/Bip001 Spine/Backpack_container"));
|
||||||
|
leftWeaponContainer = Utils.GetComponentAndAssert<Transform>(transform.
|
||||||
|
Find("Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm/Bip001 L Hand/L_hand_container"));
|
||||||
|
leftShieldContainer = Utils.GetComponentAndAssert<Transform>(transform.
|
||||||
|
Find("Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm/Bip001 L Hand/L_shield_container"));
|
||||||
|
headContainer = Utils.GetComponentAndAssert<Transform>(transform.
|
||||||
|
Find("Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Neck/Bip001 Head/Head_container"));
|
||||||
|
rightWeaponContainer = Utils.GetComponentAndAssert<Transform>(transform.
|
||||||
|
Find("Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/R_hand_container"));
|
||||||
|
bodyContainer = Utils.GetComponentAndAssert<Transform>(transform.
|
||||||
|
Find("Body_container"));
|
||||||
|
flagContainer = Utils.GetComponentAndAssert<Transform>(transform.
|
||||||
|
Find("Flag_container"));
|
||||||
|
|
||||||
|
humanAnimator = Utils.GetComponentAndAssert<Animator>(transform);
|
||||||
|
humanAgent = Utils.GetComponentAndAssert<NavMeshAgent>(transform);
|
||||||
|
myCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform);
|
||||||
|
hitBoxCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform.Find("HitBox"));
|
||||||
|
lookAtConstraint = Utils.GetComponentAndAssert<LookAtConstraint>(flagContainer);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void InitStart()
|
||||||
|
{
|
||||||
|
// var getAiViewData = GetAiViewData(false);
|
||||||
|
//
|
||||||
|
// InitViewModel(false);
|
||||||
|
// FindMaterial();
|
||||||
|
// SetLayer();
|
||||||
|
// SetCloseWeapon(getAiViewData);
|
||||||
|
// SetCurrentHp(AiStat.MaxHp);
|
||||||
|
// SetMoveSpeed(AiStat.MoveSpd);
|
||||||
|
//
|
||||||
|
// DefensePos = transform.position;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FlagLookAtFlag()
|
||||||
|
{
|
||||||
|
if (Camera.main != null)
|
||||||
|
{
|
||||||
|
var source = new ConstraintSource
|
||||||
|
{
|
||||||
|
sourceTransform = Camera.main.transform,
|
||||||
|
weight = 1f
|
||||||
|
};
|
||||||
|
lookAtConstraint.AddSource(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
lookAtConstraint.constraintActive = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
11
BlueWater/Assets/02.Scripts/Ai/Human/HumanAi.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Ai/Human/HumanAi.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8f5be050be5d811428c7ba86c4dde165
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
BlueWater/Assets/02.Scripts/Ai/Human/Pirate.meta
Normal file
8
BlueWater/Assets/02.Scripts/Ai/Human/Pirate.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7412cdde0dbfd14478199e8a4696df03
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
10
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/PirateAi.cs
Normal file
10
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/PirateAi.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class PirateAi : HumanAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/PirateAi.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/PirateAi.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e86a27e3e99581c4c93d65fa02fdcdb5
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
174
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/PirateStat.cs
Normal file
174
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/PirateStat.cs
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
using System;
|
||||||
|
using Sirenix.OdinInspector;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
public class PirateStat : IIdx
|
||||||
|
{
|
||||||
|
#region Property and variable
|
||||||
|
|
||||||
|
[field: Tooltip("고유 인덱스")]
|
||||||
|
[field: SerializeField] public string Idx { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("캐릭터 모델 인덱스")]
|
||||||
|
[field: SerializeField] public string ViewIdx { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("Ai 종류")]
|
||||||
|
[field: SerializeField] public GlobalValue.UnitType UnitType { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("공격방식 종류")]
|
||||||
|
[field: DisableIf("@true")]
|
||||||
|
[field: SerializeField] public EAttackerType AttackerType { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("공격 종류")]
|
||||||
|
[field: DisableIf("@true")]
|
||||||
|
[field: SerializeField] public EOffenseType OffenseType { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("방어 종류")]
|
||||||
|
[field: DisableIf("@true")]
|
||||||
|
[field: SerializeField] public EDefenseType DefenseType { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("캐릭터 최대 체력")]
|
||||||
|
[field: SerializeField] public float MaxHp { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("캐릭터 현재 체력")]
|
||||||
|
[field: SerializeField] public float CurrentHp { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("공격력")]
|
||||||
|
[field: SerializeField] public float Atk { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("방어력")]
|
||||||
|
[field: SerializeField] public float Def { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("이동속도")]
|
||||||
|
[field: SerializeField] public float MoveSpd { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("공격속도(다음 공격 주기)")]
|
||||||
|
[field: SerializeField] public float AtkCooldown { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("시야 사거리")]
|
||||||
|
[field: SerializeField] public float ViewRange { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("공격 사거리")]
|
||||||
|
[field: SerializeField] public float AtkRange { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("수비 사거리")]
|
||||||
|
[field: SerializeField] public float DefenseRange { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("방패 캐릭터를 공격했을 때, 방패 관통률")]
|
||||||
|
[field: Range(0, 100)]
|
||||||
|
[field: SerializeField] public int ShieldPenetrationRate { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("공격을 피할 수 있는 회피율")]
|
||||||
|
[field: Range(0, 100)]
|
||||||
|
[field: SerializeField] public int AvoidanceRate { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("캐릭터의 방패 사용 유무")]
|
||||||
|
[field: SerializeField] public bool UsingShield { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("방패 캐릭터가 관통 당할 확률을 줄여주는 관통 저항률")]
|
||||||
|
[field: ShowIf("@UsingShield == true")]
|
||||||
|
[field: Range(0, 100)]
|
||||||
|
[field: SerializeField] public int PenetrationResistivity { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("캐릭터의 활 사용 유무")]
|
||||||
|
[field: SerializeField] public bool UsingBow { get; set; }
|
||||||
|
|
||||||
|
[field: Tooltip("화살이 타겟에 도달하는 오차 범위(부정확함)")]
|
||||||
|
[field: ShowIf("@UsingBow == true")]
|
||||||
|
[field: Range(0, 5f)]
|
||||||
|
[field: SerializeField] public float Inaccuracy { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 기본 생성자
|
||||||
|
/// </summary>
|
||||||
|
public PirateStat()
|
||||||
|
{
|
||||||
|
Idx = null;
|
||||||
|
ViewIdx = null;
|
||||||
|
UnitType = GlobalValue.UnitType.NONE;
|
||||||
|
AttackerType = EAttackerType.NONE;
|
||||||
|
OffenseType = EOffenseType.NONE;
|
||||||
|
DefenseType = EDefenseType.NONE;
|
||||||
|
MaxHp = 0f;
|
||||||
|
CurrentHp = 0f;
|
||||||
|
Atk = 0f;
|
||||||
|
Def = 0f;
|
||||||
|
MoveSpd = 0f;
|
||||||
|
AtkCooldown = 0f;
|
||||||
|
ViewRange = 0f;
|
||||||
|
AtkRange = 0f;
|
||||||
|
DefenseRange = 0f;
|
||||||
|
ShieldPenetrationRate = 0;
|
||||||
|
AvoidanceRate = 0;
|
||||||
|
UsingShield = false;
|
||||||
|
PenetrationResistivity = 0;
|
||||||
|
UsingBow = false;
|
||||||
|
Inaccuracy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 일반 생성자
|
||||||
|
/// </summary>
|
||||||
|
public PirateStat(string idx, string viewIdx, GlobalValue.UnitType unitType, float maxHp, float currentHp, float atk, float def,
|
||||||
|
float moveSpd, float atkCooldown, float viewRange, float atkRange, float defenseRange, int shieldPenetrationRate, int avoidanceRate,
|
||||||
|
bool usingShield, int penetrationResistivity, bool usingBow, float inaccuracy)
|
||||||
|
{
|
||||||
|
Idx = idx;
|
||||||
|
ViewIdx = viewIdx;
|
||||||
|
UnitType = unitType;
|
||||||
|
MaxHp = maxHp;
|
||||||
|
CurrentHp = currentHp;
|
||||||
|
Atk = atk;
|
||||||
|
Def = def;
|
||||||
|
MoveSpd = moveSpd;
|
||||||
|
AtkCooldown = atkCooldown;
|
||||||
|
ViewRange = viewRange;
|
||||||
|
AtkRange = atkRange;
|
||||||
|
DefenseRange = defenseRange;
|
||||||
|
ShieldPenetrationRate = shieldPenetrationRate;
|
||||||
|
AvoidanceRate = avoidanceRate;
|
||||||
|
UsingShield = usingShield;
|
||||||
|
PenetrationResistivity = penetrationResistivity;
|
||||||
|
UsingBow = usingBow;
|
||||||
|
Inaccuracy = inaccuracy;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 복사 생성자
|
||||||
|
/// </summary>
|
||||||
|
public PirateStat(PirateStat pirateStat)
|
||||||
|
{
|
||||||
|
Idx = pirateStat.Idx;
|
||||||
|
ViewIdx = pirateStat.ViewIdx;
|
||||||
|
UnitType = pirateStat.UnitType;
|
||||||
|
AttackerType = pirateStat.AttackerType;
|
||||||
|
OffenseType = pirateStat.OffenseType;
|
||||||
|
DefenseType = pirateStat.DefenseType;
|
||||||
|
MaxHp = pirateStat.MaxHp;
|
||||||
|
CurrentHp = pirateStat.CurrentHp;
|
||||||
|
Atk = pirateStat.Atk;
|
||||||
|
Def = pirateStat.Def;
|
||||||
|
MoveSpd = pirateStat.MoveSpd;
|
||||||
|
AtkCooldown = pirateStat.AtkCooldown;
|
||||||
|
ViewRange = pirateStat.ViewRange;
|
||||||
|
AtkRange = pirateStat.AtkRange;
|
||||||
|
DefenseRange = pirateStat.DefenseRange;
|
||||||
|
ShieldPenetrationRate = pirateStat.ShieldPenetrationRate;
|
||||||
|
AvoidanceRate = pirateStat.AvoidanceRate;
|
||||||
|
UsingShield = pirateStat.UsingShield;
|
||||||
|
PenetrationResistivity = pirateStat.PenetrationResistivity;
|
||||||
|
UsingBow = pirateStat.UsingBow;
|
||||||
|
Inaccuracy = pirateStat.Inaccuracy;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
8
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/Type.meta
Normal file
8
BlueWater/Assets/02.Scripts/Ai/Human/Pirate/Type.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 35a6ee5b069c43a4784c5698d137f33d
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class PirateArcher : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 46bd31fe387e9f84794c9fd6c7c7750a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class PirateAxeman : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 10b29c400f9b90e4eb2b3b69bc8ff49f
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class PirateSpearman : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 18a0f769e4861e54cb4467bd1b8fd251
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class PirateSwordKnight : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0998d53fcca988e4c9476143092169c6
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class PirateSwordman : EnemyAi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8a9f89dd6ed536a4299015e58eeb2673
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -76,37 +76,37 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
protected override void SetLayer()
|
protected override void SetLayer()
|
||||||
{
|
{
|
||||||
switch (AiStat.AiType)
|
// switch (AiStat.AiType)
|
||||||
{
|
// {
|
||||||
case EAiType.NONE:
|
// case EAiType.NONE:
|
||||||
break;
|
// break;
|
||||||
case EAiType.PLAYER:
|
// case EAiType.PLAYER:
|
||||||
gameObject.layer = LayerMask.NameToLayer("Player");
|
// gameObject.layer = LayerMask.NameToLayer("Player");
|
||||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
// hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||||
hitBoxCollider.gameObject.tag = "Player";
|
// hitBoxCollider.gameObject.tag = "Player";
|
||||||
TargetLayer = LayerMask.GetMask("Enemy");
|
// TargetLayer = LayerMask.GetMask("Enemy");
|
||||||
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
// archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||||
LayerMask.GetMask("Enemy");
|
// LayerMask.GetMask("Enemy");
|
||||||
break;
|
// break;
|
||||||
case EAiType.PIRATE:
|
// case EAiType.PIRATE:
|
||||||
gameObject.layer = LayerMask.NameToLayer("Pirate");
|
// gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
// hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||||
hitBoxCollider.gameObject.tag = "Pirate";
|
// hitBoxCollider.gameObject.tag = "Pirate";
|
||||||
TargetLayer = LayerMask.GetMask("Enemy");
|
// TargetLayer = LayerMask.GetMask("Enemy");
|
||||||
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
// archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||||
LayerMask.GetMask("Enemy");
|
// LayerMask.GetMask("Enemy");
|
||||||
break;
|
// break;
|
||||||
case EAiType.ENEMY:
|
// case EAiType.ENEMY:
|
||||||
gameObject.layer = LayerMask.NameToLayer("Enemy");
|
// gameObject.layer = LayerMask.NameToLayer("Enemy");
|
||||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
// hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||||
hitBoxCollider.gameObject.tag = "Enemy";
|
// hitBoxCollider.gameObject.tag = "Enemy";
|
||||||
TargetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
// TargetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
||||||
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
// archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||||
LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
// LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
||||||
break;
|
// break;
|
||||||
default:
|
// default:
|
||||||
throw new ArgumentOutOfRangeException();
|
// throw new ArgumentOutOfRangeException();
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (AiStat.AttackerType == EAttackerType.OFFENSE)
|
if (AiStat.AttackerType == EAttackerType.OFFENSE)
|
||||||
{
|
{
|
||||||
@ -249,8 +249,8 @@ namespace BlueWaterProject
|
|||||||
var arrow = arrowPool.Get();
|
var arrow = arrowPool.Get();
|
||||||
var isOffense = AiStat.AttackerType == EAttackerType.OFFENSE;
|
var isOffense = AiStat.AttackerType == EAttackerType.OFFENSE;
|
||||||
|
|
||||||
arrow.SetShootingArrow(leftWeaponContainer.position, transform.position,
|
// arrow.SetShootingArrow(leftWeaponContainer.position, transform.position,
|
||||||
TargetTransform.position + rayOffset, AiStat, AiStat.AiType, AiStat.Inaccuracy, isOffense);
|
// TargetTransform.position + rayOffset, AiStat, AiStat.AiType, AiStat.Inaccuracy, isOffense);
|
||||||
arrow.ShootArrowCoroutine();
|
arrow.ShootArrowCoroutine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
// ReSharper disable once CheckNamespace
|
|
||||||
namespace BlueWaterProject
|
|
||||||
{
|
|
||||||
[CreateAssetMenu(fileName = "AiStatDataSo", menuName = "ScriptableObjects/AiStatData", order = 1)]
|
|
||||||
public class AiStatDataSo : ScriptableObject
|
|
||||||
{
|
|
||||||
public List<AiStat> aiStatDataList = new(GlobalValue.AI_STAT_DATA_CAPACITY);
|
|
||||||
}
|
|
||||||
}
|
|
12
BlueWater/Assets/02.Scripts/Data/EnemyStatDataSo.cs
Normal file
12
BlueWater/Assets/02.Scripts/Data/EnemyStatDataSo.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
[CreateAssetMenu(fileName = "EnemyStatDataSo", menuName = "ScriptableObjects/EnemyStatData", order = 1)]
|
||||||
|
public class EnemyStatDataSo : ScriptableObject
|
||||||
|
{
|
||||||
|
public List<EnemyStat> enemyStatDataList = new(GlobalValue.ENEMY_STAT_DATA_CAPACITY);
|
||||||
|
}
|
||||||
|
}
|
12
BlueWater/Assets/02.Scripts/Data/PirateStatDataSo.cs
Normal file
12
BlueWater/Assets/02.Scripts/Data/PirateStatDataSo.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
// ReSharper disable once CheckNamespace
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
[CreateAssetMenu(fileName = "PirateStatDataSo", menuName = "ScriptableObjects/PirateStatData", order = 1)]
|
||||||
|
public class PirateStatDataSo : ScriptableObject
|
||||||
|
{
|
||||||
|
public List<PirateStat> pirateStatDataList = new(GlobalValue.PIRATE_STAT_DATA_CAPACITY);
|
||||||
|
}
|
||||||
|
}
|
11
BlueWater/Assets/02.Scripts/Data/PirateStatDataSo.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Data/PirateStatDataSo.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f7c2e9bf391cbc2458b6eacd61baed5c
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -49,7 +49,7 @@ namespace BlueWaterProject
|
|||||||
private void InitDictionary()
|
private void InitDictionary()
|
||||||
{
|
{
|
||||||
aiViewDictionary = CreateDictionaryFromList(AiViewDataSo.aiViewDataList, GlobalValue.AI_VIEW_DATA_CAPACITY);
|
aiViewDictionary = CreateDictionaryFromList(AiViewDataSo.aiViewDataList, GlobalValue.AI_VIEW_DATA_CAPACITY);
|
||||||
aiStatDictionary = CreateDictionaryFromList(AiStatDataSo.aiStatDataList, GlobalValue.AI_STAT_DATA_CAPACITY);
|
aiStatDictionary = CreateDictionaryFromList(AiStatDataSo.aiStatDataList, GlobalValue.ENEMY_STAT_DATA_CAPACITY);
|
||||||
unitDictionary = CreateDictionaryFromList(UnitDataSo.unitDataList, GlobalValue.UNIT_DATA_CAPACITY);
|
unitDictionary = CreateDictionaryFromList(UnitDataSo.unitDataList, GlobalValue.UNIT_DATA_CAPACITY);
|
||||||
cardDictionary = CreateDictionaryFromList(CardDataSo.cardDataList, GlobalValue.CARD_DATA_CAPACITY);
|
cardDictionary = CreateDictionaryFromList(CardDataSo.cardDataList, GlobalValue.CARD_DATA_CAPACITY);
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,8 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
public const int CARD_DATA_CAPACITY = 50;
|
public const int CARD_DATA_CAPACITY = 50;
|
||||||
public const int AI_VIEW_DATA_CAPACITY = 50;
|
public const int AI_VIEW_DATA_CAPACITY = 50;
|
||||||
public const int AI_STAT_DATA_CAPACITY = 50;
|
public const int ENEMY_STAT_DATA_CAPACITY = 50;
|
||||||
|
public const int PIRATE_STAT_DATA_CAPACITY = 50;
|
||||||
public const int UNIT_DATA_CAPACITY = 50;
|
public const int UNIT_DATA_CAPACITY = 50;
|
||||||
public const int ISLAND_DATA_CAPACITY = 50;
|
public const int ISLAND_DATA_CAPACITY = 50;
|
||||||
public const int ONE_UNIT_CAPACITY = 16;
|
public const int ONE_UNIT_CAPACITY = 16;
|
||||||
|
@ -8842,9 +8842,8 @@ GameObject:
|
|||||||
- component: {fileID: 4733059974554311748}
|
- component: {fileID: 4733059974554311748}
|
||||||
- component: {fileID: 8419222071034356516}
|
- component: {fileID: 8419222071034356516}
|
||||||
- component: {fileID: 4265671296278834780}
|
- component: {fileID: 4265671296278834780}
|
||||||
- component: {fileID: 2760820819000917674}
|
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: BaseCharacter
|
m_Name: BaseHuman
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
@ -8963,46 +8962,6 @@ CapsuleCollider:
|
|||||||
m_Height: 1.6
|
m_Height: 1.6
|
||||||
m_Direction: 1
|
m_Direction: 1
|
||||||
m_Center: {x: 0, y: 0.8, z: 0}
|
m_Center: {x: 0, y: 0.8, z: 0}
|
||||||
--- !u!114 &2760820819000917674
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 155132}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 8d7b55c7ecdb49a4a89fa5e6f9022861, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
startWhenEnabled: 1
|
|
||||||
asynchronousLoad: 0
|
|
||||||
pauseWhenDisabled: 0
|
|
||||||
restartWhenComplete: 0
|
|
||||||
logTaskChanges: 0
|
|
||||||
group: 0
|
|
||||||
resetValuesOnRestart: 0
|
|
||||||
externalBehavior: {fileID: 11400000, guid: 694a519b491de404d83985622db4d827, type: 2}
|
|
||||||
mBehaviorSource:
|
|
||||||
behaviorName: Behavior
|
|
||||||
behaviorDescription:
|
|
||||||
mTaskData:
|
|
||||||
types: []
|
|
||||||
parentIndex:
|
|
||||||
startIndex:
|
|
||||||
variableStartIndex:
|
|
||||||
JSONSerialization: '{"Variables":[{"Type":"BehaviorDesigner.Runtime.SharedAttackerType","Name":"AttackerType","IsShared":true,"EAttackerTypemValue":"NONE"}]}'
|
|
||||||
fieldSerializationData:
|
|
||||||
typeName: []
|
|
||||||
fieldNameHash:
|
|
||||||
startIndex:
|
|
||||||
dataPosition:
|
|
||||||
unityObjects: []
|
|
||||||
byteData:
|
|
||||||
byteDataArray:
|
|
||||||
Version: 1.7.7
|
|
||||||
gizmoViewMode: 2
|
|
||||||
showBehaviorDesignerGizmo: 1
|
|
||||||
--- !u!1 &156456
|
--- !u!1 &156456
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
Loading…
Reference in New Issue
Block a user