처음엔 A*써보려고 했는데 수십 수백개 돌리면 사양에 무리가 간다고 하더라고 그래서 임시로
나오는 루트에 따라 넘버를 입혀서 루트를 바꾸는 박스 콜라이더에 닿을 때 마다 루트를 바꾸는 형식으로
만들어 봤는데 처음엔 좀 잘 돌아가나 했더니
저렇게 빨간 점에 칠한 것 처럼 적 유닛과 만나서 싸우다가 길을 잃고 벽에 비비는
애들이 생기더라고 A* 써서 유닛이 길 찾게만 하는 건 사양에 큰 무리 없는 거지??
A*업데이트 주기는 2~3초로 하면 적당하려나??
1초 ㄱㄱ
아래 댓글 보니까 딱 1번 불러오고 전투 끝나고 다시 1번 불러오고 이 방식이면 될듯
해당 댓글은 삭제되었습니다.
아 그럼 최적화 루트 딱 1번만 세기고 전투를 진행한 다음에 전투가 끝나면 다시 길찾기 1번 와 그럼 깔끔하겠네 어차피 정해진 루트니까
근처 장애물 없이 라인 따라갈 때, 공격 상태일 때는 길찾기 안 할텐데도 버벅임??
원거리는 상관없는데 근접유닛이 문제 적 원거리 유닛 쫒아가서 싸우다가 전투 끝나면 벽에 비빔 ㅠ
음? 그 수정한 거 말고 100마리 다 그냥 쌩으로 돌려보셈 유니티 네브메쉬여도 80마리 길찾기 돌리는데 300프레임 나왔었슴. 경사도 없고 평지에 장애물도 마땅히 안 보이는데 굳이 최적화 안 해도 되지 싶은
@211214 ㅇㅋ 일단 백업해두고 함 적용해봄
유저 행동 이후, 적의 경로 계산이 필요한 시점에 콜백함수로 A* 쓰면 되겠는데
혹시 A*는 경유지 지정 같은 건 안 되는거지? A지점에 이른 다음에 B지점으로 이동한다 이건 다시 계산해야하나?
A* 두번 돌려
@ㅇㅇ 걍 해당 위치로 이동시킨다음에 주변 일정 범위에 장애물 요소를 만났을 때만 길찾기 키면 되지 않나
@Ray. 경로 거리에 따라 걸리는 시간이 달라지는 알고리즘이라 같은거리면 나눠서 2번 돌리나 길게 1번 돌리나 그게 그거임
@Ray. ㅇㅋ
굳이 길찾기를 해야함? 경로자체가 몇개없고 고정이면 고정된 경로 리스트놓고 원하는 경우에따라 선택하게하면 수천개 돌려도 무리없을텐데. 개체마다 경로선택->경로진행도->중간에 이벤트발생시 경로진행 정지하고 이벤트->이벤트끝나면 경로진행도 이어서 진행->경로 진행도1 또는 100되면 종료. 그럼 길찾기 자체를 수행할 필요도 없어서 계산할게 없어짐
근접유닛이 있다 보니까 적을 추적해서 싸우다 보면 가끔 아예 루트를 벗어남 그러면 길찾기가 없으니까 그냥 목표지점까지 일직선으로 가려고 벽에 비비더라고...
네 얘기랑 댓글들 보니깐 길찾기문제보다는 전투 후에 어떤길로 가야하는지에 대한 문제 같은데? 전투후에 바로 목적지로 전진해야하는건지, 원래의 경로로 돌아가고 전진을 해야하는건지, 그 행동을 정해주지않아서 전진하려다가 못가는 상황인듯. 예를들어 전진하려는데 막혀있으면 되돌아가기를 만든다든가, 그 부분 처리가 없으니깐 계속 앞으로만 가려고하는데 장애물있으면 비벼지지
@만들어보기 아 원래의 경로로 돌아가서 다시 진행해야하는 게 맞는듯 유닛을 소환할때 경로를 지정하고 소환하는거거든 상부 중앙 하부 이런식으로
길이 막혀있지 않고 직선상에 도착지점이 있다면 a*로도 수백개 돌려도 됨 다익스트라면 훨신 좋겠지만
A*가 다익스트라보다 성능 우월하지 않냐...
찾아보니까 다익스트라는 지정된 곳까지 이동경로 찾으려고 모든 맵을 탐색하고 A*는 딱 지정된 루트까지 최적화 해서 찾는 느낌이라 하네
다익스트라가 아니라 jps였나? 직선직선으로 길찾는방식 있었는디? 좀 오래되서 까먹음
@Indie2(58.75) 문제 해결 확률을 감안하고 성능 높이는 형태 좀 있긴 있을거임
HPA 처럼 큰 그림으로 길 찾은 다음 저장한 다음, 소규모로 어보이던스를 쓰던 패스파인딩하면 연산 크게 줄일 수 있겠네
공격로 미니언 구현방법[0] : 미니언이 A*없이 기본 경로를 선형적으로 따라가게 만들고 경로를 크게 이탈했는지 체크해서 A*로 기본 경로에 돌아가게 만들기(경로이탈 체크가 A*보다 더 연산비용이 낮아야 의미가 있음) 공격로 미니언 구현방법[1] : 미니언이 처음부터 끝까지 A* 사용하게 하기 둘 중 원하는 방법으로 구현하면 좋을 것 같아. 미니언들이 똑똑해보이는 것이 중요하다면 개인적으로는 [1]을 추천해. [1]이 LOL 애니비아 벽 트런들 벽처럼 동적으로 생성되는 벽에도 잘 대처할 수 있으니까. 힘내 :D !
2번째 댓글 보니까 처음엔 그냥 루트로 일직선으로 이동하게 하고 적이랑 싸우면 전투가 끝나서 적이 사라진 후에 A* 딱 1번 실행해서 최적의 루트 찾으면 될 거 같음 그럼 전투 당 연산 1번이라 크게 부담 안 갈 거 같음
처음엔 업데이트로 돌릴 생각이라 부담됐던건데 저 댓글 보니까 진짜 현명한 방법이 많네
걍 저 정도면 왼쪽에 벽이 있냐 이걸로 해도 되지 않나?
청크 단위로 나누고 거기까지 a*쓰고 적까지 레이케스트로 벽 있는지 확인 있으면 다사 a*
https://factorio.com/blog/post/fff-317
플로우필드도 고려해보셈