오늘의 학습 키워드
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
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 33일차 TIL - ScriptableObject (0) | 2023.09.21 |
---|---|
내일배움캠프 32일차 TIL - 캐릭터 UI에 띄우기, 스크롤 뷰 사이즈 자동화 (0) | 2023.09.20 |
내일배움캠프 30일차 TIL - 낮과 밤 구현 해석, 1인칭 회전 (1) | 2023.09.18 |
내일배움캠프 29일차 TIL - Quaternion과 벡터의 곱셈, LayerMask, 연산자 우선순위 (0) | 2023.09.15 |
내일배움캠프 28일차 TIL - Static Batching, Dynamic Batching, Gpu Instancing (0) | 2023.09.14 |