Ai 전체 구조 변경 중

This commit is contained in:
NTG_Lenovo 2023-09-12 16:41:11 +09:00
parent 639ee838bc
commit fd050c4f68
57 changed files with 776 additions and 179 deletions

View File

@ -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;

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class BaseAi : MonoBehaviour
{
}
}

View File

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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 22754cea389b9fc49a6a943b90c2710a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 76fb3986699b27a49b77bbe71fa5056d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class EnemyAi : HumanAi
{
}
}

View File

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

View File

@ -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

View File

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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bd54d1697b7a75545858c144d17671c0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class EnemyArcher : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class EnemySpearKnight : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class EnemySpearman : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class EnemySwordKnight : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class EnemySwordman : EnemyAi
{
}
}

View File

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

View 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
}
}

View File

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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7412cdde0dbfd14478199e8a4696df03
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class PirateAi : HumanAi
{
}
}

View File

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

View 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
}
}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 35a6ee5b069c43a4784c5698d137f33d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class PirateArcher : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class PirateAxeman : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class PirateSpearman : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class PirateSwordKnight : EnemyAi
{
}
}

View File

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

View File

@ -0,0 +1,10 @@
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class PirateSwordman : EnemyAi
{
}
}

View File

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

View File

@ -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();
} }

View File

@ -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);
}
}

View 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);
}
}

View 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);
}
}

View File

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

View File

@ -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);
} }

View File

@ -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;

View File

@ -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