형들 코드몽키 질문좀 받아줘
NavMesh 가 a* 알고리즘 사용해서 최단경로 찾는 알고리즘인것만 알고만있어
대규모 적들 (대략 200~400마리) 을 NavMesh A* 알고리즘을 이용해서 플레이어를 쫓아다니게 하고싶은데
200마리 정도 굴리니깐 프레임드랍이 미친듯이 일어나는데
현재 Enemy 클래스인 오브젝트 200개를 생성 후 큐에 오브젝트 풀링을 이용해서 활용하고있고
OnEnable() 함수에 UpdatePath()를 코루틴을 돌리고 있어
UpdatePath() 내부 코드는
Physics.OverlapSphere 를 이용해서 Player 태그를 찾고 collider에 저장 후
GetComponent<Player>();로 플레이어 정보를 가져와서 NavMesh를 이용해 쫓아다니게 구현했는데
GetComponent 가 리소스많이 잡아먹는다고 하는데 게임매니저에서 명령을 받게 만들면 더 효율적으로 향상이 가능한지 궁금해..
1. a* 알고리즘의 한계인건지
2. 내가 바보같이 코드를 잘못짜서 리소스를 오지게 잡아먹어서 발생하는 프레임 드랍인지
조언좀 부탁드립니다ㅠㅠ
일단 프로파일러를 돌리자
지금 구조가 좀 비효율적인 부분이 많은것도 사실이긴한데, 왠만큼 심플한 형태 아니면 적 200마리 라는 부분도 너무 많긴 함
답변감사합니다.. 일단 a* 알고리즘 자체가 탐색범위가 넓어질 수록 비효율적이네요 적의 탐색범위를 너무 넓게 잡은것도 프레임드랍의 원인 중 하나였습니다.. FSM 활용해서 탐색안할때는 웨이포인트를 만들던가해서 랜덤이동 시키는 방향으로 수정해야할거같습니다.
A*의 한계여 패스파인딩은 여러가지가 있으니 검색 ㄱㄱ, 니경우에는 다익스트라 같은 flowfield 알고리즘이 어울리겠네
와.. 플로우필드 바로 검색해서 예제 보고 따라하고있습니다. 이거 완전 물건이네요ㅋㅋㅋ ai가 아직 안들어가긴 했지만 실낱같은 희망이 보이는거같습니다 감사합니다