FleeMonsterController
: 공격을 받으면 플레이어를 등지고 일정 각도 범위 내의 가장 먼 곳으로 도망을 친 후 제자리로 돌아가 투명화되는 몬스터
+ TryGetValidNavMeshPosition : 유효한 NavMesh 위치인지 확인
+ IsValidFleeAngle : 플레이어를 등지는 특정 각도 범위 확인
+ IsValidPathLength : 최대로 움직일 수 있는 이동 경로의 길이 내에 있는지 확인
const int angleStep = 10; Vector3 bestDestination = transform.position; float maxDistanceFromPlayer = 0f; for (float angle = -100; angle <= 100; angle += angleStep) { Vector3 fleeDirection = Quaternion.Euler(0, angle, 0) * -transform.forward; Vector3 potentialDestination = transform.position + fleeDirection * maxDistance; if (!TryGetValidNavMeshPosition(potentialDestination, out Vector3 navMeshPosition)) continue; if (!IsValidFleeAngle(navMeshPosition)) continue; if (!IsValidPathLength(navMeshPosition, out float pathLength)) continue; // 플레이어로부터 가장 먼 위치 계산 float distanceFromPlayer = Vector3.Distance(navMeshPosition, targetTransform.position); if (distanceFromPlayer > maxDistanceFromPlayer) { maxDistanceFromPlayer = distanceFromPlayer; bestDestination = navMeshPosition; } } if (bestDestination == transform.position) { bestDestination = monsterSpawnPoint; } return bestDestination;