closed #27 AiView, AiStat, Unit, Card SO 추가

1.enum 변수들 NONE = 0 -> NONE = -1 변경
2.meleeWeapon -> closeWeapon 이름 변경
3.BaseCharacter(기본캐릭터) 조립형 프리팹 수정
This commit is contained in:
NTG 2023-08-29 04:52:23 +09:00
parent 8a54f64a2e
commit 6438ca89a0
54 changed files with 2993 additions and 1055 deletions

File diff suppressed because it is too large Load Diff

View File

@ -12,21 +12,21 @@ namespace BlueWaterProject
{
public enum AttackerType
{
NONE,
NONE = -1,
OFFENSE,
DEFENSE
}
public enum OffenseType
{
NONE,
NONE = -1,
NORMAL,
ONLY_HOUSE
}
public enum DefenseType
{
NONE,
NONE = -1,
NORMAL,
}
@ -74,7 +74,7 @@ namespace BlueWaterProject
private CapsuleCollider myCollider;
private CapsuleCollider hitBoxCollider;
protected Transform weaponLocation;
protected MeleeWeapon meleeWeapon;
protected CloseWeapon closeWeapon;
private static readonly int SpeedHash = Animator.StringToHash("Speed");
protected static readonly int AttackHash = Animator.StringToHash("Attack");
@ -113,8 +113,8 @@ namespace BlueWaterProject
private void Start()
{
SetCurrentHp(AiStat.maxHp);
SetMoveSpeed(AiStat.moveSpd);
SetCurrentHp(AiStat.MaxHp);
SetMoveSpeed(AiStat.MoveSpd);
switch (attackerType)
{
@ -155,7 +155,7 @@ namespace BlueWaterProject
if (mouseEnterUnitController == unitSelection.SelectedUnitController) return;
foreach (var soldier in mouseEnterUnitController.unit.soldierList)
foreach (var soldier in mouseEnterUnitController.unit.UnitList)
{
soldier.MouseEnterHighlight();
}
@ -165,7 +165,7 @@ namespace BlueWaterProject
{
if (!mouseEnterUnitController || mouseEnterUnitController == unitSelection.SelectedUnitController) return;
foreach (var soldier in mouseEnterUnitController.unit.soldierList)
foreach (var soldier in mouseEnterUnitController.unit.UnitList)
{
soldier.ResetHighlight();
}
@ -183,8 +183,8 @@ namespace BlueWaterProject
[field: Title("AiStat")]
[field: SerializeField] public AiStat AiStat { get; set; } = new();
public float GetCurrentHp() => AiStat.currentHp;
public void SetCurrentHp(float value) => AiStat.currentHp = value;
public float GetCurrentHp() => AiStat.CurrentHp;
public void SetCurrentHp(float value) => AiStat.CurrentHp = value;
public void TakeDamage(AiStat attacker, AiStat defender, Vector3? attackPos = null)
{
@ -194,7 +194,7 @@ namespace BlueWaterProject
}
// 회피 성공 체크
if (Random.Range(0, 100) < defender.avoidanceRate)
if (Random.Range(0, 100) < defender.AvoidanceRate)
{
// TODO : 회피 처리
return;
@ -208,7 +208,7 @@ namespace BlueWaterProject
aiAnimator.SetTrigger(ShieldHash);
return;
}
var changeHp = Mathf.Max(defender.currentHp - finalDamage, 0);
var changeHp = Mathf.Max(defender.CurrentHp - finalDamage, 0);
SetCurrentHp(changeHp);
// 죽었는지 체크
@ -438,7 +438,7 @@ namespace BlueWaterProject
case MoveType.FIXED:
break;
case MoveType.MOVE:
if (Vector3.Distance(transform.position, attackPos) > AiStat.atkRange)
if (Vector3.Distance(transform.position, attackPos) > AiStat.AtkRange)
{
myUnitController.MoveCommand(attackPos);
}
@ -477,8 +477,8 @@ namespace BlueWaterProject
}
isAttacking = true;
meleeWeapon.SetIsAttacked(false);
meleeWeapon.SetAttackerStat(AiStat);
closeWeapon.SetIsAttacked(false);
closeWeapon.SetAttackerStat(AiStat);
aiAnimator.SetTrigger(AttackHash);
while (isAttacking)
@ -486,7 +486,7 @@ namespace BlueWaterProject
yield return null;
}
yield return new WaitForSeconds(AiStat.atkCooldown);
yield return new WaitForSeconds(AiStat.AtkCooldown);
}
}
@ -495,7 +495,7 @@ namespace BlueWaterProject
if (!TargetTransform || !IslandInfo.TargetAllList.Contains(TargetTransform)) return false;
var targetInAttackRange = Vector3.Distance(transform.position, TargetTransform.position) <=
AiStat.atkRange;
AiStat.AtkRange;
if (targetInAttackRange)
{

View File

@ -1,7 +1,6 @@
using System;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.Serialization;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
@ -9,38 +8,116 @@ namespace BlueWaterProject
[Serializable]
public class AiStat
{
[Tooltip("캐릭터 최대 체력")]
public float maxHp;
[Tooltip("캐릭터 현재 체력")]
public float currentHp;
[Tooltip("공격력")]
public float atk;
[Tooltip("방어력")]
public float def;
[Tooltip("이동속도")]
public float moveSpd;
[Tooltip("공격속도(다음 공격 주기)")]
public float atkCooldown;
[Tooltip("공격 사거리")]
public float atkRange;
#region Property and variable
[Tooltip("방패 캐릭터를 공격했을 때, 방패 관통률")]
[Range(0, 100)] public int shieldPenetrationRate;
[field: Tooltip("고유 인덱스")]
[field: SerializeField] public string Idx { get; set; }
[field: Tooltip("캐릭터 모델 인덱스")]
[field: SerializeField] public string ViewIdx { 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 AtkRange { get; set; }
[Tooltip("공격을 피할 수 있는 회피율")]
[Range(0, 100)] public int avoidanceRate;
[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; }
[Tooltip("캐릭터의 방패 사용 유무")]
public bool usingShield;
[field: Tooltip("캐릭터의 방패 사용 유무")]
[field: SerializeField] public bool UsingShield { get; set; }
[ShowIf("@usingShield == true")]
[Tooltip("방패 캐릭터가 관통 당할 확률을 줄여주는 관통 저항률")]
[Range(0, 100)] public int penetrationResistivity;
[field: Tooltip("방패 캐릭터가 관통 당할 확률을 줄여주는 관통 저항률")]
[field: ShowIf("@UsingShield == true")]
[field: Range(0, 100)]
[field: SerializeField] public int PenetrationResistivity { get; set; }
#endregion
#region Constructor
/// <summary>
/// 기본 생성자
/// </summary>
public AiStat()
{
Idx = null;
ViewIdx = null;
MaxHp = 0f;
CurrentHp = 0f;
Atk = 0f;
Def = 0f;
MoveSpd = 0f;
AtkCooldown = 0f;
AtkRange = 0f;
ShieldPenetrationRate = 0;
AvoidanceRate = 0;
UsingShield = false;
PenetrationResistivity = 0;
}
/// <summary>
/// 일반 생성자
/// </summary>
public AiStat(string idx, string viewIdx, float maxHp, float currentHp, float atk, float def, float moveSpd,
float atkCooldown, float atkRange, int shieldPenetrationRate, int avoidanceRate, bool usingShield, int penetrationResistivity)
{
Idx = idx;
ViewIdx = viewIdx;
MaxHp = maxHp;
CurrentHp = currentHp;
Atk = atk;
Def = def;
MoveSpd = moveSpd;
AtkCooldown = atkCooldown;
AtkRange = atkRange;
ShieldPenetrationRate = shieldPenetrationRate;
AvoidanceRate = avoidanceRate;
UsingShield = usingShield;
PenetrationResistivity = penetrationResistivity;
}
/// <summary>
/// 복사 생성자
/// </summary>
public AiStat(AiStat aiStat)
{
Idx = aiStat.Idx;
ViewIdx = aiStat.ViewIdx;
MaxHp = aiStat.MaxHp;
CurrentHp = aiStat.CurrentHp;
Atk = aiStat.Atk;
Def = aiStat.Def;
MoveSpd = aiStat.MoveSpd;
AtkCooldown = aiStat.AtkCooldown;
AtkRange = aiStat.AtkRange;
ShieldPenetrationRate = aiStat.ShieldPenetrationRate;
AvoidanceRate = aiStat.AvoidanceRate;
UsingShield = aiStat.UsingShield;
PenetrationResistivity = aiStat.PenetrationResistivity;
}
#endregion
}
}

View File

@ -0,0 +1,88 @@
using System;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[Serializable]
public class AiView
{
#region Property and variable
[field: Tooltip("고유 인덱스")]
[field: SerializeField] public string Idx { get; set; }
[field: Tooltip("등에 메고 다닐 모델\n화살통 등")]
[field: SerializeField] public int BackPack { get; set; }
[field: Tooltip("왼손 무기 모델\n활, 스태프 등")]
[field: SerializeField] public int LeftWeapon { get; set; }
[field: Tooltip("왼손 방패 모델")]
[field: SerializeField] public int LeftShield { get; set; }
[field: Tooltip("머리 전체 모델")]
[field: SerializeField] public int Head { get; set; }
[field: Tooltip("오른손 무기 모델\n왼손 무기를 제외한 무기 등")]
[field: SerializeField] public int RightWeapon { get; set; }
[field: Tooltip("몸통 및 팔, 다리 전체 모델")]
[field: SerializeField] public int Body { get; set; }
[field: Tooltip("부대 깃발 모델")]
[field: SerializeField] public int Flag { get; set; }
#endregion
#region Constructor
/// <summary>
/// 기본 생성자
/// </summary>
public AiView()
{
Idx = null;
BackPack = -1;
LeftWeapon = -1;
LeftShield = -1;
Head = -1;
RightWeapon = -1;
Body = -1;
Flag = -1;
}
/// <summary>
/// 일반 생성자
/// </summary>
public AiView(string idx, int backPack, int leftWeapon, int leftShield, int head, int rightWeapon, int body, int flag)
{
Idx = idx;
BackPack = backPack;
LeftWeapon = leftWeapon;
LeftShield = leftShield;
Head = head;
RightWeapon = rightWeapon;
Body = body;
Flag = flag;
}
/// <summary>
/// 복사 생성자
/// </summary>
public AiView(AiView aiView)
{
Idx = aiView.Idx;
BackPack = aiView.BackPack;
LeftWeapon = aiView.LeftWeapon;
LeftShield = aiView.LeftShield;
Head = aiView.Head;
RightWeapon = aiView.RightWeapon;
Body = aiView.Body;
Flag = aiView.Flag;
}
#endregion
}
}

