몬스터가 코어를 제대로 공격하지 못하는 문제 수정
navMesh는 다시 이전으로 되돌림 코어의 중심이 아닌, 코어의 표면을 기준으로 공격하도록 함
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
namespace Northbound
|
||||
{
|
||||
@@ -332,5 +333,44 @@ namespace Northbound
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Navigation
|
||||
|
||||
/// <summary>
|
||||
/// AI가 코어에 접근할 수 있는 NavMesh 위치 반환 (콜라이더 표면 근처)
|
||||
/// </summary>
|
||||
public Vector3 GetNavMeshPosition()
|
||||
{
|
||||
Collider coreCollider = GetComponent<Collider>();
|
||||
if (coreCollider == null)
|
||||
{
|
||||
return transform.position;
|
||||
}
|
||||
|
||||
// 1. 코어 콜라이더 표면에서 남쪽(앞쪽) 방향으로 검색 시작
|
||||
// 적들이 보통 남쪽에서 오기 때문에 전면부 검색
|
||||
Vector3 searchDirection = Vector3.back; // -Z 방향 (남쪽)
|
||||
Vector3 searchCenter = coreCollider.ClosestPoint(transform.position + searchDirection * 5f);
|
||||
|
||||
// 2. 표면 방향으로 attackRange(약 2m)보다 조금 더 큰 거리에서 NavMesh 샘플링
|
||||
NavMeshHit hit;
|
||||
float maxDistance = 3f; // 콜라이더 표면에서 탐색할 거리
|
||||
|
||||
if (NavMesh.SamplePosition(searchCenter, out hit, maxDistance, NavMesh.AllAreas))
|
||||
{
|
||||
return hit.position;
|
||||
}
|
||||
|
||||
// 3. 실패 시 코어 중심에서 더 넓게 탐색 (fallback)
|
||||
if (NavMesh.SamplePosition(transform.position, out hit, 10f, NavMesh.AllAreas))
|
||||
{
|
||||
return hit.position;
|
||||
}
|
||||
|
||||
Debug.LogWarning("[Core] 코어 주변에서 NavMesh를 찾을 수 없습니다.");
|
||||
return transform.position;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user