-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
A* 구현 중 Cell2Pos, Pos2Cell의 추가 설명이 필요합니다.
21.12.22 02:29 작성 조회수 199
0
오브젝트의 CellPos와 맵 전체를 스캔한 collision 배열의 Index를 서로 동기화시켜주기 위해서 만든 것으로 이해하고 있는데 이게 맞는지 궁금합니다.
그리고 x값은 cellPos.x - MinX 인데
y값은 왜 MaxY - cellPos.y 로 정의되는지도 잘 모르겠습니다.
답변을 작성해보세요.
0
Rookiss
지식공유자2021.12.22
음~ 괜히 저렇게 만들어서 많은 분들의 혼란을 야기한 것 같네요.
크게 중요한 부분은 아니고 좌표 기준이 달라서 그런데요.
유니티에서는 x, y 좌표가
x는 오른쪽으로 증가, 왼쪽으로 감소이고
y는 위로 증가, 아래로 감소입니다.
그런데 cell을 만들 때 x는 동일하지만 y는 아래로 증가, 위로 감소가 되게 만들었으니
계산법이 저렇게 된 것 뿐입니다.
툴을 만들 때 유니티 축 방향대로 y를 만들면 저런 복잡한 계산이 사라집니다.
나중에 개인 프로젝트 작업할 땐 저도 헷갈려서 고쳐 쓴 기억이 있네요.
hkjin97
질문자2021.12.22
MapEditor를 따라 칠 때 생각없이 따라쳤나봅니다.
찾아서 제가 이해하기 쉽도록 수정했습니다.
텍스트 파일은 당연히 거꾸로 찍히지만 제가 생각한대로 잘 작동하네요..
답변 감사합니다^^
혹시나 비슷한 문제로 고민하고 계신 분들이 있을까 수정 내역 첨부합니다.
// MapEditor.cs
GenerateMap()
수정 전 -> for (int y = tmBase.cellBounds.yMax; y >= tmBase.cellBounds.yMin; y--)
수정 후 -> for (int y = tmBase.cellBounds.yMin; y <= tmBase.cellBounds.yMax; y++)
// MapManager.cs
CanGo()
수정 전 -> int y = MaxY - cellPos.y;
수정 후 -> int y = cellPos.y - MinY;
Cell2Pos()
수정 전 -> return new Pos(MaxY - cell.y, cell.x - MinX);
수정 후 -> return new Pos(cell.y - MinY, cell.x - MinX);
Pos2Cell()
수정 전 -> return new Vector3Int(pos.X + MinX, MaxY - pos.Y, 0);
수정 후 -> return new Vector3Int(pos.X + MinX, pos.Y + MinY, 0);
답변 1