• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

A* 구현 중 Cell2Pos, Pos2Cell의 추가 설명이 필요합니다.

21.12.22 02:29 작성 조회수 199

0

오브젝트의 CellPos와 맵 전체를 스캔한 collision 배열의 Index를  서로 동기화시켜주기 위해서 만든 것으로 이해하고 있는데 이게 맞는지 궁금합니다.

 

그리고 x값은 cellPos.x - MinX 인데

y값은 왜  MaxY - cellPos.y 로 정의되는지도 잘 모르겠습니다.

 

답변 1

답변을 작성해보세요.

0

음~ 괜히 저렇게 만들어서 많은 분들의 혼란을 야기한 것 같네요.

크게 중요한 부분은 아니고 좌표 기준이 달라서 그런데요.
유니티에서는 x, y 좌표가
x는 오른쪽으로 증가, 왼쪽으로 감소이고
y는  위로 증가, 아래로 감소입니다.

그런데 cell을 만들 때 x는 동일하지만 y는 아래로 증가, 위로 감소가 되게 만들었으니
계산법이 저렇게 된 것 뿐입니다.
툴을 만들 때 유니티 축 방향대로 y를 만들면 저런 복잡한 계산이 사라집니다.

나중에 개인 프로젝트 작업할 땐 저도 헷갈려서 고쳐 쓴 기억이 있네요.

hkjin97님의 프로필

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