강의

멘토링

로드맵

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

hkjin97님의 프로필 이미지
hkjin97

작성한 질문수

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

Search AI

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

작성

·

335

0

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

 

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

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

 

퀴즈

타일맵 기반 환경에서 이동 가능한 영역과 불가능한 영역을 분리하여 관리하기 위해 사용된 주된 방법은 무엇일까요?

하나의 타일맵에 모든 정보를 저장하고 태그로 구분한다.

충돌 정보만을 담는 별도의 타일맵 레이어를 사용한다.

모든 타일에 물리적인 Collider 컴포넌트를 추가한다.

카메라의 시야 범위로 이동 가능 영역을 제한한다.

답변 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

작성한 질문수

질문하기