private void Update()
{
openList = new List();
closeList = new List();
finalNode = new List();
var startNode_ = tileManager.GetNodeByPoint(transform.position);
startNode_.color = Color.red;
endNode = tileManager.GetNodeByPoint(_endNode.position);
endNode.color = Color.blue;
AddToOpenList(startNode_);
while (openList.Count > 0)
{
currentNode = openList[0];
int count_ = openList.Count;
for (int i = 1; i {
var listItem_ = openList[i];
listItem_.color = Color.magenta;
if (listItem_.f <= currentNode.f
&& listItem_._h {
currentNode = listItem_;
}
}
RemoveFromOpenList(currentNode);
AddToCloseList(currentNode);
if (currentNode == endNode) // 마지막이면 지금까지 찾은 것들을 넣는다.
{
GetFinalPath()
}
CheckNeighborNode();
}
}
대충 유툽에서 보고 여기 저기서 긁어 모아다 하나 만들어 봤는데
이거 - _ - 겜에서 어떻게 돌리냐;;
내 빡대갈로는 매 Update마다 List할당한거 가비지로 3세트씩 쌓이는거 아님??
좀 고오급 적으로 최적화 해 놓은 강좌 같은거 없어요?
계속 전부다 찾지말고, 처음에 노드생성만 하는거 하나.
그리고 따로 쓰레드나 코루틴이나 머나로 현재 경로 업데이트 하는거 넣어주면 되지 않을까
아 패스 생성해 놓고 장애물 같은거에 길막 당하는 이벤트 같은거 있을 때만 쓰레드로요? 오호?
A star는 어떻게 최적화 해도 답이 나오는 분야가 아님. 결국에는 스레드랑 잡 이빠이 땡겨서 쓸 수 밖에 없음 (CPU 의존적) 이걸 최적화 하려고 JPS니 쿼드트리니 온갖 게 나오지만 언발에 오줌누기임. 유닛수가 적고 맵이 스태틱하면 flowField 추천.
키워드 ㄳㄳ
이걸 업데이트에 돌린다고?
아 쓰레드.. 근데 유니티는 어차피 쓰레드도 게임 루틴이랑 같이 도는 녀석이라서 크게 효과 못보는거 아닌가여? 아오..
https://assetstore.unity.com/packages/tools/ai/a-pathfinding-project-pro-87744
길찾기는 매번 돌리기 무거워서 고정맵이면 노드 수를 줄이던가 호출 횟수를 줄이는게 좋음
지하철 처럼 주요 지점들은 미리 길찾기를 해서 저장해놓고 가까운 지점에서 원하는 위치까지만 실시간으로 길찾기를 해.
길찾기가 게임기획상으로 한프레임안에 다 이루어질 필요가 없다면 코루틴으로 중간마다 조금 짤라서 시간분할 노려보는것도..?
A*는 실시간으로 돌리는거 아님, A*는 사실상 꼼수를 누가 더 잘부리느냐가 최적화의 핵심