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
|
||||
|
||||
// 일반 변수
|
||||
protected bool isDrawGizmosInFieldOfView = true;
|
||||
protected LayerMask targetLayer;
|
||||
protected Vector3 defensePos;
|
||||
|
||||
protected IslandInfo attackingIslandInfo;
|
||||
|
||||
// 컴포넌트 관련 변수
|
||||
protected Animator humanAnimator;
|
||||
protected Animator combatAnimator;
|
||||
protected NavMeshAgent humanAgent;
|
||||
protected CapsuleCollider myCollider;
|
||||
protected CapsuleCollider hitBoxCollider;
|
||||
@ -44,7 +47,7 @@ namespace BlueWaterProject
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.InitComponent();
|
||||
base.Awake();
|
||||
|
||||
FlagLookAtCamera();
|
||||
SetLayer();
|
||||
@ -58,14 +61,14 @@ namespace BlueWaterProject
|
||||
{
|
||||
base.InitComponent();
|
||||
|
||||
humanAnimator = Utils.GetComponentAndAssert<Animator>(transform);
|
||||
combatAnimator = Utils.GetComponentAndAssert<Animator>(transform);
|
||||
humanAgent = Utils.GetComponentAndAssert<NavMeshAgent>(transform);
|
||||
myCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform);
|
||||
hitBoxCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform.Find("HitBox"));
|
||||
lookAtConstraint = Utils.GetComponentAndAssert<LookAtConstraint>(flagContainer);
|
||||
}
|
||||
|
||||
private void FlagLookAtCamera()
|
||||
protected void FlagLookAtCamera()
|
||||
{
|
||||
if (Camera.main != null)
|
||||
{
|
||||
@ -80,7 +83,10 @@ namespace BlueWaterProject
|
||||
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;
|
||||
public void SetIslandInfo(IslandInfo info) => attackingIslandInfo = info;
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ namespace BlueWaterProject
|
||||
{
|
||||
#region Properties and variables
|
||||
|
||||
protected EnemyStat enemyStat;
|
||||
[field: SerializeField] public EnemyStat EnemyStat { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@ -30,21 +30,34 @@ namespace BlueWaterProject
|
||||
hitBoxObj.tag = "Enemy";
|
||||
targetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
||||
|
||||
if (enemyStat.AttackerType == EAttackerType.OFFENSE)
|
||||
if (EnemyStat.AttackerType == EAttackerType.OFFENSE)
|
||||
{
|
||||
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()
|
||||
{
|
||||
var enemyViewData = GetEnemyViewData();
|
||||
var enemyViewData = DataManager.Inst.GetEnemyViewDictionaryFromKey(EnemyStat.ViewIdx);
|
||||
|
||||
InitViewModel(enemyViewData);
|
||||
SetCurrentHp(enemyStat.MaxHp);
|
||||
SetMoveSpeed(enemyStat.MoveSpd);
|
||||
SetCurrentHp(EnemyStat.MaxHp);
|
||||
SetMoveSpeed(EnemyStat.MoveSpd);
|
||||
|
||||
if (enemyStat.AttackerType == EAttackerType.DEFENSE)
|
||||
if (EnemyStat.AttackerType == EAttackerType.DEFENSE)
|
||||
{
|
||||
defensePos = transform.position;
|
||||
}
|
||||
@ -61,11 +74,10 @@ namespace BlueWaterProject
|
||||
SetActiveViewModel(flagContainer, enemyView.Flag);
|
||||
}
|
||||
|
||||
protected override void SetCurrentHp(float value) => enemyStat.CurrentHp = value;
|
||||
|
||||
private EnemyView GetEnemyViewData() => Application.isPlaying ?
|
||||
DataManager.Inst.GetEnemyViewDictionaryFromKey(enemyStat.ViewIdx) :
|
||||
DataManager.Inst.GetEnemyViewSoFromKey(enemyStat.ViewIdx);
|
||||
protected override void SetCurrentHp(float value) => EnemyStat.CurrentHp = value;
|
||||
public void SetAttackerType(EAttackerType type) => EnemyStat.AttackerType = type;
|
||||
public void SetOffenseType(EOffenseType type) => EnemyStat.OffenseType = type;
|
||||
public void SetDefenseType(EDefenseType type) => EnemyStat.DefenseType = type;
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -1,10 +1,101 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Pool;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace BlueWaterProject
|
||||
{
|
||||
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
|
||||
{
|
||||
#region Properties and variables
|
||||
|
||||
private CloseWeapon closeWeapon;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Custrom methods
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public override void InitStartInEditor()
|
||||
{
|
||||
base.InitStartInEditor();
|
||||
|
||||
SetCloseWeapon();
|
||||
}
|
||||
#endif
|
||||
|
||||
protected override void InitStart()
|
||||
{
|
||||
base.InitStart();
|
||||
|
||||
|
||||
SetAnimatorController("SpearKnight");
|
||||
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;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||
closeWeapon.SetBoxCollider();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -6,18 +6,36 @@ namespace BlueWaterProject
|
||||
{
|
||||
public class EnemySpearman : EnemyAi
|
||||
{
|
||||
#region Properties and variables
|
||||
|
||||
private CloseWeapon closeWeapon;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Custrom methods
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public override void InitStartInEditor()
|
||||
{
|
||||
base.InitStartInEditor();
|
||||
|
||||
SetCloseWeapon();
|
||||
}
|
||||
#endif
|
||||
|
||||
protected override void InitStart()
|
||||
{
|
||||
base.InitStart();
|
||||
|
||||
SetAnimatorController("Spearman");
|
||||
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;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||
closeWeapon.SetBoxCollider();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -6,18 +6,36 @@ namespace BlueWaterProject
|
||||
{
|
||||
public class EnemySwordKnight : EnemyAi
|
||||
{
|
||||
#region Properties and variables
|
||||
|
||||
private CloseWeapon closeWeapon;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Custrom methods
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public override void InitStartInEditor()
|
||||
{
|
||||
base.InitStartInEditor();
|
||||
|
||||
SetCloseWeapon();
|
||||
}
|
||||
#endif
|
||||
|
||||
protected override void InitStart()
|
||||
{
|
||||
base.InitStart();
|
||||
|
||||
SetAnimatorController("SwordKnight");
|
||||
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;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||
closeWeapon.SetBoxCollider();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -6,18 +6,36 @@ namespace BlueWaterProject
|
||||
{
|
||||
public class EnemySwordman : EnemyAi
|
||||
{
|
||||
#region Properties and variables
|
||||
|
||||
private CloseWeapon closeWeapon;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Custrom methods
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public override void InitStartInEditor()
|
||||
{
|
||||
base.InitStartInEditor();
|
||||
|
||||
SetCloseWeapon();
|
||||
}
|
||||
#endif
|
||||
|
||||
protected override void InitStart()
|
||||
{
|
||||
base.InitStart();
|
||||
|
||||
SetAnimatorController("Swordman");
|
||||
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;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
@ -27,5 +45,7 @@ namespace BlueWaterProject
|
||||
closeWeapon.SetAttackerAiType(EAiType.ENEMY);
|
||||
closeWeapon.SetBoxCollider();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -26,11 +26,41 @@ namespace BlueWaterProject
|
||||
[DisableIf("@true")]
|
||||
[SerializeField] private IslandInfo islandInfo;
|
||||
|
||||
protected PirateStat pirateStat;
|
||||
[field: SerializeField] public PirateStat PirateStat { get; set; }
|
||||
|
||||
private PirateUnit mouseEnterPirateUnit;
|
||||
private UnitSelection unitSelection;
|
||||
|
||||
#endregion
|
||||
|
||||
#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()
|
||||
{
|
||||
@ -41,6 +71,13 @@ namespace BlueWaterProject
|
||||
|
||||
#region Custom methods
|
||||
|
||||
protected override void InitComponent()
|
||||
{
|
||||
base.InitComponent();
|
||||
|
||||
unitSelection = Utils.GetComponentAndAssert<UnitSelection>(GameObject.Find("UnitManager").transform);
|
||||
}
|
||||
|
||||
protected override void SetLayer()
|
||||
{
|
||||
gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||
@ -49,7 +86,7 @@ namespace BlueWaterProject
|
||||
hitBoxObj.tag = "Pirate";
|
||||
targetLayer = LayerMask.GetMask("Enemy");
|
||||
|
||||
if (pirateStat.AttackerType == EAttackerType.OFFENSE)
|
||||
if (PirateStat.AttackerType == EAttackerType.OFFENSE)
|
||||
{
|
||||
targetLayer |= LayerMask.GetMask("Props");
|
||||
}
|
||||
@ -57,14 +94,14 @@ namespace BlueWaterProject
|
||||
|
||||
protected virtual void InitStart()
|
||||
{
|
||||
var pirateViewData = GetPirateViewData();
|
||||
var pirateViewData = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx);
|
||||
|
||||
InitViewModel(pirateViewData);
|
||||
FindMaterial();
|
||||
SetCurrentHp(pirateStat.MaxHp);
|
||||
SetMoveSpeed(pirateStat.MoveSpd);
|
||||
SetCurrentHp(PirateStat.MaxHp);
|
||||
SetMoveSpeed(PirateStat.MoveSpd);
|
||||
|
||||
if (pirateStat.AttackerType == EAttackerType.DEFENSE)
|
||||
if (PirateStat.AttackerType == EAttackerType.DEFENSE)
|
||||
{
|
||||
defensePos = transform.position;
|
||||
}
|
||||
@ -100,12 +137,27 @@ namespace BlueWaterProject
|
||||
skinMaterialList.Add(skin.material);
|
||||
}
|
||||
}
|
||||
|
||||
public void CommandMove(Vector3 movePos)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected override void SetCurrentHp(float value) => pirateStat.CurrentHp = value;
|
||||
private void SetOutlineColor(Color color)
|
||||
{
|
||||
foreach (var skin in skinMaterialList)
|
||||
{
|
||||
skin.SetColor(OutlineColorHash, color);
|
||||
}
|
||||
}
|
||||
|
||||
private PirateView GetPirateViewData() => Application.isPlaying ?
|
||||
DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx) :
|
||||
DataManager.Inst.GetPirateViewSoFromKey(pirateStat.ViewIdx);
|
||||
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
|
||||
}
|
||||
|
@ -1,10 +1,100 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Pool;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace BlueWaterProject
|
||||
{
|
||||
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();
|
||||
|
||||
SetAnimatorController("Axeman");
|
||||
SetCloseWeapon();
|
||||
}
|
||||
|
||||
private void SetCloseWeapon()
|
||||
{
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||
if (rightWeaponView == -1) return;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
|
@ -12,12 +12,13 @@ namespace BlueWaterProject
|
||||
{
|
||||
base.InitStart();
|
||||
|
||||
SetAnimatorController("Spearman");
|
||||
SetCloseWeapon();
|
||||
}
|
||||
|
||||
private void SetCloseWeapon()
|
||||
{
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||
if (rightWeaponView == -1) return;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
|
@ -12,12 +12,13 @@ namespace BlueWaterProject
|
||||
{
|
||||
base.InitStart();
|
||||
|
||||
SetAnimatorController("SwordKnight");
|
||||
SetCloseWeapon();
|
||||
}
|
||||
|
||||
private void SetCloseWeapon()
|
||||
{
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||
if (rightWeaponView == -1) return;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
|
@ -12,12 +12,13 @@ namespace BlueWaterProject
|
||||
{
|
||||
base.InitStart();
|
||||
|
||||
SetAnimatorController("Swordman");
|
||||
SetCloseWeapon();
|
||||
}
|
||||
|
||||
private void SetCloseWeapon()
|
||||
{
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx).RightWeapon;
|
||||
var rightWeaponView = DataManager.Inst.GetPirateViewDictionaryFromKey(PirateStat.ViewIdx).RightWeapon;
|
||||
if (rightWeaponView == -1) return;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(rightWeaponView).AddComponent<CloseWeapon>();
|
||||
|
@ -1,6 +1,5 @@
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace BlueWaterProject
|
||||
@ -22,7 +21,7 @@ namespace BlueWaterProject
|
||||
{
|
||||
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 ray = new Ray(unitPos + Vector3.up, Vector3.down);
|
||||
@ -77,7 +76,7 @@ namespace BlueWaterProject
|
||||
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 void OnTypeChanged() => isClickedTypeAllButton = false;
|
||||
|
||||
|
@ -37,7 +37,7 @@ namespace BlueWaterProject
|
||||
[field: SerializeField] public EDefenseType DefenseType { get; set; }
|
||||
|
||||
[field: Tooltip("부대 병력 리스트")]
|
||||
[field: SerializeField] public List<AiController> UnitList { get; set; }
|
||||
[field: SerializeField] public List<EnemyAi> EnemyAiList { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@ -53,11 +53,11 @@ namespace BlueWaterProject
|
||||
AttackerType = EAttackerType.NONE;
|
||||
OffenseType = EOffenseType.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,
|
||||
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<AiController> unitList)
|
||||
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<EnemyAi> enemyAiList)
|
||||
{
|
||||
Idx = idx;
|
||||
CaptainStatIdx = captainIdx;
|
||||
@ -66,7 +66,7 @@ namespace BlueWaterProject
|
||||
SailorCount = sailorCount;
|
||||
OffenseType = offenseType;
|
||||
DefenseType = defenseType;
|
||||
UnitList = unitList;
|
||||
EnemyAiList = enemyAiList;
|
||||
|
||||
if (AttackerType == EAttackerType.NONE) return;
|
||||
|
||||
@ -83,7 +83,7 @@ namespace BlueWaterProject
|
||||
AttackerType = enemyUnitStat.AttackerType;
|
||||
OffenseType = enemyUnitStat.OffenseType;
|
||||
DefenseType = enemyUnitStat.DefenseType;
|
||||
UnitList = enemyUnitStat.UnitList;
|
||||
EnemyAiList = enemyUnitStat.EnemyAiList;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -50,7 +50,7 @@ namespace BlueWaterProject
|
||||
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitManager.Inst.UnitSpacing;
|
||||
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: Tooltip("부대 병력 리스트")]
|
||||
[field: SerializeField] public List<AiController> UnitList { get; set; }
|
||||
[field: SerializeField] public List<PirateAi> PirateAiList { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@ -53,11 +53,11 @@ namespace BlueWaterProject
|
||||
AttackerType = EAttackerType.NONE;
|
||||
OffenseType = EOffenseType.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,
|
||||
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<AiController> unitList)
|
||||
int sailorCount, EAttackerType attackerType, EOffenseType offenseType, EDefenseType defenseType, List<PirateAi> pirateAiList)
|
||||
{
|
||||
Idx = idx;
|
||||
CaptainStatIdx = captainIdx;
|
||||
@ -66,7 +66,7 @@ namespace BlueWaterProject
|
||||
SailorCount = sailorCount;
|
||||
OffenseType = offenseType;
|
||||
DefenseType = defenseType;
|
||||
UnitList = unitList;
|
||||
PirateAiList = pirateAiList;
|
||||
|
||||
if (AttackerType == EAttackerType.NONE) return;
|
||||
|
||||
@ -83,7 +83,7 @@ namespace BlueWaterProject
|
||||
AttackerType = pirateUnitStat.AttackerType;
|
||||
OffenseType = pirateUnitStat.OffenseType;
|
||||
DefenseType = pirateUnitStat.DefenseType;
|
||||
UnitList = pirateUnitStat.UnitList;
|
||||
PirateAiList = pirateUnitStat.PirateAiList;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -3,36 +3,19 @@ using System.Collections.Generic;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEditor.Animations;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
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>
|
||||
{
|
||||
#region Property and variable
|
||||
|
||||
[Tooltip("유닛 프리팹")]
|
||||
[field: SerializeField] public GameObject UnitPrefab { get; private set; }
|
||||
[Tooltip("Pirate 프리팹")]
|
||||
[field: SerializeField] public GameObject PiratePrefab { get; private set; }
|
||||
|
||||
[Tooltip("캐릭터 기초 프리팹")]
|
||||
[field: SerializeField] public GameObject BaseCharacterPrefab { get; private set; }
|
||||
[field: SerializeField] public GameObject BaseHumanPrefab { get; private set; }
|
||||
|
||||
[Tooltip("화살 프리팹")]
|
||||
[field: SerializeField] public GameObject ArrowPrefab { get; private set; }
|
||||
@ -41,30 +24,16 @@ namespace BlueWaterProject
|
||||
[field: SerializeField] public LayerMask GroundLayer { get; private set; }
|
||||
|
||||
[Tooltip("바닥과의 최대 허용 거리")]
|
||||
[field: SerializeField] public float MaxGroundDistance { get; private set; } = 2.5f;
|
||||
[field: SerializeField] public float MaxGroundDistance { get; private set; } = 4f;
|
||||
|
||||
[Tooltip("병력 간의 간격")]
|
||||
[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: 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 const int MATRICES_CAPACITY = 9;
|
||||
private const int CHARACTER_PREFAB_CAPACITY = 10;
|
||||
|
||||
private const int ANIMATOR_CONTROLLER_PREFAB_CAPACITY = 6;
|
||||
private const int PIRATE_UNIT_CAPACITY = 50;
|
||||
|
||||
@ -75,58 +44,34 @@ namespace BlueWaterProject
|
||||
protected override void OnAwake()
|
||||
{
|
||||
GroundLayer = LayerMask.GetMask("Ground");
|
||||
InitUnitMatrices();
|
||||
InitPlayerUnitList();
|
||||
//InitPlayerUnitList();
|
||||
}
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
GroundLayer = LayerMask.GetMask("Ground");
|
||||
MaxGroundDistance = 2.5f;
|
||||
MaxGroundDistance = 4f;
|
||||
UnitSpacing = 2.5f;
|
||||
characterPrefabList = new List<GameObject>(CHARACTER_PREFAB_CAPACITY);
|
||||
InitUnitMatrices();
|
||||
InitCharacterPrefabList();
|
||||
InitPlayerUnitList();
|
||||
//InitPlayerUnitList();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#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
|
||||
/// <summary>
|
||||
/// 프리팹 초기화 함수
|
||||
/// </summary>
|
||||
[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("프리팹 초기화")]
|
||||
private void InitCharacterPrefabList()
|
||||
{
|
||||
UnitPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character", "Unit");
|
||||
BaseCharacterPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character", "BaseCharacter");
|
||||
PiratePrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character/Unit", "PirateUnit");
|
||||
BaseHumanPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs/Character", "BaseHuman");
|
||||
ArrowPrefab = Utils.LoadPrefabFromFolder("Assets/05.Prefabs", "Arrow_01");
|
||||
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", "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
|
||||
|
||||
/// <summary>
|
||||
/// 플레이어가 가진 유닛 리스트 초기화
|
||||
/// </summary>
|
||||
[GUIColor(0, 1, 0)]
|
||||
[Button("플레이어 유닛 가져오기")]
|
||||
private void InitPlayerUnitList()
|
||||
{
|
||||
SetPlayerUnits();
|
||||
|
||||
pirateUnitList = new List<PirateUnit>(PIRATE_UNIT_CAPACITY);
|
||||
|
||||
foreach (Transform item in pirateUnits)
|
||||
{
|
||||
if (!item.gameObject.activeSelf) continue;
|
||||
|
||||
pirateUnitList.Add(item.GetComponent<PirateUnit>());
|
||||
}
|
||||
}
|
||||
// /// <summary>
|
||||
// /// 플레이어가 가진 유닛 리스트 초기화
|
||||
// /// </summary>
|
||||
// [GUIColor(0, 1, 0)]
|
||||
// [Button("플레이어 유닛 가져오기")]
|
||||
// private void InitPlayerUnitList()
|
||||
// {
|
||||
// SetPlayerUnits();
|
||||
//
|
||||
// pirateUnitList = new List<PirateUnit>(PIRATE_UNIT_CAPACITY);
|
||||
//
|
||||
// foreach (Transform item in pirateUnits)
|
||||
// {
|
||||
// if (!item.gameObject.activeSelf) continue;
|
||||
//
|
||||
// pirateUnitList.Add(item.GetComponent<PirateUnit>());
|
||||
// }
|
||||
// }
|
||||
|
||||
private void SetPlayerUnits()
|
||||
{
|
||||
@ -229,12 +160,12 @@ namespace BlueWaterProject
|
||||
{
|
||||
var card = DataManager.Inst.GetCardDictionaryFromKey(cardIdx);
|
||||
var unit = DataManager.Inst.GetPirateUnitStatDictionaryFromKey(card.UnitIdx);
|
||||
var captainStat = DataManager.Inst.GetEnemyStatDictionaryFromKey(unit.CaptainStatIdx);
|
||||
var sailorStat = DataManager.Inst.GetEnemyStatDictionaryFromKey(unit.SailorStatIdx);
|
||||
var captainStat = DataManager.Inst.GetPirateStatDictionaryFromKey(unit.CaptainStatIdx);
|
||||
var sailorStat = DataManager.Inst.GetPirateStatDictionaryFromKey(unit.SailorStatIdx);
|
||||
|
||||
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);
|
||||
|
||||
DestroyDeployedUnits(newUnitController);
|
||||
@ -243,7 +174,7 @@ namespace BlueWaterProject
|
||||
var baseName = pirateStat.UnitType.ToString();
|
||||
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 unitControllerRotation = unitControllerTransform.rotation;
|
||||
@ -284,7 +215,7 @@ namespace BlueWaterProject
|
||||
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitSpacing;
|
||||
var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset);
|
||||
|
||||
var baseObj = Instantiate(BaseCharacterPrefab, spawnPosition,
|
||||
var baseObj = Instantiate(BaseHumanPrefab, spawnPosition,
|
||||
Quaternion.identity, newUnitController.transform);
|
||||
|
||||
var newSoldierName = $"{baseName}_{currentPos + 1:00}";
|
||||
@ -292,12 +223,12 @@ namespace BlueWaterProject
|
||||
baseObj.name = newSoldierName;
|
||||
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);
|
||||
aiController.SetOffenseType(newUnitController.pirateUnitStat.OffenseType);
|
||||
aiController.SetDefenseType(newUnitController.pirateUnitStat.DefenseType);
|
||||
newUnitController.pirateUnitStat.UnitList.Add(aiController);
|
||||
pirateAi.SetAttackerType(attackerType);
|
||||
pirateAi.SetOffenseType(newUnitController.pirateUnitStat.OffenseType);
|
||||
pirateAi.SetDefenseType(newUnitController.pirateUnitStat.DefenseType);
|
||||
newUnitController.pirateUnitStat.PirateAiList.Add(pirateAi);
|
||||
}
|
||||
}
|
||||
newUnitController.transform.rotation *= unitControllerRotation;
|
||||
@ -321,11 +252,11 @@ namespace BlueWaterProject
|
||||
|
||||
DestroyDeployedUnits(enemyUnit);
|
||||
|
||||
var enemyStat = DataManager.Inst.GetEnemyStatDictionaryFromKey(enemyUnit.enemyUnitStat.SailorStatIdx);
|
||||
var enemyStat = DataManager.Inst.GetEnemyStatSoFromKey(enemyUnit.enemyUnitStat.SailorStatIdx);
|
||||
var baseName = enemyStat.UnitType.ToString();
|
||||
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 unitControllerRotation = unitControllerTransform.rotation;
|
||||
@ -366,7 +297,7 @@ namespace BlueWaterProject
|
||||
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitSpacing;
|
||||
var spawnPosition = unitControllerTransform.position + new Vector3(xOffset, 0, zOffset);
|
||||
|
||||
var baseObj = Instantiate(BaseCharacterPrefab, spawnPosition,
|
||||
var baseObj = Instantiate(BaseHumanPrefab, spawnPosition,
|
||||
Quaternion.identity, enemyUnit.transform);
|
||||
|
||||
var newSoldierName = $"{baseName}_{currentPos + 1:00}";
|
||||
@ -374,63 +305,53 @@ namespace BlueWaterProject
|
||||
baseObj.name = newSoldierName;
|
||||
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);
|
||||
aiController.SetOffenseType(enemyUnit.enemyUnitStat.OffenseType);
|
||||
aiController.SetDefenseType(enemyUnit.enemyUnitStat.DefenseType);
|
||||
aiController.InitStartInEditor();
|
||||
enemyUnit.enemyUnitStat.UnitList.Add(aiController);
|
||||
enemyAi.SetAttackerType(enemyUnit.enemyUnitStat.AttackerType);
|
||||
enemyAi.SetOffenseType(enemyUnit.enemyUnitStat.OffenseType);
|
||||
enemyAi.SetDefenseType(enemyUnit.enemyUnitStat.DefenseType);
|
||||
enemyAi.InitStartInEditor();
|
||||
enemyUnit.enemyUnitStat.EnemyAiList.Add(enemyAi);
|
||||
}
|
||||
}
|
||||
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;
|
||||
switch (unitType)
|
||||
EnemyAi enemyAi = unitType switch
|
||||
{
|
||||
case GlobalValue.UnitType.NONE:
|
||||
break;
|
||||
case GlobalValue.UnitType.ARCHER_E:
|
||||
temp = baseObj.AddComponent<Archer>();
|
||||
break;
|
||||
case GlobalValue.UnitType.SPEAR_KNIGHT_E:
|
||||
temp = baseObj.AddComponent<SpearKnight>();
|
||||
break;
|
||||
case GlobalValue.UnitType.SPEARMAN_E:
|
||||
temp = baseObj.AddComponent<Spearman>();
|
||||
break;
|
||||
case GlobalValue.UnitType.SWORD_KNIGHT_E:
|
||||
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);
|
||||
}
|
||||
GlobalValue.UnitType.ARCHER_E => baseObj.AddComponent<EnemyArcher>(),
|
||||
GlobalValue.UnitType.SPEAR_KNIGHT_E => baseObj.AddComponent<EnemySpearKnight>(),
|
||||
GlobalValue.UnitType.SPEARMAN_E => baseObj.AddComponent<EnemySpearman>(),
|
||||
GlobalValue.UnitType.SWORD_KNIGHT_E => baseObj.AddComponent<EnemySwordKnight>(),
|
||||
GlobalValue.UnitType.SWORDMAN_E => baseObj.AddComponent<EnemySwordman>(),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(unitType), unitType, null)
|
||||
};
|
||||
|
||||
if (temp == null) return null;
|
||||
if (enemyAi == null) return null;
|
||||
|
||||
//temp.AiStat = new AiStat(aiStat);
|
||||
return temp;
|
||||
enemyAi.EnemyStat = new EnemyStat(enemyStat);
|
||||
return enemyAi;
|
||||
}
|
||||
|
||||
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)
|
||||
};
|
||||
|
||||
if (pirateAi == null) return null;
|
||||
|
||||
pirateAi.PirateStat = new PirateStat(pirateStat);
|
||||
return pirateAi;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -438,13 +359,13 @@ namespace BlueWaterProject
|
||||
/// </summary>
|
||||
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;
|
||||
|
||||
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);
|
||||
if (Physics.Raycast(ray, out var hit, MaxGroundDistance, GroundLayer))
|
||||
{
|
||||
@ -463,7 +384,7 @@ namespace BlueWaterProject
|
||||
{
|
||||
enemyUnit.transform.position = assignPos;
|
||||
|
||||
foreach (var unit in enemyUnit.enemyUnitStat.UnitList)
|
||||
foreach (var unit in enemyUnit.enemyUnitStat.EnemyAiList)
|
||||
{
|
||||
var myPos = unit.transform.position;
|
||||
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);
|
||||
}
|
||||
@ -484,7 +405,7 @@ namespace BlueWaterProject
|
||||
pirateUnit.transform.position = assignPos;
|
||||
IslandInfo hitIslandInfo = null;
|
||||
|
||||
foreach (var unit in pirateUnit.pirateUnitStat.UnitList)
|
||||
foreach (var unit in pirateUnit.pirateUnitStat.PirateAiList)
|
||||
{
|
||||
var myPos = unit.transform.position;
|
||||
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)
|
||||
{
|
||||
@ -529,20 +450,20 @@ namespace BlueWaterProject
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// pirateUnitList 내의 속성
|
||||
/// </summary>
|
||||
public void RemovePlayerUnitListElement(PirateUnit pirateUnit)
|
||||
{
|
||||
if (pirateUnitList.Contains(pirateUnit))
|
||||
{
|
||||
pirateUnitList.Remove(pirateUnit);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("제거하려는 속성이 리스트 내에 존재하지 않습니다.");
|
||||
}
|
||||
}
|
||||
// /// <summary>
|
||||
// /// pirateUnitList 내의 속성
|
||||
// /// </summary>
|
||||
// public void RemovePlayerUnitListElement(PirateUnit pirateUnit)
|
||||
// {
|
||||
// if (pirateUnitList.Contains(pirateUnit))
|
||||
// {
|
||||
// pirateUnitList.Remove(pirateUnit);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Debug.Log("제거하려는 속성이 리스트 내에 존재하지 않습니다.");
|
||||
// }
|
||||
// }
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -7,9 +7,10 @@ namespace BlueWaterProject
|
||||
public class UnitSelection : MonoBehaviour
|
||||
{
|
||||
#region Property and variable
|
||||
|
||||
|
||||
[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 groundLayer;
|
||||
@ -47,89 +48,89 @@ namespace BlueWaterProject
|
||||
|
||||
private void OnLeftClick(InputAction.CallbackContext context)
|
||||
{
|
||||
if (!context.performed) return;
|
||||
if (!context.performed || !IsSelectable) return;
|
||||
|
||||
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>();
|
||||
if (unitController == null) return;
|
||||
var pirateUnit = hit.collider.transform.parent.GetComponent<PirateUnit>();
|
||||
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();
|
||||
}
|
||||
// 선택된 부대가 이미 선택된 부대일 때,
|
||||
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();
|
||||
}
|
||||
// 다른 부대가 선택될 때,
|
||||
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
|
||||
{
|
||||
// 선택된 부대가 없었을 때,
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
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;
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: EnemyViewDataSo
|
||||
m_EditorClassIdentifier:
|
||||
enemyViewDataList:
|
||||
- <Idx>k__BackingField: enemy_view_salior_001
|
||||
- <Idx>k__BackingField: enemy_view_sailor_001
|
||||
<Backpack>k__BackingField: 1
|
||||
<LeftWeapon>k__BackingField: 2
|
||||
<LeftShield>k__BackingField: -1
|
||||
@ -21,7 +21,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: -1
|
||||
<Body>k__BackingField: 11
|
||||
<Flag>k__BackingField: -1
|
||||
- <Idx>k__BackingField: enemy_view_salior_002
|
||||
- <Idx>k__BackingField: enemy_view_sailor_002
|
||||
<Backpack>k__BackingField: -1
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: 1
|
||||
@ -29,7 +29,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: 27
|
||||
<Body>k__BackingField: 18
|
||||
<Flag>k__BackingField: -1
|
||||
- <Idx>k__BackingField: enemy_view_salior_003
|
||||
- <Idx>k__BackingField: enemy_view_sailor_003
|
||||
<Backpack>k__BackingField: -1
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: -1
|
||||
@ -37,7 +37,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: 27
|
||||
<Body>k__BackingField: 17
|
||||
<Flag>k__BackingField: -1
|
||||
- <Idx>k__BackingField: enemy_view_salior_004
|
||||
- <Idx>k__BackingField: enemy_view_sailor_004
|
||||
<Backpack>k__BackingField: -1
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: 9
|
||||
@ -45,7 +45,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: 6
|
||||
<Body>k__BackingField: 39
|
||||
<Flag>k__BackingField: -1
|
||||
- <Idx>k__BackingField: enemy_view_salior_005
|
||||
- <Idx>k__BackingField: enemy_view_sailor_005
|
||||
<Backpack>k__BackingField: -1
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: -1
|
||||
|
@ -13,7 +13,7 @@ MonoBehaviour:
|
||||
m_Name: PirateViewDataSo
|
||||
m_EditorClassIdentifier:
|
||||
pirateViewDataList:
|
||||
- <Idx>k__BackingField: pirate_view_salior_001
|
||||
- <Idx>k__BackingField: pirate_view_sailor_001
|
||||
<Backpack>k__BackingField: 0
|
||||
<LeftWeapon>k__BackingField: 1
|
||||
<LeftShield>k__BackingField: -1
|
||||
@ -21,7 +21,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: -1
|
||||
<Body>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
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: -1
|
||||
@ -29,7 +29,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: 31
|
||||
<Body>k__BackingField: 58
|
||||
<Flag>k__BackingField: -1
|
||||
- <Idx>k__BackingField: pirate_view_salior_003
|
||||
- <Idx>k__BackingField: pirate_view_sailor_003
|
||||
<Backpack>k__BackingField: -1
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: -1
|
||||
@ -37,7 +37,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: 27
|
||||
<Body>k__BackingField: 60
|
||||
<Flag>k__BackingField: -1
|
||||
- <Idx>k__BackingField: pirate_view_salior_004
|
||||
- <Idx>k__BackingField: pirate_view_sailor_004
|
||||
<Backpack>k__BackingField: -1
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: 2
|
||||
@ -45,7 +45,7 @@ MonoBehaviour:
|
||||
<RightWeapon>k__BackingField: 24
|
||||
<Body>k__BackingField: 58
|
||||
<Flag>k__BackingField: -1
|
||||
- <Idx>k__BackingField: pirate_view_salior_005
|
||||
- <Idx>k__BackingField: pirate_view_sailor_005
|
||||
<Backpack>k__BackingField: -1
|
||||
<LeftWeapon>k__BackingField: -1
|
||||
<LeftShield>k__BackingField: -1
|
||||
|
@ -53,7 +53,7 @@ namespace BlueWaterProject
|
||||
InitDictionary();
|
||||
}
|
||||
|
||||
private void InitDictionary()
|
||||
public void InitDictionary()
|
||||
{
|
||||
enemyViewDictionary = CreateDictionaryFromList(EnemyViewDataSo.enemyViewDataList, GlobalValue.ENEMY_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: 8302608207570708049}
|
||||
m_Layer: 6
|
||||
m_Name: Unit
|
||||
m_Name: EnemyUnit
|
||||
m_TagString: Unit
|
||||
m_Icon: {fileID: 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