View File

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

View File

@ -49,7 +49,7 @@ namespace BlueWaterProject
var targetPos = TargetTransform.position;
var direction = ((targetPos + rayOffset) - (myPos + rayOffset)).normalized;
Debug.DrawRay(myPos + rayOffset, direction * AiStat.atkRange, Color.red);
Debug.DrawRay(myPos + rayOffset, direction * AiStat.AtkRange, Color.red);
}
protected override void Awake()
@ -95,8 +95,8 @@ namespace BlueWaterProject
var targetPos = TargetTransform.position;
var direction = ((targetPos + rayOffset) - (myPos + rayOffset)).normalized;
var targetInAttackRange = Vector3.Distance(myPos, targetPos) <= AiStat.atkRange;
var raycastHitTarget = Physics.Raycast(myPos + rayOffset, direction, out var hit, AiStat.atkRange, archerLayer, QueryTriggerInteraction.Collide);
var targetInAttackRange = Vector3.Distance(myPos, targetPos) <= AiStat.AtkRange;
var raycastHitTarget = Physics.Raycast(myPos + rayOffset, direction, out var hit, AiStat.AtkRange, archerLayer, QueryTriggerInteraction.Collide);
return targetInAttackRange && raycastHitTarget;
}
@ -120,7 +120,7 @@ namespace BlueWaterProject
yield return null;
}
yield return new WaitForSeconds(AiStat.atkCooldown);
yield return new WaitForSeconds(AiStat.AtkCooldown);
}
}

View File

