[내배캠] 최종 프로젝트 #17. NavMeshAgent 경로 유효성 체크

Sungchan Ahn(안성찬)·2024년 12월 30일

내일배움캠프

목록 보기
91/104

던전은 룸 여러 개로 구성되어 있는데 한 룸에서 스폰된 몬스터는 다른 룸으로 넘어가지 못하게 NavMesh가 설정되어 있다. 하지만 몬스터가 플레이어를 SetDestination으로 추적하면 가지 못하는 경로이지만 계속 가려고 움직인다.
추적 상태에서 플레이어를 추적할 수 있는 경로인지 확인하고 유효한 경로일 때만 플레이어를 향해 이동할 수 있도록 NavMeshPath, path Status, CalculatePath, SetPath, ResetPath를 활용하여 SetDestination을 대체하였다.

  • CalculatePath(목표, 경로) : 경로를 계산하여 저장, bool 리턴 (true : complete, partial / false : 그 외)
  • enum NavMeshPathStatus: PathComplete - 유효한 경로 / PathPartial - 목표에 도달하지 못함 / PathInvalid - 유효하지 않음
  • SetPath : agent의 경로를 설정
  • ResetPath : agent의 경로 초기화
private void SetChasingPath()
    {
        NavMeshPath path = new NavMeshPath();
        stateMachine.Monster.agent.CalculatePath(stateMachine.Target.transform.position, path);

        if (path.status == NavMeshPathStatus.PathComplete)
        {
            stateMachine.Monster.agent.SetPath(path);
            StopAnimation(HashDataManager.idleParameterHash);
            StartAnimation(HashDataManager.runParameterHash);
        }
        else
        {
            stateMachine.Monster.agent.ResetPath();
            RotateToTarget();
            StopAnimation(HashDataManager.runParameterHash);
            StartAnimation(HashDataManager.idleParameterHash);
        }   
    }
profile
게임 개발 기록

0개의 댓글