인프런 커뮤니티 질문&답변
A* 구현 중 Cell2Pos, Pos2Cell의 추가 설명이 필요합니다.
작성
·
335
퀴즈
타일맵 기반 환경에서 이동 가능한 영역과 불가능한 영역을 분리하여 관리하기 위해 사용된 주된 방법은 무엇일까요?
하나의 타일맵에 모든 정보를 저장하고 태그로 구분한다.
충돌 정보만을 담는 별도의 타일맵 레이어를 사용한다.
모든 타일에 물리적인 Collider 컴포넌트를 추가한다.
카메라의 시야 범위로 이동 가능 영역을 제한한다.
답변 1
0
Rookiss
지식공유자
음~ 괜히 저렇게 만들어서 많은 분들의 혼란을 야기한 것 같네요.
크게 중요한 부분은 아니고 좌표 기준이 달라서 그런데요.
유니티에서는 x, y 좌표가
x는 오른쪽으로 증가, 왼쪽으로 감소이고
y는 위로 증가, 아래로 감소입니다.
그런데 cell을 만들 때 x는 동일하지만 y는 아래로 증가, 위로 감소가 되게 만들었으니
계산법이 저렇게 된 것 뿐입니다.
툴을 만들 때 유니티 축 방향대로 y를 만들면 저런 복잡한 계산이 사라집니다.
나중에 개인 프로젝트 작업할 땐 저도 헷갈려서 고쳐 쓴 기억이 있네요.





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);