몬스터가 코어를 제대로 공격하지 못하는 문제 수정

navMesh는 다시 이전으로 되돌림
코어의 중심이 아닌, 코어의 표면을 기준으로 공격하도록 함
This commit is contained in:
2026-02-19 17:04:46 +09:00
parent 72c2ec2884
commit 4beb2fb0bb
5 changed files with 124 additions and 39 deletions

View File

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