#23 디펜스 AI 보완 작업 중

+ 공격 애니메이션 수정
+ NavMesh 장애물, 회피 수정
This commit is contained in:
NTG_Lenovo 2023-09-05 16:17:24 +09:00
parent de69533b8d
commit 243fcbd0ef
44 changed files with 546091 additions and 206448 deletions

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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: []

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2
guid: ed9b95dc6ed6d0647ad7f1a8f305385d
DefaultImporter:
guid: 3116e7e540a8c7a459c83af74f1be5e5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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