내일배움캠프

내일배움캠프: 타일맵 이미지 동적으로 변경하기

pracumj 2024. 12. 5. 22:43

유니티 공식 문서

 

오늘은 타일 이미지를 동적으로 변환하기 위해 타일 맵에 대해서 공부해봤다.

 

1. 활성화 돼 있는 타일맵 좌표 가져오기

    private List<Vector3Int> GetTilesPosList(Tilemap tileMap)
    {
        var bounds = tileMap.cellBounds;
        var tilesPosList = new List<Vector3Int>();

        for (var x = bounds.xMin; x < bounds.xMax; x++)
        {
            for (var y = bounds.yMin; y < bounds.yMax; y++)
            {
                var cellPos = new Vector3Int(x, y, 0);

                if (tileMap.HasTile(cellPos))
                {
                    tilesPosList.Add(cellPos);
                }
            }
        }

        return tilesPosList;
    }

 

  • cellBounds
     Tilemap이 포함하는 셀들의 경계(최소 및 최대 x, y 값)를 가져 온다.
  • 타일 존재 여부 확인:
    tileMap.HasTile(cellPos)를 사용하여 해당 셀에 타일이 존재하는지 확인합니다.

 

 

2. 스크립트에서 타일의 이미지를 변경 하기

    [SerializeField] private TileBase[] groundBase; //Tile Image를 저장


	//좌표에 있는 타일의 이미지를 TileBase를 통해 변경
    private void TileMapRendererModify(string theme)
    {
        groundObjectPos = GetTilesPosList(groundTileMap);

        foreach (var ground in groundObjectPos)
        {
            groundTileMap.SetTile(ground, groundBase[3]);
        }
    }

 

 

  • TileBase 배열 활용:
    TileBase 배열(groundBase)에 타일 이미지를 보
  • SetTile 사용:
    TileMap.SetTile()를 호출하여 특정 좌표에 다른 타일 이미지를 설정
    예시 코드에서는 groundBase[3]을 사용하여 타일을 설정해줌!