[TIL] 타일맵 구현하기(2)
![[TIL] 타일맵 구현하기(2)](/_next/image?url=https%3A%2F%2Fdata.develog.develrocket.com%2Fupload%2Fdevelog%2Fuser_1777093328305%2F1777550829593-dw72aa%2F_____2026-04-30_210528.png&w=3840&q=75)
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
이전 타일맵 구현하기(1)을 이어서 작성하겠습니다

우선 autoTile sprite와 마찬가지로 미방문 지역에 해당하는 안개타일 sprite가 존재
-> 4bit로 표현
Tile에서 안개처리하는 코드를 작성하였으니 참고
Map.cs의 Init함수 안에 아래 코드를 추가하여 FowTile도 초기화한다
for (int i = 0; i < tiles.Length; i++)
{
tiles[i].UpdateAutoTileId();
tiles[i].UpdateAutoFowTileId();
}
Stage.cs에 수정된 함수들
public void DecorateTile(int tileId)
{
var tile = map.tiles[tileId]; // 데이터
var tileGo = tileObjs[tileId]; // 게임 오브젝트
var ren = tileGo.GetComponent<SpriteRenderer>();
if (tile.isVisited)
{
if (tile.autoTileId != (int)TileTypes.Empty)
{
ren.sprite = islandSprites[tile.autoTileId];
}
else
{
ren.sprite = null;
}
}
else
{
ren.sprite = isFowSprites[tile.autoFowTileId];
}
tile.UpdateAutoFowTileId();
}
public void OnTileVisited(int tileId)
{
OnTileVisited(map.tiles[tileId]);
}
public void OnTileVisited(Tile tile)
{
int centerX = tile.id % mapWidth;
int centerY = tile.id / mapWidth;
for (int i = -visitRadius; i <= visitRadius; i++)
{
for (int j = -visitRadius; j <= visitRadius; j++)
{
int x = centerX + j;
int y = centerY + i;
if (x < 0 || x >= mapWidth || y < 0 || y >= mapHeight)
continue;
int id = y * mapWidth + x;
map.tiles[id].isVisited = true;
DecorateTile(id);
}
}
var radius = visitRadius + 1;
for (int i = -radius; i <= radius; i++)
{
for (int j = -radius; j <= radius; j++)
{
if (i == radius || i == -radius || j == radius || j == -radius)
{
int x = centerX + j;
int y = centerY + i;
if (x < 0 || x >= mapWidth || y < 0 || y >= mapHeight)
continue;
int id = y * mapWidth + x;
// 여기 수정
map.tiles[id].UpdateAutoFowTileId();
DecorateTile(id);
}
}
}
}
PlayerMovement.cs에 아래 코드 추가
public void MoveTo(int tileId)
{
if (coMove != null)
{
StopCoroutine(coMove);
coMove = null;
}
coMove = StartCoroutine(MoveCoroutine(tileId)); // Lerp 이동 시작
}
private IEnumerator MoveCoroutine(int tileId)
{
isMoving = true;
animator.speed = 2f;
Vector3 startPos = transform.position;
Vector3 endPos = stage.GetTilePos(tileId);
float elapsed = 0f;
float duration = 1f / moveSpeed;
while (elapsed < duration)
{
elapsed += Time.deltaTime;
transform.position = Vector3.Lerp(startPos, endPos, elapsed / duration);
yield return null;
}
transform.position = endPos; // 정확한 위치로 보정
currentTileId = tileId;
isMoving = false;
coMove = null;
animator.speed = 0f;
stage.OnTileVisited(tileId);
}

플레이어 반경을 2로 설정하여 플레이어 기준 상하좌우 +2칸씩 맵이 보이게 된다

아래로 한칸 움직이면 숨겨졌던 타일들이 나오게 된다
![[TIL] 타일 맵 구현하기(1)](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1777380586472-dre57h/_____2026-04-28_212238.png)
유니티 타일맵 구현하기
![[Unity] #if, #endif](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786778972982-xrtzbj/_____2026-08-15_162920.png)
if, endif

일단 MMD가 무엇인가? MikuMukuDance라는 2008년도에 만들어진 C++기반 프로그램으로 캐릭터 모델링을 애니메이션에 적용해 모델을 춤추게 하는 프로그램이라고 보시면 됩니다 이름에서부터 당연히 하츠네미쿠 모델링을 기반으로 춤추게 하려는 게 목적입니다 예시영상 해당 영상을 만드신분은 이 후 넥슨에 취업하셨다고 합니다 요즘으로 따지자면 유니티로 캐릭
![[TIL] 타일 맵 구현하기(1)](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1777380586472-dre57h/_____2026-04-28_212238.png)
![[Unity] #if, #endif](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786778972982-xrtzbj/_____2026-08-15_162920.png)

일단 MMD가 무엇인가? MikuMukuDance라는 2008년도에 만들어진 C++기반 프로그램으로 캐릭터 모델링을 애니메이션에 적용해 모델을 춤추게 하는 프로그램이라고 보시면 됩니다 이름에서부터 당연히 하츠네미쿠 모델링을 기반으로 춤추게 하려는 게 목적입니다 예시영상 해당 영상을 만드신분은 이 후 넥슨에 취업하셨다고 합니다 요즘으로 따지자면 유니티로 캐릭