강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

hkjin97님의 프로필 이미지
hkjin97

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

Search AI

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

작성

·

331

0

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

 

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

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

 

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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

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

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

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

hkjin97님의 프로필 이미지
hkjin97
질문자

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

 

hkjin97님의 프로필 이미지
hkjin97

작성한 질문수

질문하기