오늘의 학습 키워드

NavMesh.SamplePosition

 

공부한 내용

NavMesh.SamplePosition

NavMesh.SamplePosition(Vector3 sourcePosition, out NavMeshHit hit, float maxDistance, int areaMask)

첫 번째 인자는 기준 위치,

두 번째 인자는 결과 위치의 정보를 담는 NavMeshHit,

세 번째 인자는 검출할 최대 거리

네 번째 인자는 NavMesh 영역의 마스크이다.

이 메서드가 하는 일은 기준 위치에서 maxDistance만큼 areaMask만 검출해서 hit으로 정보를 받아오고 hit이 존재한다면 true를 반환한다.

아래의 코드에서 왜 30번이나 while문을 돌아야 하는지 이해가 되지 않았었다.

이후에 궁금해서 공식 문서를 찾아보았고 이유를 찾게 되었다.

충돌 영역을 체크하는 것은 보편적으로 비용이 많이 들기 때문작은 영역을 여러 번 체크하는 것이 좋다고 나와있었다.

하지만 30번을 왜 돌아야 하는지는 아직도 의문이 있었는데 이해가 되지 않아서 튜터님께 질문을 드렸다.

그 이유는 계속 찾지 못하는 경우라면 while문을 빠져 나오지 못해 무한루프 상태에 돌입돼서 임의의 값을 지정해 주는 것이라고 하였다.

int i = 0;
while (GetDestinationAngle(hit.position) > 90f || playerdistance < safeDistance)
{
    NavMesh.SamplePosition(
    transform.position + UnityEngine.Random.onUnitSphere * safeDistance,
    out hit,
    maxWanderDistance,
    NavMesh.AllAreas);
    i++;
    if (i == 30)
        break;
}

return hit.position;

 

 

오늘의 회고

 오늘까지 개인 과제 수행 전에 공부를 마치고 내일부터 개인 과제를 진행할 생각이다. 내가 생각한 것보다 약간 늦어졌지만 더 시간을 보태서 개인 과제를 마무리 할 수 있도록 노력해야겠다. UI 쪽 집중 구현과 C#으로 개발하던 TextRPG를 유니티로 만들어 보는 과제인데 TextRPG가 더 재밌을 것 같아서 아마 그쪽으로 진행하지 않을까 싶다.

 오늘은 코드카타를 진행하면서 한 문제에서 오래 걸려서 많이 풀지 못했는데 내일은 더 많이 풀어봐야겠다. 내일도 파이팅!

 

 

참고 : 

https://docs.unity3d.com/kr/530/ScriptReference/NavMesh.SamplePosition.html

 

NavMesh-SamplePosition - Unity 스크립팅 API

Finds the closest point on NavMesh within specified range.

docs.unity3d.com

 

+ Recent posts