@ -16,10 +16,10 @@ namespace BlueWaterProject
{
if (!weapon.gameObject.activeSelf) continue;
meleeWeapon = weapon.GetComponent<MeleeWeapon>();
closeWeapon = weapon.GetComponent<CloseWeapon>();
break;
}
meleeWeapon.SetAttackerType(attackerType);
closeWeapon.SetAttackerType(attackerType);
}
}
}

View File

@ -16,10 +16,10 @@ namespace BlueWaterProject
{
if (!weapon.gameObject.activeSelf) continue;
meleeWeapon = weapon.GetComponent<MeleeWeapon>();
closeWeapon = weapon.GetComponent<CloseWeapon>();
break;
}
meleeWeapon.SetAttackerType(attackerType);
closeWeapon.SetAttackerType(attackerType);
}
}
}

View File

@ -16,10 +16,10 @@ namespace BlueWaterProject
{
if (!weapon.gameObject.activeSelf) continue;
meleeWeapon = weapon.GetComponent<MeleeWeapon>();
closeWeapon = weapon.GetComponent<CloseWeapon>();
break;
}
meleeWeapon.SetAttackerType(attackerType);
closeWeapon.SetAttackerType(attackerType);
}
}
}

View File

@ -16,10 +16,10 @@ namespace BlueWaterProject
{
if (!weapon.gameObject.activeSelf) continue;
meleeWeapon = weapon.GetComponent<MeleeWeapon>();
closeWeapon = weapon.GetComponent<CloseWeapon>();
break;
}
meleeWeapon.SetAttackerType(attackerType);
closeWeapon.SetAttackerType(attackerType);
}
}
}

View File

@ -16,10 +16,10 @@ namespace BlueWaterProject
{
if (!weapon.gameObject.activeSelf) continue;
meleeWeapon = weapon.GetComponent<MeleeWeapon>();
closeWeapon = weapon.GetComponent<CloseWeapon>();
break;
}
meleeWeapon.SetAttackerType(attackerType);
closeWeapon.SetAttackerType(attackerType);
}
}
}

View File

@ -9,47 +9,93 @@ namespace BlueWaterProject
[Serializable]
public class Unit
{
[field: Tooltip("부대의 이름 또는 영웅의 이름")]
#region Property and variable
[field: Tooltip("고유 인덱스")]
[field: SerializeField] public string Idx { get; set; }
[field: Tooltip("선장의 인덱스")]
[field: SerializeField] public string CaptainStatIdx { get; set; }
[field: Tooltip("선원의 인덱스")]
[field: SerializeField] public string SailorStatIdx { get; set; }
[field: Tooltip("부대의 이름 또는 선장의 이름")]
[field: SerializeField] public string UnitName { get; set; }
[field: Tooltip("부대의 종류")]
[field: OnValueChanged("AttackerTypeAutoSetting")]
[field: SerializeField] public GlobalValue.UnitType UnitType { get; set; }
[field: Tooltip("부대의 병력 수")]
[field: SerializeField] public int SoliderCount { get; set; }
[field: Tooltip("선원의 수")]
[field: Range(0, GlobalValue.ONE_UNIT_CAPACITY - 1)]
[field: SerializeField] public int SailorCount { get; set; }
[field: Tooltip("공격 타입 UnitType에 맞게 자동 설정")]
[field: DisableInEditorMode]
[field: EnumToggleButtons]
[field: SerializeField] public AttackerType AttackerType { get; set; }
[field: ShowIf("AttackerType", AttackerType.OFFENSE)]
//[field: ShowIf("AttackerType", AttackerType.OFFENSE)]
[field: SerializeField] public OffenseType OffenseType { get; set; }
[field: ShowIf("AttackerType", AttackerType.DEFENSE)]
//[field: ShowIf("AttackerType", AttackerType.DEFENSE)]
[field: SerializeField] public DefenseType DefenseType { get; set; }
[field: Tooltip("부대 병력 리스트")]
public List<AiController> soldierList;
public List<AiController> UnitList { get; set; }
#endregion
#region Constructor
public Unit()
{
Idx = null;
CaptainStatIdx = null;
SailorStatIdx = null;
UnitName = null;
UnitType = GlobalValue.UnitType.NONE;
SoliderCount = 0;
soldierList = new List<AiController>();
SailorCount = 0;
AttackerType = AttackerType.NONE;
OffenseType = OffenseType.NONE;
DefenseType = DefenseType.NONE;
UnitList = new List<AiController>(GlobalValue.ONE_UNIT_CAPACITY);
}
public Unit(string idx, string captainIdx, string sailorIdx, string unitName, GlobalValue.UnitType unitType,
int sailorCount, AttackerType attackerType, OffenseType offenseType, DefenseType defenseType, List<AiController> unitList)
{
Idx = idx;
CaptainStatIdx = captainIdx;
SailorStatIdx = sailorIdx;
UnitName = unitName;
UnitType = unitType;
SailorCount = sailorCount;
AttackerType = attackerType;
OffenseType = offenseType;
DefenseType = defenseType;
UnitList = unitList;
}
public Unit(string unitName, GlobalValue.UnitType unitType, int soliderCount, List<AiController> soldierList)
public Unit(Unit unit)
{
this.UnitName = unitName;
this.UnitType = unitType;
this.SoliderCount = soliderCount;
this.soldierList = new List<AiController>(this.SoliderCount);
this.soldierList = soldierList;
Idx = unit.Idx;
CaptainStatIdx = unit.CaptainStatIdx;
SailorStatIdx = unit.SailorStatIdx;
UnitName = unit.UnitName;
UnitType = unit.UnitType;
SailorCount = unit.SailorCount;
AttackerType = unit.AttackerType;
OffenseType = unit.OffenseType;
DefenseType = unit.DefenseType;
UnitList = unit.UnitList;
}
#endregion
#region Custrom method
public void AttackerTypeAutoSetting()
{
if (UnitType.ToString().Contains("_E"))
@ -69,5 +115,8 @@ namespace BlueWaterProject
public void SetAttackerType(AttackerType type) => AttackerType = type;
public void SetOffenseType(OffenseType type) => OffenseType = type;
public void SetDefenseType(DefenseType type) => DefenseType = type;
#endregion
}
}

View File

