parent
de69533b8d
commit
243fcbd0ef
File diff suppressed because it is too large
Load Diff
Binary file not shown.
BIN
BlueWater/Assets/01.Scenes/02.Main_TG/NavMesh-Grounds.asset
Normal file
BIN
BlueWater/Assets/01.Scenes/02.Main_TG/NavMesh-Grounds.asset
Normal file
Binary file not shown.
@ -1,7 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ff1f29eab234cf4490d9bb383892c44
|
||||
DefaultImporter:
|
||||
guid: 2fac3aeaa82ea9148ac35f80b65e67dc
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 23800000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -95,6 +95,8 @@ namespace BlueWaterProject
|
||||
|
||||
protected static readonly WaitForSeconds FindTargetWaitTime = new(0.5f);
|
||||
private static readonly WaitForSeconds CheckAgentArriveTime = new(0.1f);
|
||||
|
||||
private delegate AiView GetAiViewDataDelegate(string viewIdx);
|
||||
|
||||
#endregion
|
||||
|
||||
@ -117,6 +119,7 @@ namespace BlueWaterProject
|
||||
InitStart();
|
||||
ExecuteFindTarget();
|
||||
Attack();
|
||||
navMeshAgent.stoppingDistance = AiStat.AtkRange;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
@ -128,6 +131,44 @@ namespace BlueWaterProject
|
||||
private void Update()
|
||||
{
|
||||
aiAnimator.SetFloat(SpeedHash, navMeshAgent.velocity.normalized.magnitude);
|
||||
|
||||
if (!TargetTransform || !navMeshAgent.enabled) return;
|
||||
|
||||
var distanceToTarget = Vector3.Distance(transform.position, TargetTransform.position);
|
||||
|
||||
navMeshAgent.isStopped = distanceToTarget <= navMeshAgent.stoppingDistance;
|
||||
|
||||
// switch (AiStat.AttackerType)
|
||||
// {
|
||||
// case EAttackerType.NONE:
|
||||
// break;
|
||||
// case EAttackerType.OFFENSE:
|
||||
// navMeshAgent.SetDestination(distanceToTarget <= AiStat.AtkRange ? transform.position : TargetTransform.position);
|
||||
// break;
|
||||
// case EAttackerType.DEFENSE:
|
||||
// switch (AiStat.DefenseType)
|
||||
// {
|
||||
// case EDefenseType.NONE:
|
||||
// print("AiStat.DefenseType == NONE Error");
|
||||
// break;
|
||||
// case EDefenseType.STRIKER:
|
||||
// navMeshAgent.SetDestination(distanceToTarget <= AiStat.AtkRange ? transform.position : TargetTransform.position);
|
||||
// break;
|
||||
// case EDefenseType.MIDFIELDER:
|
||||
// navMeshAgent.SetDestination(distanceToTarget <= AiStat.AtkRange ? transform.position : TargetTransform.position);
|
||||
// break;
|
||||
// case EDefenseType.DEFENDER:
|
||||
// navMeshAgent.SetDestination(distanceToTarget <= AiStat.AtkRange ? transform.position : TargetTransform.position);
|
||||
// break;
|
||||
// case EDefenseType.KEEPER:
|
||||
// break;
|
||||
// default:
|
||||
// throw new ArgumentOutOfRangeException();
|
||||
// }
|
||||
// break;
|
||||
// default:
|
||||
// throw new ArgumentOutOfRangeException();
|
||||
// }
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
@ -177,7 +218,7 @@ namespace BlueWaterProject
|
||||
|
||||
public void TakeDamage(float attackerPower, float attackerShieldPenetrationRate, Vector3? attackPos = null)
|
||||
{
|
||||
if (attackPos != null && AiStat.AttackerType == EAttackerType.DEFENSE && !TargetTransform)
|
||||
if (attackPos != null && navMeshAgent.enabled && AiStat.AttackerType == EAttackerType.DEFENSE && !TargetTransform)
|
||||
{
|
||||
BeAttackedMovement((Vector3)attackPos);
|
||||
}
|
||||
@ -238,7 +279,7 @@ namespace BlueWaterProject
|
||||
[field: SerializeField] public Transform TargetTransform { get; set; }
|
||||
|
||||
|
||||
private const int TARGET_MAX_SIZE = 30;
|
||||
protected const int TARGET_MAX_SIZE = 30;
|
||||
|
||||
public void DrawGizmosInFieldOfView()
|
||||
{
|
||||
@ -297,6 +338,17 @@ namespace BlueWaterProject
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
if (TargetTransform && navMeshAgent.enabled)
|
||||
{
|
||||
var distanceToTarget = Vector3.Distance(transform.position, TargetTransform.position);
|
||||
|
||||
navMeshAgent.isStopped = distanceToTarget <= navMeshAgent.stoppingDistance;
|
||||
if (distanceToTarget > navMeshAgent.stoppingDistance)
|
||||
{
|
||||
navMeshAgent.SetDestination(TargetTransform.position);
|
||||
}
|
||||
}
|
||||
|
||||
yield return FindTargetWaitTime;
|
||||
}
|
||||
}
|
||||
@ -312,24 +364,24 @@ namespace BlueWaterProject
|
||||
break;
|
||||
case EDefenseType.STRIKER:
|
||||
SetNearestTargetInDefense(transform.position, AiStat.ViewRange);
|
||||
if (TargetTransform)
|
||||
{
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
}
|
||||
// if (TargetTransform)
|
||||
// {
|
||||
// Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
// }
|
||||
break;
|
||||
case EDefenseType.MIDFIELDER:
|
||||
SetNearestTargetInDefense(transform.position, AiStat.ViewRange);
|
||||
if (TargetTransform)
|
||||
{
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
}
|
||||
// if (TargetTransform)
|
||||
// {
|
||||
// Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
// }
|
||||
break;
|
||||
case EDefenseType.DEFENDER:
|
||||
SetNearestTargetInDefense(defensePos, AiStat.DefenseRange);
|
||||
if (TargetTransform)
|
||||
{
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
}
|
||||
// if (TargetTransform)
|
||||
// {
|
||||
// Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
// }
|
||||
break;
|
||||
case EDefenseType.KEEPER:
|
||||
SetNearestTargetInDefense(transform.position, AiStat.ViewRange);
|
||||
@ -337,12 +389,23 @@ namespace BlueWaterProject
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
if (TargetTransform && navMeshAgent.enabled)
|
||||
{
|
||||
var distanceToTarget = Vector3.Distance(transform.position, TargetTransform.position);
|
||||
|
||||
navMeshAgent.isStopped = distanceToTarget <= navMeshAgent.stoppingDistance;
|
||||
if (distanceToTarget > navMeshAgent.stoppingDistance)
|
||||
{
|
||||
navMeshAgent.SetDestination(TargetTransform.position);
|
||||
}
|
||||
}
|
||||
|
||||
yield return FindTargetWaitTime;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetNearestTargetInOffense<T>(List<T> targetList)
|
||||
public virtual void SetNearestTargetInOffense<T>(List<T> targetList)
|
||||
{
|
||||
if (targetList.Count <= 0) return;
|
||||
|
||||
@ -350,6 +413,12 @@ namespace BlueWaterProject
|
||||
{
|
||||
var myPos = transform.position;
|
||||
var targetTransform = (Transform)(object)t;
|
||||
|
||||
if (!targetTransform)
|
||||
{
|
||||
return float.MaxValue;
|
||||
}
|
||||
|
||||
var targetCollider = targetTransform.GetComponent<Collider>();
|
||||
|
||||
if (!targetCollider)
|
||||
@ -365,10 +434,10 @@ namespace BlueWaterProject
|
||||
if (nearestTarget == null) return;
|
||||
|
||||
TargetTransform = (Transform)(object)nearestTarget;
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
//Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
}
|
||||
|
||||
public void SetNearestTargetInDefense(Vector3 centerPos, float range)
|
||||
public virtual void SetNearestTargetInDefense(Vector3 centerPos, float range)
|
||||
{
|
||||
Array.Clear(ColliderWithinRange, 0, TARGET_MAX_SIZE);
|
||||
|
||||
@ -429,15 +498,15 @@ namespace BlueWaterProject
|
||||
print("AiStat.DefenseType == NONE Error");
|
||||
break;
|
||||
case EDefenseType.STRIKER:
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
Utils.SetCloseDestination(navMeshAgent, attackPos, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
break;
|
||||
case EDefenseType.MIDFIELDER:
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
Utils.SetCloseDestination(navMeshAgent, attackPos, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
break;
|
||||
case EDefenseType.DEFENDER:
|
||||
if (Vector3.Distance(transform.position, attackPos) <= AiStat.DefenseRange)
|
||||
if (Vector3.Distance(defensePos, attackPos) <= AiStat.DefenseRange)
|
||||
{
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
Utils.SetCloseDestination(navMeshAgent, attackPos, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
}
|
||||
break;
|
||||
case EDefenseType.KEEPER:
|
||||
@ -518,58 +587,55 @@ namespace BlueWaterProject
|
||||
|
||||
private void InitStart()
|
||||
{
|
||||
InitViewModel();
|
||||
var getAiViewData = GetAiViewData(false);
|
||||
|
||||
InitViewModel(false);
|
||||
FindMaterial();
|
||||
SetLayer();
|
||||
SetCloseWeapon(getAiViewData);
|
||||
SetCurrentHp(AiStat.MaxHp);
|
||||
SetMoveSpeed(AiStat.MoveSpd);
|
||||
|
||||
defensePos = transform.position;
|
||||
}
|
||||
|
||||
private void InitViewModel()
|
||||
|
||||
private void InitViewModel(bool isEditor)
|
||||
{
|
||||
SetActiveViewModel(backpackContainer, DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).Backpack);
|
||||
SetActiveViewModel(leftWeaponContainer, DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).LeftWeapon);
|
||||
SetActiveViewModel(leftShieldContainer, DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).LeftShield);
|
||||
SetActiveViewModel(headContainer, DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).Head);
|
||||
SetActiveViewModel(rightWeaponContainer, DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).RightWeapon);
|
||||
SetActiveViewModel(bodyContainer, DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).Body);
|
||||
SetActiveViewModel(flagContainer, DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).Flag);
|
||||
var getAiViewData = GetAiViewData(isEditor);
|
||||
|
||||
if (DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).RightWeapon == -1) return;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(DataManager.Inst.GetAiViewDictionaryKey(AiStat.ViewIdx).RightWeapon).AddComponent<CloseWeapon>();
|
||||
closeWeapon.gameObject.layer = LayerMask.NameToLayer("Weapon");
|
||||
closeWeapon.SetAttackerType(AiStat.AttackerType);
|
||||
SetActiveViewModel(backpackContainer, getAiViewData(AiStat.ViewIdx).Backpack);
|
||||
SetActiveViewModel(leftWeaponContainer, getAiViewData(AiStat.ViewIdx).LeftWeapon);
|
||||
SetActiveViewModel(leftShieldContainer, getAiViewData(AiStat.ViewIdx).LeftShield);
|
||||
SetActiveViewModel(headContainer, getAiViewData(AiStat.ViewIdx).Head);
|
||||
SetActiveViewModel(rightWeaponContainer, getAiViewData(AiStat.ViewIdx).RightWeapon);
|
||||
SetActiveViewModel(bodyContainer, getAiViewData(AiStat.ViewIdx).Body);
|
||||
SetActiveViewModel(flagContainer, getAiViewData(AiStat.ViewIdx).Flag);
|
||||
}
|
||||
|
||||
private void SetCloseWeapon(GetAiViewDataDelegate getAiViewData)
|
||||
{
|
||||
if (getAiViewData(AiStat.ViewIdx).RightWeapon == -1) return;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(getAiViewData(AiStat.ViewIdx).RightWeapon).AddComponent<CloseWeapon>();
|
||||
closeWeapon.gameObject.layer = LayerMask.NameToLayer("Weapon");
|
||||
closeWeapon.SetAttackerAiType(AiStat.AiType);
|
||||
closeWeapon.SetBoxCollider();
|
||||
}
|
||||
|
||||
private GetAiViewDataDelegate GetAiViewData(bool isEditor) => isEditor ? DataManager.Inst.GetAiViewSoKey : DataManager.Inst.GetAiViewDictionaryKey;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public void InitStartInEditor()
|
||||
{
|
||||
var getAiViewData = GetAiViewData(true);
|
||||
|
||||
InitComponent();
|
||||
InitViewModelInEditor();
|
||||
InitViewModel(true);
|
||||
SetLayer();
|
||||
SetCloseWeapon(getAiViewData);
|
||||
SetCurrentHp(AiStat.MaxHp);
|
||||
SetMoveSpeed(AiStat.MoveSpd);
|
||||
}
|
||||
|
||||
public void InitViewModelInEditor()
|
||||
{
|
||||
SetActiveViewModel(backpackContainer, DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).Backpack);
|
||||
SetActiveViewModel(leftWeaponContainer, DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).LeftWeapon);
|
||||
SetActiveViewModel(leftShieldContainer, DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).LeftShield);
|
||||
SetActiveViewModel(headContainer, DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).Head);
|
||||
SetActiveViewModel(rightWeaponContainer, DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).RightWeapon);
|
||||
SetActiveViewModel(bodyContainer, DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).Body);
|
||||
SetActiveViewModel(flagContainer, DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).Flag);
|
||||
|
||||
if (DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).RightWeapon == -1) return;
|
||||
|
||||
closeWeapon = rightWeaponContainer.GetChild(DataManager.Inst.GetAiViewSoKey(AiStat.ViewIdx).RightWeapon).AddComponent<CloseWeapon>();
|
||||
closeWeapon.gameObject.layer = LayerMask.NameToLayer("Weapon");
|
||||
closeWeapon.SetAttackerType(AiStat.AttackerType);
|
||||
}
|
||||
#endif
|
||||
|
||||
public void ExecuteFindTarget()
|
||||
@ -616,12 +682,10 @@ namespace BlueWaterProject
|
||||
{
|
||||
if (!CanAttack())
|
||||
{
|
||||
isAttacking = false;
|
||||
yield return FindTargetWaitTime;
|
||||
continue;
|
||||
}
|
||||
|
||||
isAttacking = true;
|
||||
closeWeapon.SetIsAttacked(false);
|
||||
closeWeapon.SetAttackerStat(AiStat);
|
||||
aiAnimator.SetTrigger(AttackHash);
|
||||
@ -655,15 +719,8 @@ namespace BlueWaterProject
|
||||
|
||||
var targetInAttackRange = Vector3.Distance(transform.position, TargetTransform.position) <=
|
||||
AiStat.AtkRange;
|
||||
|
||||
if (targetInAttackRange)
|
||||
{
|
||||
SetAgentIsStopped(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
SetAgentIsStopped(false);
|
||||
return false;
|
||||
return targetInAttackRange;
|
||||
}
|
||||
|
||||
private void FindMaterial()
|
||||
@ -718,19 +775,19 @@ namespace BlueWaterProject
|
||||
break;
|
||||
case EAiType.PLAYER:
|
||||
gameObject.layer = LayerMask.NameToLayer("Player");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Player");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||
hitBoxCollider.gameObject.tag = "Player";
|
||||
TargetLayer = LayerMask.GetMask("Enemy");
|
||||
break;
|
||||
case EAiType.PIRATE:
|
||||
gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||
hitBoxCollider.gameObject.tag = "Pirate";
|
||||
TargetLayer = LayerMask.GetMask("Enemy");
|
||||
break;
|
||||
case EAiType.ENEMY:
|
||||
gameObject.layer = LayerMask.NameToLayer("Enemy");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Enemy");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||
hitBoxCollider.gameObject.tag = "Enemy";
|
||||
TargetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
||||
break;
|
||||
@ -748,6 +805,7 @@ namespace BlueWaterProject
|
||||
public void SetAttackerType(EAttackerType type) => AiStat.AttackerType = type;
|
||||
public void SetOffenseType(EOffenseType type) => AiStat.OffenseType = type;
|
||||
public void SetDefenseType(EDefenseType type) => AiStat.DefenseType = type;
|
||||
public void SetCloseWeaponCanAttack(int boolValue) => closeWeapon.SetCanAttack(boolValue == 1);
|
||||
public void ResetHighlight() => SetOutlineColor(defaultSkinColor);
|
||||
public void MouseEnterHighlight() => SetOutlineColor(mouseEnterHighlightSkinColor);
|
||||
public void SelectedHighlight() => SetOutlineColor(selectedSkinColor);
|
||||
|
@ -83,7 +83,7 @@ namespace BlueWaterProject
|
||||
|
||||
[field: Tooltip("화살이 타겟에 도달하는 오차 범위(부정확함)")]
|
||||
[field: ShowIf("@UsingBow == true")]
|
||||
[field: Range(0, 2f)]
|
||||
[field: Range(0, 5f)]
|
||||
[field: SerializeField] public float Inaccuracy { get; set; }
|
||||
|
||||
#endregion
|
||||
|
@ -1,5 +1,7 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Pool;
|
||||
|
||||
@ -23,7 +25,7 @@ namespace BlueWaterProject
|
||||
|
||||
private IObjectPool<Arrow> arrowPool;
|
||||
|
||||
[SerializeField] private Vector3 rayOffset = new(0f, 0.7f, 0);
|
||||
[SerializeField] private Vector3 rayOffset = new(0f, 2f, 0);
|
||||
|
||||
#endregion
|
||||
|
||||
@ -80,7 +82,7 @@ namespace BlueWaterProject
|
||||
break;
|
||||
case EAiType.PLAYER:
|
||||
gameObject.layer = LayerMask.NameToLayer("Player");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Player");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||
hitBoxCollider.gameObject.tag = "Player";
|
||||
TargetLayer = LayerMask.GetMask("Enemy");
|
||||
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||
@ -88,7 +90,7 @@ namespace BlueWaterProject
|
||||
break;
|
||||
case EAiType.PIRATE:
|
||||
gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Pirate");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||
hitBoxCollider.gameObject.tag = "Pirate";
|
||||
TargetLayer = LayerMask.GetMask("Enemy");
|
||||
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||
@ -96,7 +98,7 @@ namespace BlueWaterProject
|
||||
break;
|
||||
case EAiType.ENEMY:
|
||||
gameObject.layer = LayerMask.NameToLayer("Enemy");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Enemy");
|
||||
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("HitBox");
|
||||
hitBoxCollider.gameObject.tag = "Enemy";
|
||||
TargetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate");
|
||||
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
|
||||
@ -133,20 +135,92 @@ namespace BlueWaterProject
|
||||
StartCoroutine(nameof(ShootArrowAnimation));
|
||||
}
|
||||
|
||||
protected override bool CanAttack()
|
||||
public override void SetNearestTargetInOffense<T>(List<T> targetList)
|
||||
{
|
||||
if (!TargetTransform) return false;
|
||||
|
||||
var myPos = transform.position;
|
||||
var targetPos = TargetTransform.position;
|
||||
var direction = ((targetPos + rayOffset) - (myPos + rayOffset)).normalized;
|
||||
if (targetList.Count <= 0) return;
|
||||
|
||||
var targetInAttackRange = Vector3.Distance(myPos, targetPos) <= AiStat.AtkRange;
|
||||
var nearestTarget = targetList.OrderBy(t =>
|
||||
{
|
||||
var myPos = transform.position;
|
||||
var targetTransform = (Transform)(object)t;
|
||||
|
||||
if (!targetTransform)
|
||||
{
|
||||
return float.MaxValue;
|
||||
}
|
||||
|
||||
var targetCollider = targetTransform.GetComponent<Collider>();
|
||||
|
||||
if (!targetCollider || !IsRaycastHitTarget(targetTransform))
|
||||
{
|
||||
return float.MaxValue;
|
||||
}
|
||||
|
||||
var closestPoint = targetCollider.ClosestPoint(myPos);
|
||||
return Vector3.Distance(myPos, closestPoint);
|
||||
})
|
||||
.FirstOrDefault();
|
||||
|
||||
if (nearestTarget == null) return;
|
||||
|
||||
TargetTransform = (Transform)(object)nearestTarget;
|
||||
|
||||
if (!TargetTransform || !navMeshAgent.enabled) return;
|
||||
Utils.SetCloseDestination(navMeshAgent, TargetTransform.position, AiStat.AtkRange - 0.5f, AiStat.AtkRange);
|
||||
}
|
||||
|
||||
public override void SetNearestTargetInDefense(Vector3 centerPos, float range)
|
||||
{
|
||||
Array.Clear(ColliderWithinRange, 0, TARGET_MAX_SIZE);
|
||||
|
||||
var maxColliderCount = Physics.OverlapSphereNonAlloc(centerPos, range, ColliderWithinRange,
|
||||
TargetLayer, QueryTriggerInteraction.Collide);
|
||||
|
||||
if (maxColliderCount <= 0)
|
||||
{
|
||||
TargetTransform = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var nearestDistance = Mathf.Infinity;
|
||||
Transform nearestTargetTransform = null;
|
||||
|
||||
for (var i = 0; i < maxColliderCount; i++)
|
||||
{
|
||||
var distanceToTarget = Vector3.Distance(transform.position, ColliderWithinRange[i].transform.position);
|
||||
|
||||
if (!IsRaycastHitTarget(ColliderWithinRange[i].transform) || distanceToTarget >= nearestDistance) continue;
|
||||
|
||||
nearestDistance = distanceToTarget;
|
||||
nearestTargetTransform = ColliderWithinRange[i].transform;
|
||||
}
|
||||
|
||||
TargetTransform = nearestTargetTransform;
|
||||
}
|
||||
|
||||
private bool IsRaycastHitTarget(Transform targetTransform)
|
||||
{
|
||||
var myPos = transform.position;
|
||||
var direction = ((targetTransform.position + rayOffset) - (myPos + rayOffset)).normalized;
|
||||
var raycastHitTarget = Physics.Raycast(myPos + rayOffset, direction, out var hit, AiStat.AtkRange, archerLayer, QueryTriggerInteraction.Collide);
|
||||
|
||||
return targetInAttackRange && raycastHitTarget;
|
||||
return raycastHitTarget && targetTransform == hit.transform;
|
||||
}
|
||||
|
||||
// protected override bool CanAttack()
|
||||
// {
|
||||
// if (!TargetTransform) return false;
|
||||
//
|
||||
// var myPos = transform.position;
|
||||
// var targetPos = TargetTransform.position;
|
||||
// var direction = ((targetPos + rayOffset) - (myPos + rayOffset)).normalized;
|
||||
//
|
||||
// var targetInAttackRange = Vector3.Distance(myPos, targetPos) <= AiStat.AtkRange;
|
||||
// var raycastHitTarget = Physics.Raycast(myPos + rayOffset, direction, out var hit, AiStat.AtkRange, archerLayer, QueryTriggerInteraction.Collide);
|
||||
//
|
||||
// return targetInAttackRange && raycastHitTarget;
|
||||
// }
|
||||
|
||||
private IEnumerator ShootArrowAnimation()
|
||||
{
|
||||
while (true)
|
||||
@ -175,8 +249,11 @@ namespace BlueWaterProject
|
||||
/// </summary>
|
||||
public void OnShootArrow()
|
||||
{
|
||||
if (!TargetTransform) return;
|
||||
|
||||
var arrow = arrowPool.Get();
|
||||
var isOffense = AiStat.AttackerType == EAttackerType.OFFENSE;
|
||||
|
||||
arrow.SetShootingArrow(leftWeaponContainer.position, transform.position,
|
||||
TargetTransform.position + rayOffset, AiStat, AiStat.AiType, AiStat.Inaccuracy, isOffense);
|
||||
arrow.ShootArrowCoroutine();
|
||||
@ -187,6 +264,8 @@ namespace BlueWaterProject
|
||||
/// </summary>
|
||||
public void OnStoppedMove(int boolValue)
|
||||
{
|
||||
if (!navMeshAgent.enabled) return;
|
||||
|
||||
navMeshAgent.isStopped = boolValue == 1;
|
||||
}
|
||||
|
||||
|
@ -97,20 +97,6 @@ namespace BlueWaterProject
|
||||
{
|
||||
return UnitManager.Inst.CanAssignUnit(this, transform.position);
|
||||
}
|
||||
|
||||
[PropertyOrder(2)]
|
||||
[Button("테스트 배치")]
|
||||
public void SetAssignUnit(Vector3 assignPos)
|
||||
{
|
||||
if (UnitManager.Inst.CanAssignUnit(this, assignPos))
|
||||
{
|
||||
UnitManager.Inst.AssignUnit(this, assignPos, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
print("병력이 땅과 맞닿아 있지 않아 배치할 수 없는 위치입니다.");
|
||||
}
|
||||
}
|
||||
|
||||
[PropertyOrder(-7)]
|
||||
[GUIColor(1, 0, 0)]
|
||||
|
@ -34,7 +34,7 @@ MonoBehaviour:
|
||||
<UsingShield>k__BackingField: 0
|
||||
<PenetrationResistivity>k__BackingField: 0
|
||||
<UsingBow>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 4
|
||||
- <Idx>k__BackingField: ai_stat_sailor_e_002
|
||||
<ViewIdx>k__BackingField: ai_view_sailor_e_002
|
||||
<UnitType>k__BackingField: 1
|
||||
@ -49,7 +49,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 4.5
|
||||
<AtkCooldown>k__BackingField: 2
|
||||
<ViewRange>k__BackingField: 10
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 10
|
||||
<ShieldPenetrationRate>k__BackingField: 75
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -71,7 +71,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5.5
|
||||
<AtkCooldown>k__BackingField: 2
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 75
|
||||
<AvoidanceRate>k__BackingField: 20
|
||||
@ -93,7 +93,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 10
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -115,7 +115,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 6
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 30
|
||||
@ -144,7 +144,7 @@ MonoBehaviour:
|
||||
<UsingShield>k__BackingField: 0
|
||||
<PenetrationResistivity>k__BackingField: 0
|
||||
<UsingBow>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 4
|
||||
- <Idx>k__BackingField: ai_stat_sailor_p_002
|
||||
<ViewIdx>k__BackingField: ai_view_sailor_p_002
|
||||
<UnitType>k__BackingField: 6
|
||||
@ -159,7 +159,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5
|
||||
<AtkCooldown>k__BackingField: 2.5
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 100
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -181,7 +181,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5.5
|
||||
<AtkCooldown>k__BackingField: 2
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 75
|
||||
<AvoidanceRate>k__BackingField: 20
|
||||
@ -203,7 +203,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 10
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -225,7 +225,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 6
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 30
|
||||
@ -254,7 +254,7 @@ MonoBehaviour:
|
||||
<UsingShield>k__BackingField: 0
|
||||
<PenetrationResistivity>k__BackingField: 0
|
||||
<UsingBow>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 4
|
||||
- <Idx>k__BackingField: ai_stat_captain_e_002
|
||||
<ViewIdx>k__BackingField: ai_view_captain_e_002
|
||||
<UnitType>k__BackingField: 1
|
||||
@ -269,7 +269,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 4.5
|
||||
<AtkCooldown>k__BackingField: 2
|
||||
<ViewRange>k__BackingField: 10
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 10
|
||||
<ShieldPenetrationRate>k__BackingField: 75
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -291,7 +291,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5.5
|
||||
<AtkCooldown>k__BackingField: 2
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 75
|
||||
<AvoidanceRate>k__BackingField: 20
|
||||
@ -313,7 +313,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 10
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -335,7 +335,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 6
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 30
|
||||
@ -364,7 +364,7 @@ MonoBehaviour:
|
||||
<UsingShield>k__BackingField: 0
|
||||
<PenetrationResistivity>k__BackingField: 0
|
||||
<UsingBow>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 1
|
||||
<Inaccuracy>k__BackingField: 4
|
||||
- <Idx>k__BackingField: ai_stat_captain_p_002
|
||||
<ViewIdx>k__BackingField: ai_view_captain_p_002
|
||||
<UnitType>k__BackingField: 6
|
||||
@ -379,7 +379,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5
|
||||
<AtkCooldown>k__BackingField: 2.5
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 100
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -401,7 +401,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5.5
|
||||
<AtkCooldown>k__BackingField: 2
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 2
|
||||
<AtkRange>k__BackingField: 3.5
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 75
|
||||
<AvoidanceRate>k__BackingField: 20
|
||||
@ -423,7 +423,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 5
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 10
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 10
|
||||
@ -445,7 +445,7 @@ MonoBehaviour:
|
||||
<MoveSpd>k__BackingField: 6
|
||||
<AtkCooldown>k__BackingField: 1.5
|
||||
<ViewRange>k__BackingField: 15
|
||||
<AtkRange>k__BackingField: 1.5
|
||||
<AtkRange>k__BackingField: 3
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 50
|
||||
<AvoidanceRate>k__BackingField: 30
|
||||
|
@ -33,3 +33,13 @@ MonoBehaviour:
|
||||
<OffenseType>k__BackingField: -1
|
||||
<DefenseType>k__BackingField: 2
|
||||
<UnitList>k__BackingField: []
|
||||
- <Idx>k__BackingField: unit_swordman_e_001
|
||||
<CaptainStatIdx>k__BackingField: ai_stat_captain_e_005
|
||||
<SailorStatIdx>k__BackingField: ai_stat_sailor_e_005
|
||||
<UnitName>k__BackingField: EnemySwordMan001
|
||||
<UnitType>k__BackingField: -1
|
||||
<SailorCount>k__BackingField: 8
|
||||
<AttackerType>k__BackingField: 1
|
||||
<OffenseType>k__BackingField: -1
|
||||
<DefenseType>k__BackingField: 0
|
||||
<UnitList>k__BackingField: []
|
||||
|
@ -10,8 +10,10 @@ namespace BlueWaterProject
|
||||
|
||||
private bool isAttacked;
|
||||
|
||||
private EAttackerType eAttackerType;
|
||||
private EAiType attackerAiType;
|
||||
private AiStat attackerStat;
|
||||
private bool isInit;
|
||||
private bool canAttack;
|
||||
|
||||
#endregion
|
||||
|
||||
@ -19,26 +21,28 @@ namespace BlueWaterProject
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (isAttacked) return;
|
||||
if (!isInit || !canAttack || isAttacked) return;
|
||||
|
||||
if (other.gameObject.layer == LayerMask.NameToLayer("HitBox"))
|
||||
{
|
||||
switch (eAttackerType)
|
||||
switch (attackerAiType)
|
||||
{
|
||||
case EAttackerType.NONE:
|
||||
case EAiType.NONE:
|
||||
print("attackerAiType == NONE Error");
|
||||
break;
|
||||
case EAttackerType.OFFENSE:
|
||||
if (!other.gameObject.CompareTag("Enemy") && !other.gameObject.CompareTag("House"))
|
||||
case EAiType.PLAYER:
|
||||
case EAiType.PIRATE:
|
||||
if (other.gameObject.CompareTag("Enemy"))
|
||||
{
|
||||
return;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EAttackerType.DEFENSE:
|
||||
if (!other.gameObject.CompareTag("Player") && !other.gameObject.CompareTag("Pirate"))
|
||||
return;
|
||||
case EAiType.ENEMY:
|
||||
if (other.gameObject.CompareTag("Pirate") || other.gameObject.CompareTag("Player"))
|
||||
{
|
||||
return;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
return;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
@ -55,9 +59,25 @@ namespace BlueWaterProject
|
||||
|
||||
#region Custom function
|
||||
|
||||
public void SetBoxCollider()
|
||||
{
|
||||
var col = GetComponent<Collider>();
|
||||
if (col)
|
||||
{
|
||||
col.isTrigger = true;
|
||||
isInit = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var boxCollider = gameObject.AddComponent<BoxCollider>();
|
||||
boxCollider.isTrigger = true;
|
||||
isInit = true;
|
||||
}
|
||||
|
||||
public void SetIsAttacked(bool value) => isAttacked = value;
|
||||
public void SetAttackerType(EAttackerType value) => eAttackerType = value;
|
||||
public void SetAttackerAiType(EAiType value) => attackerAiType = value;
|
||||
public void SetAttackerStat(AiStat value) => attackerStat = value;
|
||||
public void SetCanAttack(bool value) => canAttack = value;
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -8899,19 +8899,19 @@ NavMeshAgent:
|
||||
m_GameObject: {fileID: 155132}
|
||||
m_Enabled: 1
|
||||
m_AgentTypeID: 0
|
||||
m_Radius: 0.4
|
||||
m_Radius: 0.5
|
||||
m_Speed: 3
|
||||
m_Acceleration: 40
|
||||
m_Acceleration: 20
|
||||
avoidancePriority: 50
|
||||
m_AngularSpeed: 180
|
||||
m_StoppingDistance: 3
|
||||
m_AutoTraverseOffMeshLink: 1
|
||||
m_AutoBraking: 0
|
||||
m_AutoBraking: 1
|
||||
m_AutoRepath: 1
|
||||
m_Height: 1.6
|
||||
m_BaseOffset: 0
|
||||
m_WalkableMask: 1
|
||||
m_ObstacleAvoidanceType: 1
|
||||
m_WalkableMask: 33
|
||||
m_ObstacleAvoidanceType: 4
|
||||
--- !u!54 &8419222071034356516
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -8975,32 +8975,38 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: d17ac59ab4fe31846b058c6e1ca1cbb8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
attackerType: 0
|
||||
offenseType: 0
|
||||
defenseType: 0
|
||||
skinMaterialList: []
|
||||
defaultSkinColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
mouseEnterHighlightSkinColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
selectedSkinColor: {r: 0, g: 0, b: 1, a: 1}
|
||||
islandInfo: {fileID: 0}
|
||||
<AiStat>k__BackingField:
|
||||
<Idx>k__BackingField:
|
||||
<ViewIdx>k__BackingField:
|
||||
<UnitType>k__BackingField: -1
|
||||
<AiType>k__BackingField: -1
|
||||
<AttackerType>k__BackingField: -1
|
||||
<OffenseType>k__BackingField: -1
|
||||
<DefenseType>k__BackingField: -1
|
||||
<MaxHp>k__BackingField: 0
|
||||
<CurrentHp>k__BackingField: 0
|
||||
<Atk>k__BackingField: 0
|
||||
<Def>k__BackingField: 0
|
||||
<MoveSpd>k__BackingField: 0
|
||||
<AtkCooldown>k__BackingField: 0
|
||||
<ViewRange>k__BackingField: 0
|
||||
<AtkRange>k__BackingField: 0
|
||||
<DefenseRange>k__BackingField: 0
|
||||
<ShieldPenetrationRate>k__BackingField: 0
|
||||
<AvoidanceRate>k__BackingField: 0
|
||||
<UsingShield>k__BackingField: 0
|
||||
<PenetrationResistivity>k__BackingField: 0
|
||||
<UsingBow>k__BackingField: 0
|
||||
<Inaccuracy>k__BackingField: 0
|
||||
<IsDrawGizmosInFieldOfView>k__BackingField: 1
|
||||
<TargetLayer>k__BackingField:
|
||||
serializedVersion: 2
|
||||
m_Bits: 1024
|
||||
<ViewRadius>k__BackingField: 3
|
||||
<ColliderWithinRange>k__BackingField:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
@ -9033,8 +9039,6 @@ MonoBehaviour:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
<TargetTransform>k__BackingField: {fileID: 0}
|
||||
<AttackMoveType>k__BackingField: 2
|
||||
<BeAttackedMoveType>k__BackingField: 2
|
||||
<IsCommanded>k__BackingField: 0
|
||||
--- !u!1 &156456
|
||||
GameObject:
|
||||
|
@ -259,7 +259,7 @@ AnimatorState:
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 5a7200e1c2b48164d856cdab807a71bb, type: 3}
|
||||
m_Motion: {fileID: 7400000, guid: 3116e7e540a8c7a459c83af74f1be5e5, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
@ -333,7 +333,7 @@ AnimatorState:
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: e8b6ae497645a274e98d76a6e407ce8b, type: 3}
|
||||
m_Motion: {fileID: 7400000, guid: 5efa22af53c1f5242b3fb26fb436e771, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
@ -381,43 +381,43 @@ AnimatorController:
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000}
|
||||
- m_Name: AttackType
|
||||
m_Type: 3
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000}
|
||||
- m_Name: DeathType
|
||||
m_Type: 3
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000}
|
||||
- m_Name: Attack
|
||||
m_Type: 9
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000}
|
||||
- m_Name: TakeDamage
|
||||
m_Type: 9
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000}
|
||||
- m_Name: Death
|
||||
m_Type: 9
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000}
|
||||
- m_Name: Shield
|
||||
m_Type: 9
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000}
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base
|
||||
|
@ -36544,6 +36544,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.33333334
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.53333336
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
@ -36472,6 +36472,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.33333334
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.53333336
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
36225
BlueWater/Assets/07.Animation/shield_04_attack_A.anim
Normal file
36225
BlueWater/Assets/07.Animation/shield_04_attack_A.anim
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a55ee4efaad27d948ba5f03fc6d7bc80
|
||||
DefaultImporter:
|
||||
guid: 5efa22af53c1f5242b3fb26fb436e771
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
37161
BlueWater/Assets/07.Animation/shield_attack_B.anim
Normal file
37161
BlueWater/Assets/07.Animation/shield_attack_B.anim
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed9b95dc6ed6d0647ad7f1a8f305385d
|
||||
DefaultImporter:
|
||||
guid: 3116e7e540a8c7a459c83af74f1be5e5
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -35080,6 +35080,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.33333334
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.7
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
@ -35800,6 +35800,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.33333334
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.7
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
@ -35356,6 +35356,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.3
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.6666667
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
@ -36778,6 +36778,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.3
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 0.6666667
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
@ -35332,6 +35332,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.26666668
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.6
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
@ -40447,6 +40447,20 @@ AnimationClip:
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.26666668
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.6
|
||||
functionName: SetCloseWeaponCanAttack
|
||||
data:
|
||||
objectReferenceParameter: {fileID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 1.5
|
||||
functionName: OnAttacking
|
||||
data:
|
||||
|
@ -1,14 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d7c4217783978e4abe6496ac71eee94
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 57772
|
||||
packageName: Epic Toon FX
|
||||
packageVersion: 1.81
|
||||
assetPath: Assets/Epic Toon FX/Upgrade/ETFX URP Upgrade (2020.3.45f1).unitypackage
|
||||
uploadId: 567564
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 697b6e7dea1fde146b7e3e5cf3ed9e9f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 078b8f13a17171b49892ad10426d5af0
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f9406a33814af9c47b352e77f079d798
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9aacf6f3043624194bb6f6fe9a580786
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f4227764308e84f89a765fbf315e2945
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 41e59f562b69648719f2424c438758f3
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b044a2387a61dac41bdf204adffdce9d
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cd287c84e887ea24a8679e67aac7c074
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5f3f53ee059b45a4d9a5b9fc75e8aea9
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f211254f5bfad224ba88868f2c75432c
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4368c9be31b3c174dbfd80f2caf98889
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 617b3f1032a08c14ebfedfa340767cdf
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f597f19f656ba56eae4f6a3a7cc528f4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 48e08dc33330d11e9d4a1b246c52e4f6
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed09910c0094cb27be8f3ca264680da3
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cc355dd4cf1e6173beaeb22c2858cbe1
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -73,8 +73,8 @@ NavMeshProjectSettings:
|
||||
m_Settings:
|
||||
- serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentRadius: 0.4
|
||||
agentHeight: 1.6
|
||||
agentSlope: 45
|
||||
agentClimb: 0.75
|
||||
ledgeDropHeight: 0
|
||||
|
Loading…
Reference in New Issue
Block a user