Ai 상속 구조 변경 중2
This commit is contained in:
parent
5a56a9039b
commit
12ff50f646
File diff suppressed because it is too large
Load Diff
@ -11,11 +11,14 @@ namespace BlueWaterProject
|
|||||||
#region Properties and variables
|
#region Properties and variables
|
||||||
|
|
||||||
// 일반 변수
|
// 일반 변수
|
||||||
|
protected bool isDrawGizmosInFieldOfView = true;
|
||||||
protected LayerMask targetLayer;
|
protected LayerMask targetLayer;
|
||||||
protected Vector3 defensePos;
|
protected Vector3 defensePos;
|
||||||
|
|
||||||
|
protected IslandInfo attackingIslandInfo;
|
||||||
|
|
||||||
// 컴포넌트 관련 변수
|
// 컴포넌트 관련 변수
|
||||||
protected Animator humanAnimator;
|
protected Animator combatAnimator;
|
||||||
protected NavMeshAgent humanAgent;
|
protected NavMeshAgent humanAgent;
|
||||||
protected CapsuleCollider myCollider;
|
protected CapsuleCollider myCollider;
|
||||||
protected CapsuleCollider hitBoxCollider;
|
protected CapsuleCollider hitBoxCollider;
|
||||||
@ -44,7 +47,7 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
protected override void Awake()
|
protected override void Awake()
|
||||||
{
|
{
|
||||||
base.InitComponent();
|
base.Awake();
|
||||||
|
|
||||||
FlagLookAtCamera();
|
FlagLookAtCamera();
|
||||||
SetLayer();
|
SetLayer();
|
||||||
@ -58,14 +61,14 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
base.InitComponent();
|
base.InitComponent();
|
||||||
|
|
||||||
humanAnimator = Utils.GetComponentAndAssert<Animator>(transform);
|
combatAnimator = Utils.GetComponentAndAssert<Animator>(transform);
|
||||||
humanAgent = Utils.GetComponentAndAssert<NavMeshAgent>(transform);
|
humanAgent = Utils.GetComponentAndAssert<NavMeshAgent>(transform);
|
||||||
myCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform);
|
myCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform);
|
||||||
hitBoxCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform.Find("HitBox"));
|
hitBoxCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform.Find("HitBox"));
|
||||||
lookAtConstraint = Utils.GetComponentAndAssert<LookAtConstraint>(flagContainer);
|
lookAtConstraint = Utils.GetComponentAndAssert<LookAtConstraint>(flagContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FlagLookAtCamera()
|
protected void FlagLookAtCamera()
|
||||||
{
|
{
|
||||||
if (Camera.main != null)
|
if (Camera.main != null)
|
||||||
{
|
{
|
||||||
@ -80,7 +83,10 @@ namespace BlueWaterProject
|
|||||||
lookAtConstraint.constraintActive = true;
|
lookAtConstraint.constraintActive = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void SetAnimatorController(string controllerName) => combatAnimator.runtimeAnimatorController =
|
||||||
|
UnitManager.Inst.AIAnimatorControllerList.Find(obj => obj.name == controllerName);
|
||||||
protected void SetMoveSpeed(float value) => humanAgent.speed = value;
|
protected void SetMoveSpeed(float value) => humanAgent.speed = value;
|
||||||
|
public void SetIslandInfo(IslandInfo info) => attackingIslandInfo = info;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
#region Properties and variables
|
#region Properties and variables
|
||||||
|
|
||||||
protected EnemyStat enemyStat;
|
[field: SerializeField] public EnemyStat EnemyStat { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -30,21 +30,34 @@ namespace BlueWaterProject
|
|||||||
hitBoxObj.tag = "Enemy";
|
hitBoxObj.tag = "Enemy";
|
||||||
targetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
targetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
||||||
|
|
||||||
if (enemyStat.AttackerType == EAttackerType.OFFENSE)
|
if (EnemyStat.AttackerType == EAttackerType.OFFENSE)
|
||||||
{
|
{
|
||||||
targetLayer |= LayerMask.GetMask("Props");
|
targetLayer |= LayerMask.GetMask("Props");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
public virtual void InitStartInEditor()
|
||||||
|
{
|
||||||
|
var enemyViewData = DataManager.Inst.GetEnemyViewSoFromKey(EnemyStat.ViewIdx);
|
||||||
|
|
||||||
|
InitComponent();
|
||||||
|
SetLayer();
|
||||||
|
InitViewModel(enemyViewData);
|
||||||
|
SetCurrentHp(EnemyStat.MaxHp);
|
||||||
|
SetMoveSpeed(EnemyStat.MoveSpd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected virtual void InitStart()
|
protected virtual void InitStart()
|
||||||
{
|
{
|
||||||
var enemyViewData = GetEnemyViewData();
|
var enemyViewData = DataManager.Inst.GetEnemyViewDictionaryFromKey(EnemyStat.ViewIdx);
|
||||||
|
|
||||||
InitViewModel(enemyViewData);
|
InitViewModel(enemyViewData);
|
||||||
SetCurrentHp(enemyStat.MaxHp);
|
SetCurrentHp(EnemyStat.MaxHp);
|
||||||
SetMoveSpeed(enemyStat.MoveSpd);
|
SetMoveSpeed(EnemyStat.MoveSpd);
|
||||||
|
|
||||||
if (enemyStat.AttackerType == EAttackerType.DEFENSE)
|
if (EnemyStat.AttackerType == EAttackerType.DEFENSE)
|
||||||
{
|
{
|
||||||
defensePos = transform.position;
|
defensePos = transform.position;
|
||||||
}
|
}
|
||||||
@ -61,11 +74,10 @@ namespace BlueWaterProject
|
|||||||
SetActiveViewModel(flagContainer, enemyView.Flag);
|
SetActiveViewModel(flagContainer, enemyView.Flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SetCurrentHp(float value) => enemyStat.CurrentHp = value;
|
protected override void SetCurrentHp(float value) => EnemyStat.CurrentHp = value;
|
||||||
|
public void SetAttackerType(EAttackerType type) => EnemyStat.AttackerType = type;
|
||||||
private EnemyView GetEnemyViewData() => Application.isPlaying ?
|
public void SetOffenseType(EOffenseType type) => EnemyStat.OffenseType = type;
|
||||||
DataManager.Inst.GetEnemyViewDictionaryFromKey(enemyStat.ViewIdx) :
|
public void SetDefenseType(EDefenseType type) => EnemyStat.DefenseType = type;
|
||||||
DataManager.Inst.GetEnemyViewSoFromKey(enemyStat.ViewIdx);
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,101 @@
|
|||||||
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Pool;
|
||||||
|
|
||||||
// ReSharper disable once CheckNamespace
|
// ReSharper disable once CheckNamespace
|
||||||
namespace BlueWaterProject
|
namespace BlueWaterProject
|
||||||
{
|
{
|
||||||
public class EnemyArcher : EnemyAi
|
public class EnemyArcher : EnemyAi
|
||||||
{
|
{
|
||||||
|
#region Property and variable
|
||||||
|
|
||||||
|
[Header("화살 오브젝트 관리")]
|
||||||
|
[Tooltip("화살 오브젝트 풀링할 최대 갯수")]
|
||||||
|
[SerializeField] private int arrowMaxSize = 100;
|
||||||
|
|
||||||
|
[Tooltip("화살 발사 후 오브젝트 저장될 위치")]
|
||||||
|
[SerializeField] private Transform arrowsPoolLocation;
|
||||||
|
|
||||||
|
[SerializeField] private LayerMask archerLayer;
|
||||||
|
|
||||||
|
private IEnumerator shootArrowCoroutine;
|
||||||
|
|
||||||
|
private IObjectPool<Arrow> arrowPool;
|
||||||
|
|
||||||
|
[SerializeField] private Vector3 rayOffset = new(0f, 2f, 0);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Custom methods
|
||||||
|
|
||||||
|
protected override void InitComponent()
|
||||||
|
{
|
||||||
|
base.InitComponent();
|
||||||
|
|
||||||
|
var animatorControllerList = UnitManager.Inst.AIAnimatorControllerList;
|
||||||
|
if (animatorControllerList == null)
|
||||||
|
{
|
||||||
|
Debug.LogError("Animator Controller List is null!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var archerController = animatorControllerList.Find(obj => obj.name == "Archer");
|
||||||
|
if (archerController == null)
|
||||||
|
{
|
||||||
|
Debug.LogError("No AnimatorController named 'Archer' was found in the list.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
combatAnimator.runtimeAnimatorController = archerController;
|
||||||
|
arrowsPoolLocation = GameObject.Find("ObjectPoolData/Arrows").transform;
|
||||||
|
|
||||||
|
if (!arrowsPoolLocation)
|
||||||
|
{
|
||||||
|
var objectPoolData = GameObject.Find("ObjectPoolData").transform;
|
||||||
|
if (!objectPoolData)
|
||||||
|
{
|
||||||
|
objectPoolData = new GameObject("ObjectPoolData").transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!objectPoolData.Find("Arrows"))
|
||||||
|
{
|
||||||
|
Instantiate(new GameObject("Arrows"), Vector3.zero, Quaternion.identity, objectPoolData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arrowPool = new ObjectPool<Arrow>(CreateArrow, OnGetArrow, OnReleaseArrow, OnDestroyArrow, maxSize:arrowMaxSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SetLayer()
|
||||||
|
{
|
||||||
|
base.SetLayer();
|
||||||
|
|
||||||
|
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||||
|
LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate") |
|
||||||
|
LayerMask.GetMask("Props");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void InitStart()
|
||||||
|
{
|
||||||
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("Archer");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ObjectPool Function
|
||||||
|
|
||||||
|
private Arrow CreateArrow()
|
||||||
|
{
|
||||||
|
var arrow = Instantiate(UnitManager.Inst.ArrowPrefab, leftWeaponContainer.position, Quaternion.identity, arrowsPoolLocation).GetComponent<Arrow>();
|
||||||
|
arrow.SetManagedPool(arrowPool);
|
||||||
|
return arrow;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGetArrow(Arrow arrow) => arrow.gameObject.SetActive(true);
|
||||||
|
private void OnReleaseArrow(Arrow arrow) => arrow.ReleaseArrowSetting();
|
||||||
|
private void OnDestroyArrow(Arrow arrow) => Destroy(arrow.gameObject);
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,18 +6,36 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
public class EnemySpearKnight : EnemyAi
|
public class EnemySpearKnight : EnemyAi
|
||||||
{
|
{
|
||||||
|
#region Properties and variables
|
||||||
|
|
||||||
private CloseWeapon closeWeapon;
|
private CloseWeapon closeWeapon;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Custrom methods
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
public override void InitStartInEditor()
|
||||||
|
{
|
||||||
|
base.InitStartInEditor();
|
||||||
|
|
||||||
|
SetCloseWeapon();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected override void InitStart()
|
protected override void InitStart()
|
||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("SpearKnight");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetEnemyViewDictionaryFromKey(enemyStat.ViewIdx).RightWeapon;
|
var rightWeaponView = Application.isPlaying ?
|
||||||
|
DataManager.Inst.GetEnemyViewDictionaryFromKey(EnemyStat.ViewIdx).RightWeapon :
|
||||||
|
DataManager.Inst.GetEnemyViewSoFromKey(EnemyStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
|||||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||||
closeWeapon.SetBoxCollider();
|
closeWeapon.SetBoxCollider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,18 +6,36 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
public class EnemySpearman : EnemyAi
|
public class EnemySpearman : EnemyAi
|
||||||
{
|
{
|
||||||
|
#region Properties and variables
|
||||||
|
|
||||||
private CloseWeapon closeWeapon;
|
private CloseWeapon closeWeapon;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Custrom methods
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
public override void InitStartInEditor()
|
||||||
|
{
|
||||||
|
base.InitStartInEditor();
|
||||||
|
|
||||||
|
SetCloseWeapon();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected override void InitStart()
|
protected override void InitStart()
|
||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("Spearman");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetEnemyViewDictionaryFromKey(enemyStat.ViewIdx).RightWeapon;
|
var rightWeaponView = Application.isPlaying ?
|
||||||
|
DataManager.Inst.GetEnemyViewDictionaryFromKey(EnemyStat.ViewIdx).RightWeapon :
|
||||||
|
DataManager.Inst.GetEnemyViewSoFromKey(EnemyStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
|||||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||||
closeWeapon.SetBoxCollider();
|
closeWeapon.SetBoxCollider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,18 +6,36 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
public class EnemySwordKnight : EnemyAi
|
public class EnemySwordKnight : EnemyAi
|
||||||
{
|
{
|
||||||
|
#region Properties and variables
|
||||||
|
|
||||||
private CloseWeapon closeWeapon;
|
private CloseWeapon closeWeapon;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Custrom methods
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
public override void InitStartInEditor()
|
||||||
|
{
|
||||||
|
base.InitStartInEditor();
|
||||||
|
|
||||||
|
SetCloseWeapon();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected override void InitStart()
|
protected override void InitStart()
|
||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("SwordKnight");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetEnemyViewDictionaryFromKey(enemyStat.ViewIdx).RightWeapon;
|
var rightWeaponView = Application.isPlaying ?
|
||||||
|
DataManager.Inst.GetEnemyViewDictionaryFromKey(EnemyStat.ViewIdx).RightWeapon :
|
||||||
|
DataManager.Inst.GetEnemyViewSoFromKey(EnemyStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
|||||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||||
closeWeapon.SetBoxCollider();
|
closeWeapon.SetBoxCollider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,18 +6,36 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
public class EnemySwordman : EnemyAi
|
public class EnemySwordman : EnemyAi
|
||||||
{
|
{
|
||||||
|
#region Properties and variables
|
||||||
|
|
||||||
private CloseWeapon closeWeapon;
|
private CloseWeapon closeWeapon;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Custrom methods
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
public override void InitStartInEditor()
|
||||||
|
{
|
||||||
|
base.InitStartInEditor();
|
||||||
|
|
||||||
|
SetCloseWeapon();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected override void InitStart()
|
protected override void InitStart()
|
||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("Swordman");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetEnemyViewDictionaryFromKey(enemyStat.ViewIdx).RightWeapon;
|
var rightWeaponView = Application.isPlaying ?
|
||||||
|
DataManager.Inst.GetEnemyViewDictionaryFromKey(EnemyStat.ViewIdx).RightWeapon :
|
||||||
|
DataManager.Inst.GetEnemyViewSoFromKey(EnemyStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
|||||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||||
closeWeapon.SetBoxCollider();
|
closeWeapon.SetBoxCollider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,12 +26,42 @@ namespace BlueWaterProject
|
|||||||
[DisableIf("@true")]
|
[DisableIf("@true")]
|
||||||
[SerializeField] private IslandInfo islandInfo;
|
[SerializeField] private IslandInfo islandInfo;
|
||||||
|
|
||||||
protected PirateStat pirateStat;
|
[field: SerializeField] public PirateStat PirateStat { get; set; }
|
||||||
|
|
||||||
|
private PirateUnit mouseEnterPirateUnit;
|
||||||
|
private UnitSelection unitSelection;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Unit Built-in methods
|
#region Unit Built-in methods
|
||||||
|
|
||||||
|
private void OnMouseEnter()
|
||||||
|
{
|
||||||
|
if (!unitSelection || !unitSelection.IsSelectable) return;
|
||||||
|
|
||||||
|
mouseEnterPirateUnit = gameObject.GetComponentInParent<PirateUnit>();
|
||||||
|
|
||||||
|
if (mouseEnterPirateUnit == unitSelection.SelectedPirateUnit) return;
|
||||||
|
|
||||||
|
foreach (var pirateAi in mouseEnterPirateUnit.pirateUnitStat.PirateAiList)
|
||||||
|
{
|
||||||
|
pirateAi.MouseEnterHighlight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMouseExit()
|
||||||
|
{
|
||||||
|
if (!unitSelection || !unitSelection.IsSelectable ||
|
||||||
|
!mouseEnterPirateUnit || mouseEnterPirateUnit == unitSelection.SelectedPirateUnit) return;
|
||||||
|
|
||||||
|
foreach (var pirateAi in mouseEnterPirateUnit.pirateUnitStat.PirateAiList)
|
||||||
|
{
|
||||||
|
pirateAi.ResetHighlight();
|
||||||
|
}
|
||||||
|
|
||||||
|
mouseEnterPirateUnit = null;
|
||||||
|
}
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
InitStart();
|
InitStart();
|
||||||
@ -41,6 +71,13 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
#region Custom methods
|
#region Custom methods
|
||||||
|
|
||||||
|
protected override void InitComponent()
|
||||||
|
{
|
||||||
|
base.InitComponent();
|
||||||
|
|
||||||
|
unitSelection = Utils.GetComponentAndAssert<UnitSelection>(GameObject.Find("UnitManager").transform);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void SetLayer()
|
protected override void SetLayer()
|
||||||
{
|
{
|
||||||
gameObject.layer = LayerMask.NameToLayer("Pirate");
|
gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||||
@ -49,7 +86,7 @@ namespace BlueWaterProject
|
|||||||
hitBoxObj.tag = "Pirate";
|
hitBoxObj.tag = "Pirate";
|
||||||
targetLayer = LayerMask.GetMask("Enemy");
|
targetLayer = LayerMask.GetMask("Enemy");
|
||||||
|
|
||||||
if (pirateStat.AttackerType == EAttackerType.OFFENSE)
|
if (PirateStat.AttackerType == EAttackerType.OFFENSE)
|
||||||
{
|
{
|
||||||
targetLayer |= LayerMask.GetMask("Props");
|
targetLayer |= LayerMask.GetMask("Props");
|
||||||
}
|
}
|
||||||
@ -57,14 +94,14 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
protected virtual void InitStart()
|
protected virtual void InitStart()
|
||||||
{
|
{
|
||||||
var pirateViewData = GetPirateViewData();
|
var pirateViewData = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx);
|
||||||
|
|
||||||
InitViewModel(pirateViewData);
|
InitViewModel(pirateViewData);
|
||||||
FindMaterial();
|
FindMaterial();
|
||||||
SetCurrentHp(pirateStat.MaxHp);
|
SetCurrentHp(PirateStat.MaxHp);
|
||||||
SetMoveSpeed(pirateStat.MoveSpd);
|
SetMoveSpeed(PirateStat.MoveSpd);
|
||||||
|
|
||||||
if (pirateStat.AttackerType == EAttackerType.DEFENSE)
|
if (PirateStat.AttackerType == EAttackerType.DEFENSE)
|
||||||
{
|
{
|
||||||
defensePos = transform.position;
|
defensePos = transform.position;
|
||||||
}
|
}
|
||||||
@ -101,11 +138,26 @@ namespace BlueWaterProject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SetCurrentHp(float value) => pirateStat.CurrentHp = value;
|
public void CommandMove(Vector3 movePos)
|
||||||
|
{
|
||||||
|
|
||||||
private PirateView GetPirateViewData() => Application.isPlaying ?
|
}
|
||||||
DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx) :
|
|
||||||
DataManager.Inst.GetPirateViewSoFromKey(pirateStat.ViewIdx);
|
private void SetOutlineColor(Color color)
|
||||||
|
{
|
||||||
|
foreach (var skin in skinMaterialList)
|
||||||
|
{
|
||||||
|
skin.SetColor(OutlineColorHash, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SetCurrentHp(float value) => PirateStat.CurrentHp = value;
|
||||||
|
public void SetAttackerType(EAttackerType type) => PirateStat.AttackerType = type;
|
||||||
|
public void SetOffenseType(EOffenseType type) => PirateStat.OffenseType = type;
|
||||||
|
public void SetDefenseType(EDefenseType type) => PirateStat.DefenseType = type;
|
||||||
|
public void ResetHighlight() => SetOutlineColor(defaultSkinColor);
|
||||||
|
public void MouseEnterHighlight() => SetOutlineColor(mouseEnterHighlightSkinColor);
|
||||||
|
public void SelectedHighlight() => SetOutlineColor(selectedSkinColor);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,100 @@
|
|||||||
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Pool;
|
||||||
|
|
||||||
// ReSharper disable once CheckNamespace
|
// ReSharper disable once CheckNamespace
|
||||||
namespace BlueWaterProject
|
namespace BlueWaterProject
|
||||||
{
|
{
|
||||||
public class PirateArcher : PirateAi
|
public class PirateArcher : PirateAi
|
||||||
{
|
{
|
||||||
|
#region Property and variable
|
||||||
|
|
||||||
|
[Header("화살 오브젝트 관리")]
|
||||||
|
[Tooltip("화살 오브젝트 풀링할 최대 갯수")]
|
||||||
|
[SerializeField] private int arrowMaxSize = 100;
|
||||||
|
|
||||||
|
[Tooltip("화살 발사 후 오브젝트 저장될 위치")]
|
||||||
|
[SerializeField] private Transform arrowsPoolLocation;
|
||||||
|
|
||||||
|
[SerializeField] private LayerMask archerLayer;
|
||||||
|
|
||||||
|
private IEnumerator shootArrowCoroutine;
|
||||||
|
|
||||||
|
private IObjectPool<Arrow> arrowPool;
|
||||||
|
|
||||||
|
[SerializeField] private Vector3 rayOffset = new(0f, 2f, 0);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Custom methods
|
||||||
|
|
||||||
|
protected override void InitComponent()
|
||||||
|
{
|
||||||
|
base.InitComponent();
|
||||||
|
|
||||||
|
var animatorControllerList = UnitManager.Inst.AIAnimatorControllerList;
|
||||||
|
if (animatorControllerList == null)
|
||||||
|
{
|
||||||
|
Debug.LogError("Animator Controller List is null!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var archerController = animatorControllerList.Find(obj => obj.name == "Archer");
|
||||||
|
if (archerController == null)
|
||||||
|
{
|
||||||
|
Debug.LogError("No AnimatorController named 'Archer' was found in the list.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
combatAnimator.runtimeAnimatorController = archerController;
|
||||||
|
arrowsPoolLocation = GameObject.Find("ObjectPoolData/Arrows").transform;
|
||||||
|
|
||||||
|
if (!arrowsPoolLocation)
|
||||||
|
{
|
||||||
|
var objectPoolData = GameObject.Find("ObjectPoolData").transform;
|
||||||
|
if (!objectPoolData)
|
||||||
|
{
|
||||||
|
objectPoolData = new GameObject("ObjectPoolData").transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!objectPoolData.Find("Arrows"))
|
||||||
|
{
|
||||||
|
Instantiate(new GameObject("Arrows"), Vector3.zero, Quaternion.identity, objectPoolData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arrowPool = new ObjectPool<Arrow>(CreateArrow, OnGetArrow, OnReleaseArrow, OnDestroyArrow, maxSize:arrowMaxSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SetLayer()
|
||||||
|
{
|
||||||
|
base.SetLayer();
|
||||||
|
|
||||||
|
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||||
|
LayerMask.GetMask("Enemy") | LayerMask.GetMask("Props");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void InitStart()
|
||||||
|
{
|
||||||
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("Archer");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ObjectPool Function
|
||||||
|
|
||||||
|
private Arrow CreateArrow()
|
||||||
|
{
|
||||||
|
var arrow = Instantiate(UnitManager.Inst.ArrowPrefab, leftWeaponContainer.position, Quaternion.identity, arrowsPoolLocation).GetComponent<Arrow>();
|
||||||
|
arrow.SetManagedPool(arrowPool);
|
||||||
|
return arrow;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGetArrow(Arrow arrow) => arrow.gameObject.SetActive(true);
|
||||||
|
private void OnReleaseArrow(Arrow arrow) => arrow.ReleaseArrowSetting();
|
||||||
|
private void OnDestroyArrow(Arrow arrow) => Destroy(arrow.gameObject);
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,13 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("Axeman");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
|
@ -12,12 +12,13 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("Spearman");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
|
@ -12,12 +12,13 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("SwordKnight");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
|
@ -12,12 +12,13 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
base.InitStart();
|
base.InitStart();
|
||||||
|
|
||||||
|
SetAnimatorController("Swordman");
|
||||||
SetCloseWeapon();
|
SetCloseWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCloseWeapon()
|
private void SetCloseWeapon()
|
||||||
{
|
{
|
||||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||||
if (rightWeaponView == -1) return;
|
if (rightWeaponView == -1) return;
|
||||||
|
|
||||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using Sirenix.OdinInspector;
|
using Sirenix.OdinInspector;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Serialization;
|
|
||||||
|
|
||||||
// ReSharper disable once CheckNamespace
|
// ReSharper disable once CheckNamespace
|
||||||
namespace BlueWaterProject
|
namespace BlueWaterProject
|
||||||
@ -22,7 +21,7 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
if (!Application.isPlaying || enemyUnitStat == null || enemyUnitStat.SailorCount <= 0) return;
|
if (!Application.isPlaying || enemyUnitStat == null || enemyUnitStat.SailorCount <= 0) return;
|
||||||
|
|
||||||
foreach (var item in enemyUnitStat.UnitList)
|
foreach (var item in enemyUnitStat.EnemyAiList)
|
||||||
{
|
{
|
||||||
var unitPos = item.transform.position;
|
var unitPos = item.transform.position;
|
||||||
var ray = new Ray(unitPos + Vector3.up, Vector3.down);
|
var ray = new Ray(unitPos + Vector3.up, Vector3.down);
|
||||||
@ -77,7 +76,7 @@ namespace BlueWaterProject
|
|||||||
isClickedTypeAllButton = false;
|
isClickedTypeAllButton = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Color GetCreateUnitButtonColor() => enemyUnitStat.UnitList.Count > 0 ? Color.white : Color.green;
|
private Color GetCreateUnitButtonColor() => enemyUnitStat.EnemyAiList.Count > 0 ? Color.white : Color.green;
|
||||||
private Color GetTypeAllButtonColor() => isClickedTypeAllButton ? Color.white : Color.green;
|
private Color GetTypeAllButtonColor() => isClickedTypeAllButton ? Color.white : Color.green;
|
||||||
private void OnTypeChanged() => isClickedTypeAllButton = false;
|
private void OnTypeChanged() => isClickedTypeAllButton = false;
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ namespace BlueWaterProject
|
|||||||
[field: SerializeField] public EDefenseType DefenseType { get; set; }
|
[field: SerializeField] public EDefenseType DefenseType { get; set; }
|
||||||
|
|
||||||
[field: Tooltip("부대 병력 리스트")]
|
[field: Tooltip("부대 병력 리스트")]
|
||||||
[field: SerializeField] public List<AiController> UnitList { get; set; }
|
[field: SerializeField] public List<EnemyAi> EnemyAiList { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -53,11 +53,11 @@ namespace BlueWaterProject
|
|||||||
AttackerType = EAttackerType.NONE;
|
AttackerType = EAttackerType.NONE;
|
||||||
OffenseType = EOffenseType.NONE;
|
OffenseType = EOffenseType.NONE;
|
||||||
DefenseType = EDefenseType.NONE;
|
DefenseType = EDefenseType.NONE;
|
||||||
UnitList = new List<AiController>(GlobalValue.ONE_UNIT_CAPACITY);
|
EnemyAiList = new List<EnemyAi>(GlobalValue.ONE_UNIT_CAPACITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnemyUnitStat(string idx, string captainIdx, string sailorIdx, string unitName,
|
public EnemyUnitStat(string idx, string captainIdx, string sailorIdx, string unitName,
|
||||||
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<AiController> unitList)
|
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<EnemyAi> enemyAiList)
|
||||||
{
|
{
|
||||||
Idx = idx;
|
Idx = idx;
|
||||||
CaptainStatIdx = captainIdx;
|
CaptainStatIdx = captainIdx;
|
||||||
@ -66,7 +66,7 @@ namespace BlueWaterProject
|
|||||||
SailorCount = sailorCount;
|
SailorCount = sailorCount;
|
||||||
OffenseType = offenseType;
|
OffenseType = offenseType;
|
||||||
DefenseType = defenseType;
|
DefenseType = defenseType;
|
||||||
UnitList = unitList;
|
EnemyAiList = enemyAiList;
|
||||||
|
|
||||||
if (AttackerType == EAttackerType.NONE) return;
|
if (AttackerType == EAttackerType.NONE) return;
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ namespace BlueWaterProject
|
|||||||
AttackerType = enemyUnitStat.AttackerType;
|
AttackerType = enemyUnitStat.AttackerType;
|
||||||
OffenseType = enemyUnitStat.OffenseType;
|
OffenseType = enemyUnitStat.OffenseType;
|
||||||
DefenseType = enemyUnitStat.DefenseType;
|
DefenseType = enemyUnitStat.DefenseType;
|
||||||
UnitList = enemyUnitStat.UnitList;
|
EnemyAiList = enemyUnitStat.EnemyAiList;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -50,7 +50,7 @@ namespace BlueWaterProject
|
|||||||
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitManager.Inst.UnitSpacing;
|
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitManager.Inst.UnitSpacing;
|
||||||
var movePos = targetPos + new Vector3(xOffset, 0, zOffset);
|
var movePos = targetPos + new Vector3(xOffset, 0, zOffset);
|
||||||
|
|
||||||
pirateUnitStat.UnitList[currentPos].CommandMove(movePos);
|
pirateUnitStat.PirateAiList[currentPos].CommandMove(movePos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ namespace BlueWaterProject
|
|||||||
[field: SerializeField] public EDefenseType DefenseType { get; set; }
|
[field: SerializeField] public EDefenseType DefenseType { get; set; }
|
||||||
|
|
||||||
[field: Tooltip("부대 병력 리스트")]
|
[field: Tooltip("부대 병력 리스트")]
|
||||||
[field: SerializeField] public List<AiController> UnitList { get; set; }
|
[field: SerializeField] public List<PirateAi> PirateAiList { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -53,11 +53,11 @@ namespace BlueWaterProject
|
|||||||
AttackerType = EAttackerType.NONE;
|
AttackerType = EAttackerType.NONE;
|
||||||
OffenseType = EOffenseType.NONE;
|
OffenseType = EOffenseType.NONE;
|
||||||
DefenseType = EDefenseType.NONE;
|
DefenseType = EDefenseType.NONE;
|
||||||
UnitList = new List<AiController>(GlobalValue.ONE_UNIT_CAPACITY);
|
PirateAiList = new List<PirateAi>(GlobalValue.ONE_UNIT_CAPACITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PirateUnitStat(string idx, string captainIdx, string sailorIdx, string unitName,
|
public PirateUnitStat(string idx, string captainIdx, string sailorIdx, string unitName,
|
||||||
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<AiController> unitList)
|
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<PirateAi> pirateAiList)
|
||||||
{
|
{
|
||||||
Idx = idx;
|
Idx = idx;
|
||||||
CaptainStatIdx = captainIdx;
|
CaptainStatIdx = captainIdx;
|
||||||
@ -66,7 +66,7 @@ namespace BlueWaterProject
|
|||||||
SailorCount = sailorCount;
|
SailorCount = sailorCount;
|
||||||
OffenseType = offenseType;
|
OffenseType = offenseType;
|
||||||
DefenseType = defenseType;
|
DefenseType = defenseType;
|
||||||
UnitList = unitList;
|
PirateAiList = pirateAiList;
|
||||||
|
|
||||||
if (AttackerType == EAttackerType.NONE) return;
|
if (AttackerType == EAttackerType.NONE) return;
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ namespace BlueWaterProject
|
|||||||
AttackerType = pirateUnitStat.AttackerType;
|
AttackerType = pirateUnitStat.AttackerType;
|
||||||
OffenseType = pirateUnitStat.OffenseType;
|
OffenseType = pirateUnitStat.OffenseType;
|
||||||
DefenseType = pirateUnitStat.DefenseType;
|
DefenseType = pirateUnitStat.DefenseType;
|
||||||
UnitList = pirateUnitStat.UnitList;
|
PirateAiList = pirateUnitStat.PirateAiList;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -3,36 +3,19 @@ using System.Collections.Generic;
|
|||||||
using Sirenix.OdinInspector;
|
using Sirenix.OdinInspector;
|
||||||
using UnityEditor.Animations;
|
using UnityEditor.Animations;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Serialization;
|
|
||||||
|
|
||||||
// ReSharper disable once CheckNamespace
|
// ReSharper disable once CheckNamespace
|
||||||
namespace BlueWaterProject
|
namespace BlueWaterProject
|
||||||
{
|
{
|
||||||
[Serializable]
|
|
||||||
public class UnitMatrix
|
|
||||||
{
|
|
||||||
public int units; // 부대 안의 병사 수
|
|
||||||
public int rows; // 배치될 행의 갯수
|
|
||||||
public int columns; // 배치될 열의 갯수
|
|
||||||
//public int centerNum; // 부대의 중심 번호
|
|
||||||
|
|
||||||
public UnitMatrix(int units, int rows, int columns)
|
|
||||||
{
|
|
||||||
this.units = units;
|
|
||||||
this.rows = rows;
|
|
||||||
this.columns = columns;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class UnitManager : Singleton<UnitManager>
|
public class UnitManager : Singleton<UnitManager>
|
||||||
{
|
{
|
||||||
#region Property and variable
|
#region Property and variable
|
||||||
|
|
||||||
[Tooltip("유닛 프리팹")]
|
[Tooltip("Pirate 프리팹")]
|
||||||
[field: SerializeField] public GameObject UnitPrefab { get; private set; }
|
[field: SerializeField] public GameObject PiratePrefab { get; private set; }
|
||||||
|
|
||||||
[Tooltip("캐릭터 기초 프리팹")]
|
[Tooltip("캐릭터 기초 프리팹")]
|
||||||
[field: SerializeField] public GameObject BaseCharacterPrefab { get; private set; }
|
[field: SerializeField] public GameObject BaseHumanPrefab { get; private set; }
|
||||||
|
|
||||||
[Tooltip("화살 프리팹")]
|
[Tooltip("화살 프리팹")]
|
||||||
[field: SerializeField] public GameObject ArrowPrefab { get; private set; }
|
[field: SerializeField] public GameObject ArrowPrefab { get; private set; }
|
||||||
@ -41,30 +24,16 @@ namespace BlueWaterProject
|
|||||||
[field: SerializeField] public LayerMask GroundLayer { get; private set; }
|
[field: SerializeField] public LayerMask GroundLayer { get; private set; }
|
||||||
|
|
||||||
[Tooltip("바닥과의 최대 허용 거리")]
|
[Tooltip("바닥과의 최대 허용 거리")]
|
||||||
[field: SerializeField] public float MaxGroundDistance { get; private set; } = 2.5f;
|
[field: SerializeField] public float MaxGroundDistance { get; private set; } = 4f;
|
||||||
|
|
||||||
[Tooltip("병력 간의 간격")]
|
[Tooltip("병력 간의 간격")]
|
||||||
[field: SerializeField] public float UnitSpacing { get; private set; } = 2.5f;
|
[field: SerializeField] public float UnitSpacing { get; private set; } = 2.5f;
|
||||||
|
|
||||||
[Tooltip("부대 배치 행렬")]
|
|
||||||
[field: SerializeField] public List<UnitMatrix> UnitMatrices { get; private set; } = new(MATRICES_CAPACITY);
|
|
||||||
|
|
||||||
[FormerlySerializedAs("soldierPrefabList")]
|
|
||||||
[Tooltip("병력들의 프리팹 리스트(순서 중요)")]
|
|
||||||
[SerializeField] private List<GameObject> characterPrefabList = new(CHARACTER_PREFAB_CAPACITY);
|
|
||||||
|
|
||||||
[field: Tooltip("병력들의 애니메이터 컨트롤러 리스트")]
|
[field: Tooltip("병력들의 애니메이터 컨트롤러 리스트")]
|
||||||
[field: SerializeField] public List<AnimatorController> AIAnimatorControllerList { get; private set; } = new(GlobalValue.AI_ANIMATOR_CAPACITY);
|
[field: SerializeField] public List<AnimatorController> AIAnimatorControllerList { get; private set; } = new(GlobalValue.AI_ANIMATOR_CAPACITY);
|
||||||
|
|
||||||
[Tooltip("플레이어가 가지고 있는 부대리스트")]
|
|
||||||
[SerializeField] private List<PirateUnit> pirateUnitList = new(PIRATE_UNIT_CAPACITY);
|
|
||||||
|
|
||||||
public IReadOnlyList<PirateUnit> PirateUnitList => pirateUnitList;
|
|
||||||
|
|
||||||
private Transform pirateUnits;
|
private Transform pirateUnits;
|
||||||
|
|
||||||
private const int MATRICES_CAPACITY = 9;
|
|
||||||
private const int CHARACTER_PREFAB_CAPACITY = 10;
|
|
||||||
private const int ANIMATOR_CONTROLLER_PREFAB_CAPACITY = 6;
|
private const int ANIMATOR_CONTROLLER_PREFAB_CAPACITY = 6;
|
||||||
private const int PIRATE_UNIT_CAPACITY = 50;
|
private const int PIRATE_UNIT_CAPACITY = 50;
|
||||||
|
|
||||||
@ -75,58 +44,34 @@ namespace BlueWaterProject
|
|||||||
protected override void OnAwake()
|
protected override void OnAwake()
|
||||||
{
|
{
|
||||||
GroundLayer = LayerMask.GetMask("Ground");
|
GroundLayer = LayerMask.GetMask("Ground");
|
||||||
InitUnitMatrices();
|
//InitPlayerUnitList();
|
||||||
InitPlayerUnitList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Reset()
|
private void Reset()
|
||||||
{
|
{
|
||||||
GroundLayer = LayerMask.GetMask("Ground");
|
GroundLayer = LayerMask.GetMask("Ground");
|
||||||
MaxGroundDistance = 2.5f;
|
MaxGroundDistance = 4f;
|
||||||
UnitSpacing = 2.5f;
|
UnitSpacing = 2.5f;
|
||||||
characterPrefabList = new List<GameObject>(CHARACTER_PREFAB_CAPACITY);
|
|
||||||
InitUnitMatrices();
|
|
||||||
InitCharacterPrefabList();
|
InitCharacterPrefabList();
|
||||||
InitPlayerUnitList();
|
//InitPlayerUnitList();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Custom function
|
#region Custom function
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 부대 배치 행렬 초기화 함수
|
|
||||||
/// </summary>
|
|
||||||
[GUIColor(0, 1, 0)]
|
|
||||||
[ShowIf("@UnitMatrices.Count != MATRICES_CAPACITY")]
|
|
||||||
[Button("행렬 초기화")]
|
|
||||||
private void InitUnitMatrices()
|
|
||||||
{
|
|
||||||
UnitMatrices = new List<UnitMatrix>(MATRICES_CAPACITY)
|
|
||||||
{
|
|
||||||
new(1, 1, 1),
|
|
||||||
new(2, 1, 2),
|
|
||||||
new(3, 1, 3),
|
|
||||||
new(4, 2, 2),
|
|
||||||
new(6, 2, 3),
|
|
||||||
new(8, 2, 4),
|
|
||||||
new(9, 3, 3),
|
|
||||||
new(12, 3, 4),
|
|
||||||
new(16, 4, 4),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 프리팹 초기화 함수
|
/// 프리팹 초기화 함수
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[GUIColor(0, 1, 0)]
|
[GUIColor(0, 1, 0)]
|
||||||
[ShowIf("@BaseCharacterPrefab == null || UnitPrefab == null || ArrowPrefab == null || AIAnimatorControllerList.Count != ANIMATOR_CONTROLLER_PREFAB_CAPACITY")]
|
[ShowIf("@PiratePrefab == null || BaseHumanPrefab == null || ArrowPrefab == null ||" +
|
||||||
|
"AIAnimatorControllerList == null || AIAnimatorControllerList.Count != ANIMATOR_CONTROLLER_PREFAB_CAPACITY")]
|
||||||
[Button("프리팹 초기화")]
|
[Button("프리팹 초기화")]
|
||||||
private void InitCharacterPrefabList()
|
private void InitCharacterPrefabList()
|
||||||
{
|
{
|
||||||
UnitPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character", "Unit");
|
PiratePrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Unit", "PirateUnit");
|
||||||
BaseCharacterPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character", "BaseCharacter");
|
BaseHumanPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character", "BaseHuman");
|
||||||
ArrowPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs", "Arrow_01");
|
ArrowPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs", "Arrow_01");
|
||||||
AIAnimatorControllerList = new List<AnimatorController>(ANIMATOR_CONTROLLER_PREFAB_CAPACITY)
|
AIAnimatorControllerList = new List<AnimatorController>(ANIMATOR_CONTROLLER_PREFAB_CAPACITY)
|
||||||
{
|
{
|
||||||
@ -137,41 +82,27 @@ namespace BlueWaterProject
|
|||||||
Utils.LoadAnimatorControllerFromFolder("Assets/07.Animation", "SwordKnight"),
|
Utils.LoadAnimatorControllerFromFolder("Assets/07.Animation", "SwordKnight"),
|
||||||
Utils.LoadAnimatorControllerFromFolder("Assets/07.Animation", "Swordman")
|
Utils.LoadAnimatorControllerFromFolder("Assets/07.Animation", "Swordman")
|
||||||
};
|
};
|
||||||
|
|
||||||
characterPrefabList = new List<GameObject>(CHARACTER_PREFAB_CAPACITY)
|
|
||||||
{
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Enemy", "Archer_E"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Enemy", "SpearKnight_E"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Enemy", "Spearman_E"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Enemy", "SwordKnight_E"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Enemy", "Swordman_E"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Pirate", "Archer_P"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Pirate", "Axeman_P"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Pirate", "Spearman_P"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Pirate", "SwordKnight_P"),
|
|
||||||
Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Pirate", "Swordman_P")
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// <summary>
|
// /// <summary>
|
||||||
/// 플레이어가 가진 유닛 리스트 초기화
|
// /// 플레이어가 가진 유닛 리스트 초기화
|
||||||
/// </summary>
|
// /// </summary>
|
||||||
[GUIColor(0, 1, 0)]
|
// [GUIColor(0, 1, 0)]
|
||||||
[Button("플레이어 유닛 가져오기")]
|
// [Button("플레이어 유닛 가져오기")]
|
||||||
private void InitPlayerUnitList()
|
// private void InitPlayerUnitList()
|
||||||
{
|
// {
|
||||||
SetPlayerUnits();
|
// SetPlayerUnits();
|
||||||
|
//
|
||||||
pirateUnitList = new List<PirateUnit>(PIRATE_UNIT_CAPACITY);
|
// pirateUnitList = new List<PirateUnit>(PIRATE_UNIT_CAPACITY);
|
||||||
|
//
|
||||||
foreach (Transform item in pirateUnits)
|
// foreach (Transform item in pirateUnits)
|
||||||
{
|
// {
|
||||||
if (!item.gameObject.activeSelf) continue;
|
// if (!item.gameObject.activeSelf) continue;
|
||||||
|
//
|
||||||
pirateUnitList.Add(item.GetComponent<PirateUnit>());
|
// pirateUnitList.Add(item.GetComponent<PirateUnit>());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private void SetPlayerUnits()
|
private void SetPlayerUnits()
|
||||||
{
|
{
|
||||||
@ -229,12 +160,12 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
var card = DataManager.Inst.GetCardDictionaryFromKey(cardIdx);
|
var card = DataManager.Inst.GetCardDictionaryFromKey(cardIdx);
|
||||||
var unit = DataManager.Inst.GetPirateUnitStatDictionaryFromKey(card.UnitIdx);
|
var unit = DataManager.Inst.GetPirateUnitStatDictionaryFromKey(card.UnitIdx);
|
||||||
var captainStat = DataManager.Inst.GetEnemyStatDictionaryFromKey(unit.CaptainStatIdx);
|
var captainStat = DataManager.Inst.GetPirateStatDictionaryFromKey(unit.CaptainStatIdx);
|
||||||
var sailorStat = DataManager.Inst.GetEnemyStatDictionaryFromKey(unit.SailorStatIdx);
|
var sailorStat = DataManager.Inst.GetPirateStatDictionaryFromKey(unit.SailorStatIdx);
|
||||||
|
|
||||||
SetPlayerUnits();
|
SetPlayerUnits();
|
||||||
|
|
||||||
var newUnitController = Instantiate(UnitPrefab, Vector3.zero, Quaternion.identity, pirateUnits).GetComponent<PirateUnit>();
|
var newUnitController = Instantiate(PiratePrefab, Vector3.zero, Quaternion.identity, pirateUnits).GetComponent<PirateUnit>();
|
||||||
newUnitController.pirateUnitStat = new PirateUnitStat(unit);
|
newUnitController.pirateUnitStat = new PirateUnitStat(unit);
|
||||||
|
|
||||||
DestroyDeployedUnits(newUnitController);
|
DestroyDeployedUnits(newUnitController);
|
||||||
@ -243,7 +174,7 @@ namespace BlueWaterProject
|
|||||||
var baseName = pirateStat.UnitType.ToString();
|
var baseName = pirateStat.UnitType.ToString();
|
||||||
SetUnitName(newUnitController, newUnitController.pirateUnitStat.UnitName, baseName);
|
SetUnitName(newUnitController, newUnitController.pirateUnitStat.UnitName, baseName);
|
||||||
|
|
||||||
newUnitController.pirateUnitStat.UnitList = new List<AiController>(newUnitController.pirateUnitStat.SailorCount + 1);
|
newUnitController.pirateUnitStat.PirateAiList = new List<PirateAi>(newUnitController.pirateUnitStat.SailorCount + 1);
|
||||||
|
|
||||||
var unitControllerTransform = newUnitController.transform;
|
var unitControllerTransform = newUnitController.transform;
|
||||||
var unitControllerRotation = unitControllerTransform.rotation;
|
var unitControllerRotation = unitControllerTransform.rotation;
|
||||||
@ -284,7 +215,7 @@ namespace BlueWaterProject
|
|||||||
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitSpacing;
|
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitSpacing;
|
||||||
var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset);
|
var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset);
|
||||||
|
|
||||||
var baseObj = Instantiate(BaseCharacterPrefab, spawnPosition,
|
var baseObj = Instantiate(BaseHumanPrefab, spawnPosition,
|
||||||
Quaternion.identity, newUnitController.transform);
|
Quaternion.identity, newUnitController.transform);
|
||||||
|
|
||||||
var newSoldierName = $"{baseName}_{currentPos + 1:00}";
|
var newSoldierName = $"{baseName}_{currentPos + 1:00}";
|
||||||
@ -292,12 +223,12 @@ namespace BlueWaterProject
|
|||||||
baseObj.name = newSoldierName;
|
baseObj.name = newSoldierName;
|
||||||
baseObj.gameObject.SetActive(false);
|
baseObj.gameObject.SetActive(false);
|
||||||
|
|
||||||
var aiController = GetAiController(baseObj, pirateStat.UnitType, currentPos == heroPosition ? captainStat : sailorStat);
|
var pirateAi = GetPirateAi(baseObj, pirateStat.UnitType, currentPos == heroPosition ? captainStat : sailorStat);
|
||||||
|
|
||||||
aiController.SetAttackerType(attackerType);
|
pirateAi.SetAttackerType(attackerType);
|
||||||
aiController.SetOffenseType(newUnitController.pirateUnitStat.OffenseType);
|
pirateAi.SetOffenseType(newUnitController.pirateUnitStat.OffenseType);
|
||||||
aiController.SetDefenseType(newUnitController.pirateUnitStat.DefenseType);
|
pirateAi.SetDefenseType(newUnitController.pirateUnitStat.DefenseType);
|
||||||
newUnitController.pirateUnitStat.UnitList.Add(aiController);
|
newUnitController.pirateUnitStat.PirateAiList.Add(pirateAi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newUnitController.transform.rotation *= unitControllerRotation;
|
newUnitController.transform.rotation *= unitControllerRotation;
|
||||||
@ -321,11 +252,11 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
DestroyDeployedUnits(enemyUnit);
|
DestroyDeployedUnits(enemyUnit);
|
||||||
|
|
||||||
var enemyStat = DataManager.Inst.GetEnemyStatDictionaryFromKey(enemyUnit.enemyUnitStat.SailorStatIdx);
|
var enemyStat = DataManager.Inst.GetEnemyStatSoFromKey(enemyUnit.enemyUnitStat.SailorStatIdx);
|
||||||
var baseName = enemyStat.UnitType.ToString();
|
var baseName = enemyStat.UnitType.ToString();
|
||||||
SetUnitName(enemyUnit, enemyUnit.enemyUnitStat.UnitName, baseName);
|
SetUnitName(enemyUnit, enemyUnit.enemyUnitStat.UnitName, baseName);
|
||||||
|
|
||||||
enemyUnit.enemyUnitStat.UnitList = new List<AiController>(enemyUnit.enemyUnitStat.SailorCount + 1);
|
enemyUnit.enemyUnitStat.EnemyAiList = new List<EnemyAi>(enemyUnit.enemyUnitStat.SailorCount + 1);
|
||||||
|
|
||||||
var unitControllerTransform = enemyUnit.transform;
|
var unitControllerTransform = enemyUnit.transform;
|
||||||
var unitControllerRotation = unitControllerTransform.rotation;
|
var unitControllerRotation = unitControllerTransform.rotation;
|
||||||
@ -366,7 +297,7 @@ namespace BlueWaterProject
|
|||||||
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitSpacing;
|
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitSpacing;
|
||||||
var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset);
|
var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset);
|
||||||
|
|
||||||
var baseObj = Instantiate(BaseCharacterPrefab, spawnPosition,
|
var baseObj = Instantiate(BaseHumanPrefab, spawnPosition,
|
||||||
Quaternion.identity, enemyUnit.transform);
|
Quaternion.identity, enemyUnit.transform);
|
||||||
|
|
||||||
var newSoldierName = $"{baseName}_{currentPos + 1:00}";
|
var newSoldierName = $"{baseName}_{currentPos + 1:00}";
|
||||||
@ -374,63 +305,53 @@ namespace BlueWaterProject
|
|||||||
baseObj.name = newSoldierName;
|
baseObj.name = newSoldierName;
|
||||||
baseObj.gameObject.SetActive(false);
|
baseObj.gameObject.SetActive(false);
|
||||||
|
|
||||||
var aiController = GetAiController(baseObj, enemyStat.UnitType, currentPos == heroPosition ? captainStat : sailorStat);
|
var currentStat = currentPos == heroPosition ? captainStat : sailorStat;
|
||||||
|
var enemyAi = GetEnemyAi(baseObj, enemyStat.UnitType, currentStat);
|
||||||
|
|
||||||
aiController.SetAttackerType(enemyUnit.enemyUnitStat.AttackerType);
|
enemyAi.SetAttackerType(enemyUnit.enemyUnitStat.AttackerType);
|
||||||
aiController.SetOffenseType(enemyUnit.enemyUnitStat.OffenseType);
|
enemyAi.SetOffenseType(enemyUnit.enemyUnitStat.OffenseType);
|
||||||
aiController.SetDefenseType(enemyUnit.enemyUnitStat.DefenseType);
|
enemyAi.SetDefenseType(enemyUnit.enemyUnitStat.DefenseType);
|
||||||
aiController.InitStartInEditor();
|
enemyAi.InitStartInEditor();
|
||||||
enemyUnit.enemyUnitStat.UnitList.Add(aiController);
|
enemyUnit.enemyUnitStat.EnemyAiList.Add(enemyAi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enemyUnit.transform.rotation *= unitControllerRotation;
|
enemyUnit.transform.rotation *= unitControllerRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
private AiController GetAiController(GameObject baseObj, GlobalValue.UnitType unitType, EnemyStat aiStat)
|
private EnemyAi GetEnemyAi(GameObject baseObj, GlobalValue.UnitType unitType, EnemyStat enemyStat)
|
||||||
{
|
{
|
||||||
AiController temp = null;
|
EnemyAi enemyAi = unitType switch
|
||||||
switch (unitType)
|
|
||||||
{
|
{
|
||||||
case GlobalValue.UnitType.NONE:
|
GlobalValue.UnitType.ARCHER_E => baseObj.AddComponent<EnemyArcher>(),
|
||||||
break;
|
GlobalValue.UnitType.SPEAR_KNIGHT_E => baseObj.AddComponent<EnemySpearKnight>(),
|
||||||
case GlobalValue.UnitType.ARCHER_E:
|
GlobalValue.UnitType.SPEARMAN_E => baseObj.AddComponent<EnemySpearman>(),
|
||||||
temp = baseObj.AddComponent<Archer>();
|
GlobalValue.UnitType.SWORD_KNIGHT_E => baseObj.AddComponent<EnemySwordKnight>(),
|
||||||
break;
|
GlobalValue.UnitType.SWORDMAN_E => baseObj.AddComponent<EnemySwordman>(),
|
||||||
case GlobalValue.UnitType.SPEAR_KNIGHT_E:
|
_ => throw new ArgumentOutOfRangeException(nameof(unitType), unitType, null)
|
||||||
temp = baseObj.AddComponent<SpearKnight>();
|
};
|
||||||
break;
|
|
||||||
case GlobalValue.UnitType.SPEARMAN_E:
|
if (enemyAi == null) return null;
|
||||||
temp = baseObj.AddComponent<Spearman>();
|
|
||||||
break;
|
enemyAi.EnemyStat = new EnemyStat(enemyStat);
|
||||||
case GlobalValue.UnitType.SWORD_KNIGHT_E:
|
return enemyAi;
|
||||||
temp = baseObj.AddComponent<SwordKnight>();
|
|
||||||
break;
|
|
||||||
case GlobalValue.UnitType.SWORDMAN_E:
|
|
||||||
temp = baseObj.AddComponent<Swordman>();
|
|
||||||
break;
|
|
||||||
case GlobalValue.UnitType.ARCHER_P:
|
|
||||||
temp = baseObj.AddComponent<Archer>();
|
|
||||||
break;
|
|
||||||
case GlobalValue.UnitType.AXEMAN_P:
|
|
||||||
temp = baseObj.AddComponent<Axeman>();
|
|
||||||
break;
|
|
||||||
case GlobalValue.UnitType.SPEARMAN_P:
|
|
||||||
temp = baseObj.AddComponent<Spearman>();
|
|
||||||
break;
|
|
||||||
case GlobalValue.UnitType.SWORD_KNIGHT_P:
|
|
||||||
temp = baseObj.AddComponent<SwordKnight>();
|
|
||||||
break;
|
|
||||||
case GlobalValue.UnitType.SWORDMAN_P:
|
|
||||||
temp = baseObj.AddComponent<Swordman>();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new ArgumentOutOfRangeException(nameof(unitType), unitType, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (temp == null) return null;
|
private PirateAi GetPirateAi(GameObject baseObj, GlobalValue.UnitType unitType, PirateStat pirateStat)
|
||||||
|
{
|
||||||
|
PirateAi pirateAi = unitType switch
|
||||||
|
{
|
||||||
|
GlobalValue.UnitType.ARCHER_P => baseObj.AddComponent<PirateArcher>(),
|
||||||
|
GlobalValue.UnitType.AXEMAN_P => baseObj.AddComponent<PirateAxeman>(),
|
||||||
|
GlobalValue.UnitType.SPEARMAN_P => baseObj.AddComponent<PirateSpearman>(),
|
||||||
|
GlobalValue.UnitType.SWORD_KNIGHT_P => baseObj.AddComponent<PirateSwordKnight>(),
|
||||||
|
GlobalValue.UnitType.SWORDMAN_P => baseObj.AddComponent<PirateSwordman>(),
|
||||||
|
_ => throw new ArgumentOutOfRangeException(nameof(unitType), unitType, null)
|
||||||
|
};
|
||||||
|
|
||||||
//temp.AiStat = new AiStat(aiStat);
|
if (pirateAi == null) return null;
|
||||||
return temp;
|
|
||||||
|
pirateAi.PirateStat = new PirateStat(pirateStat);
|
||||||
|
return pirateAi;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -438,13 +359,13 @@ namespace BlueWaterProject
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool CanAssignUnit(EnemyUnit enemyUnit, Vector3 assignPos)
|
public bool CanAssignUnit(EnemyUnit enemyUnit, Vector3 assignPos)
|
||||||
{
|
{
|
||||||
if (enemyUnit.enemyUnitStat.UnitList.Count <= 0) return false;
|
if (enemyUnit.enemyUnitStat.EnemyAiList.Count <= 0) return false;
|
||||||
|
|
||||||
enemyUnit.transform.position = assignPos;
|
enemyUnit.transform.position = assignPos;
|
||||||
|
|
||||||
for (var i = 0; i < enemyUnit.enemyUnitStat.SailorCount; i++)
|
for (var i = 0; i < enemyUnit.enemyUnitStat.SailorCount; i++)
|
||||||
{
|
{
|
||||||
var unitPos = enemyUnit.enemyUnitStat.UnitList[i].transform.position;
|
var unitPos = enemyUnit.enemyUnitStat.EnemyAiList[i].transform.position;
|
||||||
var ray = new Ray(unitPos + Vector3.up, Vector3.down);
|
var ray = new Ray(unitPos + Vector3.up, Vector3.down);
|
||||||
if (Physics.Raycast(ray, out var hit, MaxGroundDistance, GroundLayer))
|
if (Physics.Raycast(ray, out var hit, MaxGroundDistance, GroundLayer))
|
||||||
{
|
{
|
||||||
@ -463,7 +384,7 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
enemyUnit.transform.position = assignPos;
|
enemyUnit.transform.position = assignPos;
|
||||||
|
|
||||||
foreach (var unit in enemyUnit.enemyUnitStat.UnitList)
|
foreach (var unit in enemyUnit.enemyUnitStat.EnemyAiList)
|
||||||
{
|
{
|
||||||
var myPos = unit.transform.position;
|
var myPos = unit.transform.position;
|
||||||
var ray = new Ray(myPos + Vector3.up, Vector3.down);
|
var ray = new Ray(myPos + Vector3.up, Vector3.down);
|
||||||
@ -473,7 +394,7 @@ namespace BlueWaterProject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var unit in enemyUnit.enemyUnitStat.UnitList)
|
foreach (var unit in enemyUnit.enemyUnitStat.EnemyAiList)
|
||||||
{
|
{
|
||||||
unit.gameObject.SetActive(true);
|
unit.gameObject.SetActive(true);
|
||||||
}
|
}
|
||||||
@ -484,7 +405,7 @@ namespace BlueWaterProject
|
|||||||
pirateUnit.transform.position = assignPos;
|
pirateUnit.transform.position = assignPos;
|
||||||
IslandInfo hitIslandInfo = null;
|
IslandInfo hitIslandInfo = null;
|
||||||
|
|
||||||
foreach (var unit in pirateUnit.pirateUnitStat.UnitList)
|
foreach (var unit in pirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
var myPos = unit.transform.position;
|
var myPos = unit.transform.position;
|
||||||
var ray = new Ray(myPos + Vector3.up, Vector3.down);
|
var ray = new Ray(myPos + Vector3.up, Vector3.down);
|
||||||
@ -499,7 +420,7 @@ namespace BlueWaterProject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var unit in pirateUnit.pirateUnitStat.UnitList)
|
foreach (var unit in pirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
if (isOffense)
|
if (isOffense)
|
||||||
{
|
{
|
||||||
@ -529,20 +450,20 @@ namespace BlueWaterProject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
// /// <summary>
|
||||||
/// pirateUnitList 내의 속성
|
// /// pirateUnitList 내의 속성
|
||||||
/// </summary>
|
// /// </summary>
|
||||||
public void RemovePlayerUnitListElement(PirateUnit pirateUnit)
|
// public void RemovePlayerUnitListElement(PirateUnit pirateUnit)
|
||||||
{
|
// {
|
||||||
if (pirateUnitList.Contains(pirateUnit))
|
// if (pirateUnitList.Contains(pirateUnit))
|
||||||
{
|
// {
|
||||||
pirateUnitList.Remove(pirateUnit);
|
// pirateUnitList.Remove(pirateUnit);
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
Debug.Log("제거하려는 속성이 리스트 내에 존재하지 않습니다.");
|
// Debug.Log("제거하려는 속성이 리스트 내에 존재하지 않습니다.");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,8 @@ namespace BlueWaterProject
|
|||||||
#region Property and variable
|
#region Property and variable
|
||||||
|
|
||||||
[Tooltip("선택된 부대")]
|
[Tooltip("선택된 부대")]
|
||||||
[field: SerializeField] public PirateUnit SelectedUnitController { get; private set; }
|
[field: SerializeField] public bool IsSelectable { get; private set; } = true;
|
||||||
|
[field: SerializeField] public PirateUnit SelectedPirateUnit { get; private set; }
|
||||||
|
|
||||||
[SerializeField] private LayerMask unitLayer;
|
[SerializeField] private LayerMask unitLayer;
|
||||||
[SerializeField] private LayerMask groundLayer;
|
[SerializeField] private LayerMask groundLayer;
|
||||||
@ -47,89 +48,89 @@ namespace BlueWaterProject
|
|||||||
|
|
||||||
private void OnLeftClick(InputAction.CallbackContext context)
|
private void OnLeftClick(InputAction.CallbackContext context)
|
||||||
{
|
{
|
||||||
if (!context.performed) return;
|
if (!context.performed || !IsSelectable) return;
|
||||||
|
|
||||||
var ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
|
var ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
|
||||||
|
|
||||||
// 부대를 클릭 했을 때,
|
// 부대를 클릭 했을 때,
|
||||||
if (Physics.Raycast(ray, out var hit, Mathf.Infinity, unitLayer))
|
if (Physics.Raycast(ray, out var hit, Mathf.Infinity, unitLayer, QueryTriggerInteraction.Collide))
|
||||||
{
|
{
|
||||||
var unitController = hit.collider.transform.parent.GetComponent<PirateUnit>();
|
var pirateUnit = hit.collider.transform.parent.GetComponent<PirateUnit>();
|
||||||
if (unitController == null) return;
|
if (pirateUnit == null) return;
|
||||||
|
|
||||||
// 선택된 부대가 없었을 때,
|
// 선택된 부대가 없었을 때,
|
||||||
if (SelectedUnitController == null)
|
if (SelectedPirateUnit == null)
|
||||||
{
|
{
|
||||||
foreach (var soldier in unitController.pirateUnitStat.UnitList)
|
foreach (var pirateAi in pirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
soldier.SelectedHighlight();
|
pirateAi.SelectedHighlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedUnitController = unitController;
|
SelectedPirateUnit = pirateUnit;
|
||||||
GameManager.Inst.SlowSpeedMode();
|
GameManager.Inst.SlowSpeedMode();
|
||||||
}
|
}
|
||||||
// 선택된 부대가 이미 선택된 부대일 때,
|
// 선택된 부대가 이미 선택된 부대일 때,
|
||||||
else if (SelectedUnitController == unitController)
|
else if (SelectedPirateUnit == pirateUnit)
|
||||||
{
|
{
|
||||||
foreach (var soldier in SelectedUnitController.pirateUnitStat.UnitList)
|
foreach (var pirateAi in SelectedPirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
soldier.ResetHighlight();
|
pirateAi.ResetHighlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedUnitController = null;
|
SelectedPirateUnit = null;
|
||||||
GameManager.Inst.DefaultSpeedMode();
|
GameManager.Inst.DefaultSpeedMode();
|
||||||
}
|
}
|
||||||
// 다른 부대가 선택될 때,
|
// 다른 부대가 선택될 때,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (var soldier in unitController.pirateUnitStat.UnitList)
|
foreach (var pirateAi in pirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
soldier.SelectedHighlight();
|
pirateAi.SelectedHighlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var soldier in SelectedUnitController.pirateUnitStat.UnitList)
|
foreach (var pirateAi in SelectedPirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
soldier.ResetHighlight();
|
pirateAi.ResetHighlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedUnitController = unitController;
|
SelectedPirateUnit = pirateUnit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 부대를 클릭하지 않았을 때,
|
// 부대를 클릭하지 않았을 때,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 선택된 부대가 없었을 때,
|
// 선택된 부대가 없었을 때,
|
||||||
if (SelectedUnitController == null) return;
|
if (SelectedPirateUnit == null) return;
|
||||||
|
|
||||||
// 선택된 부대가 있었을 때,
|
// 선택된 부대가 있었을 때,
|
||||||
foreach (var soldier in SelectedUnitController.pirateUnitStat.UnitList)
|
foreach (var pirateAi in SelectedPirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
soldier.ResetHighlight();
|
pirateAi.ResetHighlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedUnitController = null;
|
SelectedPirateUnit = null;
|
||||||
GameManager.Inst.DefaultSpeedMode();
|
GameManager.Inst.DefaultSpeedMode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnRightClick(InputAction.CallbackContext context)
|
private void OnRightClick(InputAction.CallbackContext context)
|
||||||
{
|
{
|
||||||
if (!context.performed || SelectedUnitController == null) return;
|
if (!context.performed || !IsSelectable || SelectedPirateUnit == null) return;
|
||||||
|
|
||||||
var ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
|
var ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
|
||||||
|
|
||||||
if (Physics.Raycast(ray, out var hit, Mathf.Infinity, groundLayer))
|
if (Physics.Raycast(ray, out var hit, Mathf.Infinity, groundLayer, QueryTriggerInteraction.Collide))
|
||||||
{
|
{
|
||||||
var targetPos = hit.point;
|
var targetPos = hit.point;
|
||||||
SelectedUnitController.MoveCommand(targetPos);
|
SelectedPirateUnit.MoveCommand(targetPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var soldier in SelectedUnitController.pirateUnitStat.UnitList)
|
foreach (var pirateAi in SelectedPirateUnit.pirateUnitStat.PirateAiList)
|
||||||
{
|
{
|
||||||
soldier.ResetHighlight();
|
pirateAi.ResetHighlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectedUnitController = null;
|
SelectedPirateUnit = null;
|
||||||
GameManager.Inst.DefaultSpeedMode();
|
GameManager.Inst.DefaultSpeedMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ MonoBehaviour:
|
|||||||
m_Name: EnemyViewDataSo
|
m_Name: EnemyViewDataSo
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
enemyViewDataList:
|
enemyViewDataList:
|
||||||
- <Idx>k__BackingField: enemy_view_salior_001
|
- <Idx>k__BackingField: enemy_view_sailor_001
|
||||||
<Backpack>k__BackingField: 1
|
<Backpack>k__BackingField: 1
|
||||||
<LeftWeapon>k__BackingField: 2
|
<LeftWeapon>k__BackingField: 2
|
||||||
<LeftShield>k__BackingField: -1
|
<LeftShield>k__BackingField: -1
|
||||||
@ -21,7 +21,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: -1
|
<RightWeapon>k__BackingField: -1
|
||||||
<Body>k__BackingField: 11
|
<Body>k__BackingField: 11
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: enemy_view_salior_002
|
- <Idx>k__BackingField: enemy_view_sailor_002
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: 1
|
<LeftShield>k__BackingField: 1
|
||||||
@ -29,7 +29,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: 27
|
<RightWeapon>k__BackingField: 27
|
||||||
<Body>k__BackingField: 18
|
<Body>k__BackingField: 18
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: enemy_view_salior_003
|
- <Idx>k__BackingField: enemy_view_sailor_003
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: -1
|
<LeftShield>k__BackingField: -1
|
||||||
@ -37,7 +37,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: 27
|
<RightWeapon>k__BackingField: 27
|
||||||
<Body>k__BackingField: 17
|
<Body>k__BackingField: 17
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: enemy_view_salior_004
|
- <Idx>k__BackingField: enemy_view_sailor_004
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: 9
|
<LeftShield>k__BackingField: 9
|
||||||
@ -45,7 +45,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: 6
|
<RightWeapon>k__BackingField: 6
|
||||||
<Body>k__BackingField: 39
|
<Body>k__BackingField: 39
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: enemy_view_salior_005
|
- <Idx>k__BackingField: enemy_view_sailor_005
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: -1
|
<LeftShield>k__BackingField: -1
|
||||||
|
@ -13,7 +13,7 @@ MonoBehaviour:
|
|||||||
m_Name: PirateViewDataSo
|
m_Name: PirateViewDataSo
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
pirateViewDataList:
|
pirateViewDataList:
|
||||||
- <Idx>k__BackingField: pirate_view_salior_001
|
- <Idx>k__BackingField: pirate_view_sailor_001
|
||||||
<Backpack>k__BackingField: 0
|
<Backpack>k__BackingField: 0
|
||||||
<LeftWeapon>k__BackingField: 1
|
<LeftWeapon>k__BackingField: 1
|
||||||
<LeftShield>k__BackingField: -1
|
<LeftShield>k__BackingField: -1
|
||||||
@ -21,7 +21,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: -1
|
<RightWeapon>k__BackingField: -1
|
||||||
<Body>k__BackingField: 1
|
<Body>k__BackingField: 1
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: pirate_view_salior_002
|
- <Idx>k__BackingField: pirate_view_sailor_002
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: -1
|
<LeftShield>k__BackingField: -1
|
||||||
@ -29,7 +29,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: 31
|
<RightWeapon>k__BackingField: 31
|
||||||
<Body>k__BackingField: 58
|
<Body>k__BackingField: 58
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: pirate_view_salior_003
|
- <Idx>k__BackingField: pirate_view_sailor_003
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: -1
|
<LeftShield>k__BackingField: -1
|
||||||
@ -37,7 +37,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: 27
|
<RightWeapon>k__BackingField: 27
|
||||||
<Body>k__BackingField: 60
|
<Body>k__BackingField: 60
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: pirate_view_salior_004
|
- <Idx>k__BackingField: pirate_view_sailor_004
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: 2
|
<LeftShield>k__BackingField: 2
|
||||||
@ -45,7 +45,7 @@ MonoBehaviour:
|
|||||||
<RightWeapon>k__BackingField: 24
|
<RightWeapon>k__BackingField: 24
|
||||||
<Body>k__BackingField: 58
|
<Body>k__BackingField: 58
|
||||||
<Flag>k__BackingField: -1
|
<Flag>k__BackingField: -1
|
||||||
- <Idx>k__BackingField: pirate_view_salior_005
|
- <Idx>k__BackingField: pirate_view_sailor_005
|
||||||
<Backpack>k__BackingField: -1
|
<Backpack>k__BackingField: -1
|
||||||
<LeftWeapon>k__BackingField: -1
|
<LeftWeapon>k__BackingField: -1
|
||||||
<LeftShield>k__BackingField: -1
|
<LeftShield>k__BackingField: -1
|
||||||
|
@ -53,7 +53,7 @@ namespace BlueWaterProject
|
|||||||
InitDictionary();
|
InitDictionary();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitDictionary()
|
public void InitDictionary()
|
||||||
{
|
{
|
||||||
enemyViewDictionary = CreateDictionaryFromList(EnemyViewDataSo.enemyViewDataList, GlobalValue.ENEMY_VIEW_DATA_CAPACITY);
|
enemyViewDictionary = CreateDictionaryFromList(EnemyViewDataSo.enemyViewDataList, GlobalValue.ENEMY_VIEW_DATA_CAPACITY);
|
||||||
pirateViewDictionary = CreateDictionaryFromList(PirateViewDataSo.pirateViewDataList,GlobalValue.PIRATE_VIEW_DATA_CAPACITY);
|
pirateViewDictionary = CreateDictionaryFromList(PirateViewDataSo.pirateViewDataList,GlobalValue.PIRATE_VIEW_DATA_CAPACITY);
|
||||||
|
8
BlueWater/Assets/05.Prefabs/Character/Unit.meta
Normal file
8
BlueWater/Assets/05.Prefabs/Character/Unit.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 73efe896bf0b06c4ba9377d9242af474
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -11,7 +11,7 @@ GameObject:
|
|||||||
- component: {fileID: 5207057600910007092}
|
- component: {fileID: 5207057600910007092}
|
||||||
- component: {fileID: 8302608207570708049}
|
- component: {fileID: 8302608207570708049}
|
||||||
m_Layer: 6
|
m_Layer: 6
|
||||||
m_Name: Unit
|
m_Name: EnemyUnit
|
||||||
m_TagString: Unit
|
m_TagString: Unit
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
56
BlueWater/Assets/05.Prefabs/Character/Unit/PirateUnit.prefab
Normal file
56
BlueWater/Assets/05.Prefabs/Character/Unit/PirateUnit.prefab
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &4895273044672475838
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5207057600910007092}
|
||||||
|
- component: {fileID: 8153086830725145821}
|
||||||
|
m_Layer: 6
|
||||||
|
m_Name: PirateUnit
|
||||||
|
m_TagString: Unit
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &5207057600910007092
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4895273044672475838}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &8153086830725145821
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4895273044672475838}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: ab5bc80b7b2c7ae4a8629d3000d7c0e0, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
pirateUnitStat:
|
||||||
|
<Idx>k__BackingField:
|
||||||
|
<CaptainStatIdx>k__BackingField:
|
||||||
|
<SailorStatIdx>k__BackingField:
|
||||||
|
<UnitName>k__BackingField:
|
||||||
|
<SailorCount>k__BackingField: 0
|
||||||
|
<AttackerType>k__BackingField: -1
|
||||||
|
<OffenseType>k__BackingField: -1
|
||||||
|
<DefenseType>k__BackingField: -1
|
||||||
|
<PirateAiList>k__BackingField: []
|
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fb89776af2571544e99d012ee545cdb9
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user