@ -25,13 +25,13 @@ namespace BlueWaterProject
private void OnDrawGizmosSelected()
{
if (unit == null || unit.SoliderCount <= 0) return;
if (unit == null || unit.SailorCount <= 0) return;
var unitManager = UnitManager.Inst != null ? UnitManager.Inst : FindObjectOfType<UnitManager>();
var matrix = unitManager.UnitMatrices.Find(um => um.soldiers == unit.SoliderCount);
var matrix = unitManager.UnitMatrices.Find(um => um.soldiers == unit.SailorCount);
if (matrix == null) return;
for (var i = 0; i < unit.SoliderCount; i++)
for (var i = 0; i < unit.SailorCount; i++)
{
var row = i / matrix.columns;
var column = i % matrix.columns;
@ -111,7 +111,7 @@ namespace BlueWaterProject
[Button("타입 모두 적용")]
private void SetTypeAll()
{
foreach (var soldier in unit.soldierList)
foreach (var soldier in unit.UnitList)
{
soldier.SetAttackerType(unit.AttackerType);
soldier.SetOffenseType(unit.OffenseType);
@ -123,7 +123,7 @@ namespace BlueWaterProject
public void MoveCommand(Vector3 targetPos)
{
foreach (var soldier in unit.soldierList)
foreach (var soldier in unit.UnitList)
{
soldier.MoveTarget(targetPos);
}
@ -136,7 +136,7 @@ namespace BlueWaterProject
var islandInfo = FindObjectOfType<IslandInfo>();
attackIslandInfo = islandInfo;
foreach (var soldier in unit.soldierList)
foreach (var soldier in unit.UnitList)
{
soldier.IslandInfo = attackIslandInfo;
}
@ -166,10 +166,10 @@ namespace BlueWaterProject
return true;
}
private Color GetCreateUnitButtonColor() => unit.soldierList.Count > 0 ? Color.white : Color.green;
private Color GetCreateUnitButtonColor() => unit.UnitList.Count > 0 ? Color.white : Color.green;
private Color GetAttackerTypeButtonColor()
{
if (unit.soldierList.Count > 0)
if (unit.UnitList.Count > 0)
{
return unit.AttackerType == AttackerType.NONE ? Color.green : Color.white;
}

View File

@ -161,7 +161,7 @@ namespace BlueWaterProject
{
DestroyDeployedSoldiers(unitController);
var baseName = soldierPrefabList[(int)unitController.unit.UnitType - 1].name;
var baseName = soldierPrefabList[(int)unitController.unit.UnitType].name;
if (string.IsNullOrEmpty(unitController.unit.UnitName))
{
@ -189,9 +189,9 @@ namespace BlueWaterProject
}
unitController.gameObject.layer = LayerMask.NameToLayer("Unit");
unitController.unit.soldierList = new List<AiController>(unitController.unit.SoliderCount);
unitController.unit.UnitList = new List<AiController>(unitController.unit.SailorCount);
var matrix = UnitMatrices.Find(um => um.soldiers == unitController.unit.SoliderCount);
var matrix = UnitMatrices.Find(um => um.soldiers == unitController.unit.SailorCount);
if (matrix == null)
{
Debug.LogError("사용할 수 없는 병력의 숫자입니다. UnitManager의 UnitMatrices를 확인해주세요.");
@ -202,7 +202,7 @@ namespace BlueWaterProject
var unitControllerRotation = unitControllerTransform.rotation;
unitControllerTransform.rotation = Quaternion.identity;
for (var i = 0; i < unitController.unit.SoliderCount; i++)
for (var i = 0; i < unitController.unit.SailorCount; i++)
{
var row = i / matrix.columns;
var column = i % matrix.columns;
@ -211,13 +211,13 @@ namespace BlueWaterProject
var zOffset = (row - (matrix.rows - 1) / 2.0f) * SoldierSpacing;
var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset);
var soldierObject = Instantiate(soldierPrefabList[(int)unitController.unit.UnitType - 1], spawnPosition,
var soldierObject = Instantiate(soldierPrefabList[(int)unitController.unit.UnitType], spawnPosition,
Quaternion.identity, unitController.transform).GetComponent<AiController>();
var newSoldierName = $"{baseName}_{i + 1:00}";
soldierObject.name = newSoldierName;
unitController.unit.soldierList.Add(soldierObject);
unitController.unit.UnitList.Add(soldierObject);
soldierObject.gameObject.SetActive(false);
}
unitController.transform.rotation *= unitControllerRotation;
@ -225,7 +225,7 @@ namespace BlueWaterProject
if (unitController.unit.UnitType.ToString().Contains("_E"))
{
unitController.SetAttackerType(AttackerType.DEFENSE);
foreach (var soldier in unitController.unit.soldierList)
foreach (var soldier in unitController.unit.UnitList)
{
soldier.SetAttackerType(AttackerType.DEFENSE);
}
@ -233,7 +233,7 @@ namespace BlueWaterProject
else if (unitController.unit.UnitType.ToString().Contains("_P"))
{
unitController.SetAttackerType(AttackerType.OFFENSE);
foreach (var soldier in unitController.unit.soldierList)
foreach (var soldier in unitController.unit.UnitList)
{
soldier.SetAttackerType(AttackerType.DEFENSE);
}
@ -245,13 +245,13 @@ namespace BlueWaterProject
/// </summary>
public bool CanAssignUnit(UnitController unitController, Vector3 assignPos)
{
if (unitController.unit.soldierList.Count <= 0) return false;
if (unitController.unit.UnitList.Count <= 0) return false;
unitController.transform.position = assignPos;
for (var i = 0; i < unitController.unit.SoliderCount; i++)
for (var i = 0; i < unitController.unit.SailorCount; i++)
{
var soldierPos = unitController.unit.soldierList[i].transform.position;
var soldierPos = unitController.unit.UnitList[i].transform.position;
var ray = new Ray(soldierPos, Vector3.down);
if (Physics.Raycast(ray, out var hit, MaxGroundDistance, GroundLayer))
{
@ -269,7 +269,7 @@ namespace BlueWaterProject
public void AssignUnit(UnitController unitController, Vector3 assignPos)
{
unitController.transform.position = assignPos;
foreach (var item in unitController.unit.soldierList)
foreach (var item in unitController.unit.UnitList)
{
item.gameObject.SetActive(true);
}

View File

@ -62,7 +62,7 @@ namespace BlueWaterProject
// 선택된 부대가 없었을 때,
if (SelectedUnitController == null)
{
foreach (var soldier in unitController.unit.soldierList)
foreach (var soldier in unitController.unit.UnitList)
{
soldier.SelectedHighlight();
}
@ -73,7 +73,7 @@ namespace BlueWaterProject
// 선택된 부대가 이미 선택된 부대일 때,
else if (SelectedUnitController == unitController)
{
foreach (var soldier in SelectedUnitController.unit.soldierList)
foreach (var soldier in SelectedUnitController.unit.UnitList)
{
soldier.ResetHighlight();
}
@ -84,12 +84,12 @@ namespace BlueWaterProject
// 다른 부대가 선택될 때,
else
{
foreach (var soldier in unitController.unit.soldierList)
foreach (var soldier in unitController.unit.UnitList)
{
soldier.SelectedHighlight();
}
foreach (var soldier in SelectedUnitController.unit.soldierList)
foreach (var soldier in SelectedUnitController.unit.UnitList)
{
soldier.ResetHighlight();
}
@ -104,7 +104,7 @@ namespace BlueWaterProject
if (SelectedUnitController == null) return;
// 선택된 부대가 있었을 때,
foreach (var soldier in SelectedUnitController.unit.soldierList)
foreach (var soldier in SelectedUnitController.unit.UnitList)
{
soldier.ResetHighlight();
}
@ -126,7 +126,7 @@ namespace BlueWaterProject
SelectedUnitController.MoveCommand(targetPos);
}
foreach (var soldier in SelectedUnitController.unit.soldierList)
foreach (var soldier in SelectedUnitController.unit.UnitList)
{
soldier.ResetHighlight();
}

View File

@ -0,0 +1,12 @@
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,11 @@
fileFormatVersion: 2
guid: 0b73a9021577a154c991acd5616ad6d9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,12 @@
using System.Collections.Generic;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[CreateAssetMenu(fileName = "AiViewDataSo", menuName = "ScriptableObjects/AiViewData", order = 0)]
public class AiViewDataSo : ScriptableObject
{
public List<AiView> aiViewDataList = new(GlobalValue.AI_VIEW_DATA_CAPACITY);
}
}

View File

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

View File

@ -1,4 +1,3 @@
using System.Collections;
using System.Collections.Generic;
using _02.Scripts.WaterAndShip;
using UnityEngine;
@ -6,7 +5,7 @@ using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[CreateAssetMenu(fileName = "CardDataSo", menuName = "ScriptableObjects/CardData", order = 0)]
[CreateAssetMenu(fileName = "CardDataSo", menuName = "ScriptableObjects/CardData", order = 10)]
public class CardDataSo : ScriptableObject
{
public List<Card> cardDataList = new(GlobalValue.CARD_DATA_CAPACITY);

View File

@ -0,0 +1,275 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0b73a9021577a154c991acd5616ad6d9, type: 3}
m_Name: AiStatDataSo
m_EditorClassIdentifier:
aiStatDataList:
- <Idx>k__BackingField: ai_stat_sailor_e_001
<ViewIdx>k__BackingField: ai_view_sailor_e_001
<MaxHp>k__BackingField: 30
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 0
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 3
<AtkRange>k__BackingField: 15
<ShieldPenetrationRate>k__BackingField: 25
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_e_002
<ViewIdx>k__BackingField: ai_view_sailor_e_002
<MaxHp>k__BackingField: 60
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 40
<Def>k__BackingField: 10
<MoveSpd>k__BackingField: 2
<AtkCooldown>k__BackingField: 2
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 75
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 1
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_e_003
<ViewIdx>k__BackingField: ai_view_sailor_e_003
<MaxHp>k__BackingField: 40
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3
<AtkCooldown>k__BackingField: 2
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 75
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_e_004
<ViewIdx>k__BackingField: ai_view_sailor_e_004
<MaxHp>k__BackingField: 60
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 30
<Def>k__BackingField: 10
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 1
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_e_005
<ViewIdx>k__BackingField: ai_view_sailor_e_005
<MaxHp>k__BackingField: 45
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 35
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 30
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_p_001
<ViewIdx>k__BackingField: ai_view_sailor_p_001
<MaxHp>k__BackingField: 30
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 0
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 3
<AtkRange>k__BackingField: 15
<ShieldPenetrationRate>k__BackingField: 25
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_p_002
<ViewIdx>k__BackingField: ai_view_sailor_p_002
<MaxHp>k__BackingField: 50
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 0
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 2.5
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 100
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_p_003
<ViewIdx>k__BackingField: ai_view_sailor_p_003
<MaxHp>k__BackingField: 40
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3
<AtkCooldown>k__BackingField: 2
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 75
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_p_004
<ViewIdx>k__BackingField: ai_view_sailor_p_004
<MaxHp>k__BackingField: 60
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 30
<Def>k__BackingField: 10
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 1
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_sailor_p_005
<ViewIdx>k__BackingField: ai_view_sailor_p_005
<MaxHp>k__BackingField: 45
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 35
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 30
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_e_001
<ViewIdx>k__BackingField: ai_view_captain_e_001
<MaxHp>k__BackingField: 150
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 0
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 3
<AtkRange>k__BackingField: 15
<ShieldPenetrationRate>k__BackingField: 25
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_e_002
<ViewIdx>k__BackingField: ai_view_captain_e_002
<MaxHp>k__BackingField: 300
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 40
<Def>k__BackingField: 10
<MoveSpd>k__BackingField: 2
<AtkCooldown>k__BackingField: 2
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 75
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 1
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_e_003
<ViewIdx>k__BackingField: ai_view_captain_e_003
<MaxHp>k__BackingField: 200
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3
<AtkCooldown>k__BackingField: 2
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 75
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_e_004
<ViewIdx>k__BackingField: ai_view_captain_e_004
<MaxHp>k__BackingField: 300
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 30
<Def>k__BackingField: 10
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 1
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_e_005
<ViewIdx>k__BackingField: ai_view_captain_e_005
<MaxHp>k__BackingField: 225
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 35
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 30
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_p_001
<ViewIdx>k__BackingField: ai_view_captain_p_001
<MaxHp>k__BackingField: 150
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 0
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 3
<AtkRange>k__BackingField: 15
<ShieldPenetrationRate>k__BackingField: 25
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_p_002
<ViewIdx>k__BackingField: ai_view_captain_p_002
<MaxHp>k__BackingField: 250
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 0
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 2.5
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 100
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_p_003
<ViewIdx>k__BackingField: ai_view_captain_p_003
<MaxHp>k__BackingField: 200
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 50
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3
<AtkCooldown>k__BackingField: 2
<AtkRange>k__BackingField: 1.5
<ShieldPenetrationRate>k__BackingField: 75
<AvoidanceRate>k__BackingField: 20
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_p_004
<ViewIdx>k__BackingField: ai_view_captain_p_004
<MaxHp>k__BackingField: 300
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 30
<Def>k__BackingField: 10
<MoveSpd>k__BackingField: 2.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 10
<UsingShield>k__BackingField: 1
<PenetrationResistivity>k__BackingField: 0
- <Idx>k__BackingField: ai_stat_captain_p_005
<ViewIdx>k__BackingField: ai_view_captain_p_005
<MaxHp>k__BackingField: 225
<CurrentHp>k__BackingField: 0
<Atk>k__BackingField: 35
<Def>k__BackingField: 5
<MoveSpd>k__BackingField: 3.5
<AtkCooldown>k__BackingField: 1.5
<AtkRange>k__BackingField: 1
<ShieldPenetrationRate>k__BackingField: 50
<AvoidanceRate>k__BackingField: 30
<UsingShield>k__BackingField: 0
<PenetrationResistivity>k__BackingField: 0

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2
guid: 4ff1f29eab234cf4490d9bb383892c44
DefaultImporter:
guid: 45c7e0b53956de746a37c2e34cb2eb14
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,175 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c71fe8f0398eaea4e9a1bee5d4a92a64, type: 3}
m_Name: AiViewDataSo
m_EditorClassIdentifier:
aiViewDataList:
- <Idx>k__BackingField: ai_view_sailor_e_001
<BackPack>k__BackingField: 1
<LeftWeapon>k__BackingField: 2
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 16
<RightWeapon>k__BackingField: -1
<Body>k__BackingField: 11
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_e_002
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: 1
<Head>k__BackingField: 46
<RightWeapon>k__BackingField: 27
<Body>k__BackingField: 18
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_e_003
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 35
<RightWeapon>k__BackingField: 27
<Body>k__BackingField: 17
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_e_004
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: 9
<Head>k__BackingField: 33
<RightWeapon>k__BackingField: 6
<Body>k__BackingField: 39
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_e_005
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 25
<RightWeapon>k__BackingField: 28
<Body>k__BackingField: 29
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_p_001
<BackPack>k__BackingField: 0
<LeftWeapon>k__BackingField: 1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 11
<RightWeapon>k__BackingField: -1
<Body>k__BackingField: 1
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_p_002
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 50
<RightWeapon>k__BackingField: 31
<Body>k__BackingField: 58
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_p_003
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 36
<RightWeapon>k__BackingField: 27
<Body>k__BackingField: 60
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_p_004
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: 2
<Head>k__BackingField: 22
<RightWeapon>k__BackingField: 24
<Body>k__BackingField: 58
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_sailor_p_005
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 5
<RightWeapon>k__BackingField: 12
<Body>k__BackingField: 0
<Flag>k__BackingField: -1
- <Idx>k__BackingField: ai_view_captain_e_001
<BackPack>k__BackingField: 1
<LeftWeapon>k__BackingField: 2
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 16
<RightWeapon>k__BackingField: -1
<Body>k__BackingField: 11
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_e_002
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: 1
<Head>k__BackingField: 46
<RightWeapon>k__BackingField: 27
<Body>k__BackingField: 18
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_e_003
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 35
<RightWeapon>k__BackingField: 27
<Body>k__BackingField: 17
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_e_004
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: 9
<Head>k__BackingField: 33
<RightWeapon>k__BackingField: 6
<Body>k__BackingField: 39
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_e_005
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 25
<RightWeapon>k__BackingField: 28
<Body>k__BackingField: 29
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_p_001
<BackPack>k__BackingField: 0
<LeftWeapon>k__BackingField: 1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 11
<RightWeapon>k__BackingField: -1
<Body>k__BackingField: 1
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_p_002
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 50
<RightWeapon>k__BackingField: 31
<Body>k__BackingField: 58
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_p_003
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 36
<RightWeapon>k__BackingField: 27
<Body>k__BackingField: 60
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_p_004
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: 2
<Head>k__BackingField: 22
<RightWeapon>k__BackingField: 24
<Body>k__BackingField: 58
<Flag>k__BackingField: 1
- <Idx>k__BackingField: ai_view_captain_p_005
<BackPack>k__BackingField: -1
<LeftWeapon>k__BackingField: -1
<LeftShield>k__BackingField: -1
<Head>k__BackingField: 5
<RightWeapon>k__BackingField: 12
<Body>k__BackingField: 0
<Flag>k__BackingField: 1

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2
guid: 697b6e7dea1fde146b7e3e5cf3ed9e9f
DefaultImporter:
guid: ae7ec952e14cea8499afd4a7b8ee8dfb
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -14,65 +14,16 @@ MonoBehaviour:
m_EditorClassIdentifier:
cardDataList:
- <Idx>k__BackingField: card_001
<Unit>k__BackingField:
<UnitName>k__BackingField: Legolas
<UnitType>k__BackingField: 6
<SoliderCount>k__BackingField: 6
<AttackerType>k__BackingField: 1
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: 0
soldierList: []
<UnitIdx>k__BackingField: unit_archer_p_001
- <Idx>k__BackingField: card_002
<Unit>k__BackingField:
<UnitName>k__BackingField: Robin Hood
<UnitType>k__BackingField: 6
<SoliderCount>k__BackingField: 4
<AttackerType>k__BackingField: 1
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: 0
soldierList: []
<UnitIdx>k__BackingField: unit_archer_p_002
- <Idx>k__BackingField: card_003
<Unit>k__BackingField:
<UnitName>k__BackingField: Olaf
<UnitType>k__BackingField: 7
<SoliderCount>k__BackingField: 6
<AttackerType>k__BackingField: 1
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: 0
soldierList: []
<UnitIdx>k__BackingField: unit_axeman_p_001
- <Idx>k__BackingField: card_004
<Unit>k__BackingField:
<UnitName>k__BackingField: Lancer
<UnitType>k__BackingField: 8
<SoliderCount>k__BackingField: 8
<AttackerType>k__BackingField: 1
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: 0
soldierList: []
<UnitIdx>k__BackingField: unit_spearman_p_001
- <Idx>k__BackingField: card_005
<Unit>k__BackingField:
<UnitName>k__BackingField:
<UnitType>k__BackingField: 9
<SoliderCount>k__BackingField: 0
<AttackerType>k__BackingField: 1
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: 0
soldierList: []
<UnitIdx>k__BackingField: unit_sword_knight_p_001
- <Idx>k__BackingField: card_006
<Unit>k__BackingField:
<UnitName>k__BackingField: Aragorn
<UnitType>k__BackingField: 10
<SoliderCount>k__BackingField: 9
<AttackerType>k__BackingField: 1
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: 0
soldierList: []
<UnitIdx>k__BackingField: unit_swordman_p_001
- <Idx>k__BackingField: card_007
<Unit>k__BackingField:
<UnitName>k__BackingField: King Arthur
<UnitType>k__BackingField: 10
<SoliderCount>k__BackingField: 6
<AttackerType>k__BackingField: 1
<OffenseType>k__BackingField: 2
<DefenseType>k__BackingField: 0
soldierList: []
<UnitIdx>k__BackingField: unit_swordman_p_002

View File

@ -0,0 +1,78 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3cfd6c9178f4c2a48a79549b238ac772, type: 3}
m_Name: UnitDataSo
m_EditorClassIdentifier:
unitDataList:
- <Idx>k__BackingField: unit_archer_p_001
<CaptainStatIdx>k__BackingField: ai_stat_captain_p_001
<SailorStatIdx>k__BackingField: ai_stat_sailor_p_001
<UnitName>k__BackingField: Legolas
<UnitType>k__BackingField: 5
<SailorCount>k__BackingField: 8
<AttackerType>k__BackingField: 0
<OffenseType>k__BackingField: 0
<DefenseType>k__BackingField: -1
- <Idx>k__BackingField: unit_archer_p_002
<CaptainStatIdx>k__BackingField: ai_stat_captain_p_001
<SailorStatIdx>k__BackingField: ai_stat_sailor_p_001
<UnitName>k__BackingField: Robin Hood
<UnitType>k__BackingField: 5
<SailorCount>k__BackingField: 5
<AttackerType>k__BackingField: 0
<OffenseType>k__BackingField: 0
<DefenseType>k__BackingField: -1
- <Idx>k__BackingField: unit_axeman_p_001
<CaptainStatIdx>k__BackingField: ai_stat_captain_p_002
<SailorStatIdx>k__BackingField: ai_stat_sailor_p_002
<UnitName>k__BackingField: Olaf
<UnitType>k__BackingField: 6
<SailorCount>k__BackingField: 5
<AttackerType>k__BackingField: 0
<OffenseType>k__BackingField: 0
<DefenseType>k__BackingField: -1
- <Idx>k__BackingField: unit_spearman_p_001
<CaptainStatIdx>k__BackingField: ai_stat_captain_p_003
<SailorStatIdx>k__BackingField: ai_stat_sailor_p_003
<UnitName>k__BackingField: Lancer
<UnitType>k__BackingField: 7
<SailorCount>k__BackingField: 7
<AttackerType>k__BackingField: 0
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: -1
- <Idx>k__BackingField: unit_sword_knight_p_001
<CaptainStatIdx>k__BackingField: ai_stat_captain_p_004
<SailorStatIdx>k__BackingField: ai_stat_sailor_p_004
<UnitName>k__BackingField: Achilles
<UnitType>k__BackingField: 8
<SailorCount>k__BackingField: 3
<AttackerType>k__BackingField: 0
<OffenseType>k__BackingField: 0
<DefenseType>k__BackingField: -1
- <Idx>k__BackingField: unit_swordman_p_001
<CaptainStatIdx>k__BackingField: ai_stat_captain_p_005
<SailorStatIdx>k__BackingField: ai_stat_sailor_p_005
<UnitName>k__BackingField: Aragorn
<UnitType>k__BackingField: 9
<SailorCount>k__BackingField: 5
<AttackerType>k__BackingField: 0
<OffenseType>k__BackingField: 1
<DefenseType>k__BackingField: -1
- <Idx>k__BackingField: unit_swordman_p_002
<CaptainStatIdx>k__BackingField: ai_stat_captain_p_005
<SailorStatIdx>k__BackingField: ai_stat_sailor_p_005
<UnitName>k__BackingField: King Arthur
<UnitType>k__BackingField: 9
<SailorCount>k__BackingField: 11
<AttackerType>k__BackingField: 0
<OffenseType>k__BackingField: 0
<DefenseType>k__BackingField: -1

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2
guid: a55ee4efaad27d948ba5f03fc6d7bc80
DefaultImporter:
guid: a017fce7d59b4fc4cb88332a7854eef3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,12 @@
using System.Collections.Generic;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[CreateAssetMenu(fileName = "UnitDataSo", menuName = "ScriptableObjects/UnitData", order = 2)]
public class UnitDataSo : ScriptableObject
{
public List<Unit> unitDataList = new(GlobalValue.UNIT_CAPACITY);
}
}

View File

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

View File

@ -16,7 +16,7 @@ namespace BlueWaterProject
private void Awake()
{
SetCurrentHp(AiStat.maxHp);
SetCurrentHp(AiStat.MaxHp);
}
private void OnDisable()
@ -30,13 +30,13 @@ namespace BlueWaterProject
[field: SerializeField] public AiStat AiStat { get; set; }
public float GetCurrentHp() => AiStat.currentHp;
public float GetCurrentHp() => AiStat.CurrentHp;
public void SetCurrentHp(float value) => AiStat.currentHp = value;
public void SetCurrentHp(float value) => AiStat.CurrentHp = value;
public void TakeDamage(AiStat attacker, AiStat defender, Vector3? attackPos = null)
{
var changeHp = Mathf.Max(defender.currentHp - attacker.atk, 0);
var changeHp = Mathf.Max(defender.CurrentHp - attacker.Atk, 0);
SetCurrentHp(changeHp);
// 건물 파괴

View File

@ -1,5 +1,4 @@
using System;
using BlueWaterProject;
using UnityEngine;
namespace _02.Scripts.WaterAndShip
@ -7,7 +6,10 @@ namespace _02.Scripts.WaterAndShip
[Serializable]
public class Card
{
[field: Tooltip("고유 인덱스")]
[field: SerializeField] public string Idx { get; set; }
[field: SerializeField] public Unit Unit { get; set; }
[field: Tooltip("유닛 인덱스")]
[field: SerializeField] public string UnitIdx { get; set; }
}
}

View File

@ -1,10 +1,14 @@
public class GlobalValue
{
public const int CARD_DATA_CAPACITY = 50;
public const int AI_VIEW_DATA_CAPACITY = 50;
public const int AI_STAT_DATA_CAPACITY = 50;
public const int UNIT_CAPACITY = 50;
public const int ONE_UNIT_CAPACITY = 16;
public enum UnitType
{
NONE = 0,
NONE = -1,
ARCHER_E,
SPEAR_KNIGHT_E,
SPEARMAN_E,

View File

@ -91,15 +91,15 @@ namespace BlueWaterProject
{
var finalDamage = 0f;
if (defender.usingShield)
if (defender.UsingShield)
{
var penetrationChance = attacker.shieldPenetrationRate -
(attacker.shieldPenetrationRate * defender.penetrationResistivity * 0.01f);
var penetrationChance = attacker.ShieldPenetrationRate -
(attacker.ShieldPenetrationRate * defender.PenetrationResistivity * 0.01f);
// 방패를 관통했다면,
if (Random.Range(0, 100) < penetrationChance)
{
finalDamage = attacker.atk - defender.def;
finalDamage = attacker.Atk - defender.Def;
finalDamage = Mathf.Max(finalDamage, 0);
return finalDamage;
}
@ -108,7 +108,7 @@ namespace BlueWaterProject
return 0;
}
finalDamage = attacker.atk - defender.def;
finalDamage = attacker.Atk - defender.Def;
finalDamage = Mathf.Max(finalDamage, 0);
return finalDamage;

View File

@ -4,7 +4,7 @@ using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class MeleeWeapon : MonoBehaviour
public class CloseWeapon : MonoBehaviour
{
#region Property and variable

View File

@ -8930,7 +8930,7 @@ Transform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!95 &9542722
Animator:
serializedVersion: 5
serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@ -8944,6 +8944,7 @@ Animator:
m_ApplyRootMotion: 1
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_AnimatePhysics: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
@ -9089,7 +9090,6 @@ MonoBehaviour:
- {fileID: 0}
- {fileID: 0}
<TargetTransform>k__BackingField: {fileID: 0}
<MovePos>k__BackingField: {x: 0, y: 0, z: 0}
<AttackMoveType>k__BackingField: 2
<BeAttackedMoveType>k__BackingField: 1
<IsCommanded>k__BackingField: 0

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ed9b95dc6ed6d0647ad7f1a8f305385d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 078b8f13a17171b49892ad10426d5af0
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: f9406a33814af9c47b352e77f079d798
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 9aacf6f3043624194bb6f6fe9a580786
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,14 +0,0 @@
fileFormatVersion: 2
guid: f4227764308e84f89a765fbf315e2945
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 143368
packageName: 'Flat Kit: Toon Shading and Water'
packageVersion: 3.9.1
assetPath: Assets/FlatKit/[Render Pipeline] Built-In.unitypackage
uploadId: 607933

View File

@ -1,14 +0,0 @@
fileFormatVersion: 2
guid: 41e59f562b69648719f2424c438758f3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 143368
packageName: 'Flat Kit: Toon Shading and Water'
packageVersion: 3.9.1
assetPath: Assets/FlatKit/[Render Pipeline] Universal (URP).unitypackage
uploadId: 607933

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: b044a2387a61dac41bdf204adffdce9d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: cd287c84e887ea24a8679e67aac7c074
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 5f3f53ee059b45a4d9a5b9fc75e8aea9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: f211254f5bfad224ba88868f2c75432c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 4368c9be31b3c174dbfd80f2caf98889
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: f597f19f656ba56eae4f6a3a7cc528f4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 48e08dc33330d11e9d4a1b246c52e4f6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ed09910c0094cb27be8f3ca264680da3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: cc355dd4cf1e6173beaeb22c2858cbe1
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -18,7 +18,7 @@ PlayerSettings:
cursorHotspot: {x: 0, y: 0}
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
m_ShowUnitySplashScreen: 1
m_ShowUnitySplashLogo: 0
m_ShowUnitySplashLogo: 1
m_SplashScreenOverlayOpacity: 1
m_SplashScreenAnimation: 1
m_SplashScreenLogoStyle: 1
@ -809,7 +809,7 @@ PlayerSettings:
PS5: UNITY_POST_PROCESSING_STACK_V2;INPUT_SYSTEM_PACKAGE
QNX: UNITY_POST_PROCESSING_STACK_V2;INPUT_SYSTEM_PACKAGE
Stadia: UNITY_POST_PROCESSING_STACK_V2;INPUT_SYSTEM_PACKAGE
Standalone: CROSS_PLATFORM_INPUT;UNITY_POST_PROCESSING_STACK_V2;NWH_DWP2;CREST_OCEAN;DWP_CREST;ODIN_INSPECTOR;ODIN_INSPECTOR_3;ODIN_INSPECTOR_3_1;INPUT_SYSTEM_PACKAGE;MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED
Standalone: CROSS_PLATFORM_INPUT;UNITY_POST_PROCESSING_STACK_V2;NWH_DWP2;CREST_OCEAN;DWP_CREST;ODIN_INSPECTOR;ODIN_INSPECTOR_3;ODIN_INSPECTOR_3_1;INPUT_SYSTEM_PACKAGE;MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED;ODIN_INSPECTOR_EDITOR_ONLY
VisionOS: UNITY_POST_PROCESSING_STACK_V2;INPUT_SYSTEM_PACKAGE
WebGL: UNITY_POST_PROCESSING_STACK_V2;INPUT_SYSTEM_PACKAGE
Windows Store Apps: UNITY_POST_PROCESSING_STACK_V2;INPUT_SYSTEM_PACKAGE