시야각 안인데 벽 뒤에 있다면

목록으로

청록 관측자가 주황 표적을 발견할 수 있을까요? 장면을 눌러 주 표적을 옮길 수 있습니다. 회색 점 5개도 같은 규칙을 검사합니다.

전체 → 거리 → 각도 → 발견—
주 표적 내적 / 임계값—
이번 광선 질의 수—

청록: 발견 / 맑은 광선주황: 주 표적빨강: 벽에서 중단회색: 단계 탈락

장면을 계산하고 있습니다.

0.0초미발견

내적은 방향만 판정한다

문제 · 같은 방향인데 멀리 있을수록 발견된다

정규화를 생략한 내적에는 거리가 곱해져 있습니다. 반례 버튼은 방향 (3, 4), 거리 5, 시야 90°를 설정합니다. 단위 방향의 내적 0.6은 임계값 약 0.707보다 작지만, 정규화를 끄면 3이 되어 잘못 통과합니다.

원인 · 서로 다른 세 질문

거리 제곱을 한도 제곱과 비교하고, 단위 방향 내적을 cos(전체 시야각 ÷ 2)와 비교한 뒤 남은 후보만 벽에 광선을 보냅니다. 시야각은 중심을 기준으로 하고 신체 표본은 차폐에만 사용합니다. 한 점이 가려져도 세 점 중 하나가 노출되면 발견합니다.

해결 · 질의 의미를 일관되게 사용

벽 전용 질의는 목표까지 벽이 없는지를 봅니다. 벽과 표적을 질의할 때는 가장 가까운 결과가 표적인지 봅니다. 이 모델은 표본 끝점을 표적으로 정의해 두 방식이 같은 결론을 냅니다. 자기 몸은 제외하고 벽 하나만 차폐 대상으로 둡니다.

대가와 경계

표본을 모두 검사하므로 질의 수는 거리·각도 통과 후보 × 표본 수입니다. 동일 위치는 방향 검사 없이 발견하며 광선이 필요 없습니다. 벽 내부 시작은 미검출을 맑은 시야로 오해하지 않도록 발견 불가로 처리합니다. 2D 사각형과 선분 교차 모델이며 엔진의 트리거·레이어·3D 높이를 재현하지 않습니다.

기억 상태는 순간 발견과 별개입니다. 표적이 보인 시점을 저장하고, ‘시간 +0.5초’로 기억 만료를 관찰합니다. 설정을 바꾸는 동안 시뮬레이션 시간은 정지합니다.

공식 근거: Unity Vector3.Dot, Physics.Raycast의 거리·레이어·내부 시작점 제약.