less than 1 minute read

Tracer.cs

private bool IsTargetInSight() {
    var targetPosition = _target.transform.position;
    var playerDir = (new Vector2 (targetPosition.x, targetPosition.z) - new Vector2(transform.position.x, transform.position.z)).normalized;
    var npcDir = new Vector2(this.transform.forward.x, this.transform.forward.z);

    if(Vector2.Dot(npcDir, playerDir)>=Mathf.Cos(searchingAngle*0.5f*Mathf.Deg2Rad)) {
        return true;
    }
    return false;
}
  • _target은 NPC가 볼 대상인 플레이어를 나타내는 변수입니다.
  • _target.transform.position은 플레이어의 위치를 가져옵니다.
  • playerDir은 NPC에서 플레이어를 향하는 방향 벡터입니다. 이 방향은 플레이어의 위치에서 NPC의 위치를 빼고 정규화합니다.
  • npcDir은 NPC의 전방 방향 벡터입니다. 즉, NPC의 정면 방향을 나타냅니다.
  • Vector2.Dot(npcDir, playerDir)은 두 벡터 사이의 내적을 계산합니다. 이 내적 값이 플레이어가 NPC의 정면 시야 내에 있는지를 결정합니다.
  • Mathf.Cos(searchingAngle * 0.5f * Mathf.Deg2Rad)는 시야 각도의 절반에 해당하는 코사인 값을 구합니다. 이 값은 플레이어가 NPC의 시야 내에 있는지를 판단하는 임계값으로 사용됩니다.
  • Vector2.Dot(npcDir, playerDir)이 임계값보다 크거나 같으면 플레이어가 시야 내에 있으므로 true를 반환합니다. 그렇지 않으면 false를 반환합니다.