C# Rookiss Part7 MMORPG : TileMap
๐โโ๏ธTileMap
๐ชํ๊ฒฝ์ค์
3D์์ 2D๋ก ๋ฐ๊พธ๊ธฐ
-
Edit -> ProjectSetting -> Editor์์ 3D -> 2D
- ์ฌ ์์ฑ : Ctrl + N (2D์ ํ)
- 2D๋ก ๋ฐ๋ก ๋ง๋ค์ง ์์๊ธฐ ๋๋ฌธ์ Window -> Package Manager์์ 2D Tilemap Editor ์ค์นํด์ผ ๋จ
๐ชTileMap ๊ธฐ์ด
- png๋ฑ ๋ค๋ฅธ ํฌ๋ฉง์ ํ์ผ์ ๊ฐ์ ธ์ค๋ฉด sprite๋ก ๋ฐ๊ฟ์ค์ผ ํจ
sprite Mode
- single : ์คํ๋ผ์ดํธ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ
- multiple : ์คํ๋ผ์ดํธ๋ฅผ ์ชผ๊ฐ์ ์ฌ์ฉ
Pixels Per Unit
- ์ ๋ํฐ ์ฌ ํ๋ฉด ํ์นธ์ ๋ค์ด๊ฐ๋ ํฝ์ ์ ์
- ์ด๋ฏธ์ง๊ฐ 16ํฝ์ ์ธ๋ฐ Pixels Per Unit์ด 32๋ผ๋ฉด 1์นธ์ ๋ค ์ฌ์ฉ ๋ชปํ๊ณ ์ ๊ฒ ์ฌ์ฉํจ
๊ทธ๋ฆฌ๋ ์์ฑ
- Hierarchy ์ฐํด๋ฆญ -> 2D -> Tilemap
ํ์ผํ๋ ํธ
- Window -> 2D -> Tile Palette
- Ractangle : ๊ธฐ๋ณธ 2D ๊ฒ์์ ๋ง๋ค ๋ ํ์ํ ํ๋ ํธ
- Isometric : ๋๊ฐ์ ์ด ํ์ํ 2D ๊ฒ์์ ๋ง๋ค ๋ ํ์ํ ํ๋ ํธ
- Hexagon : 6๊ฐํ ๋ชจ์์ ํ์ผ ๋งต
- Create New Palette๋ฅผ ํ ๋ค Resource-Tiles-Palettes์ ์ ์ฅ
- ๊ฐ์ง๊ณ ์๋ ํ์ผ์ ์ ๋๋๊ทธ ๋๋, Resource-Tiles-Tiles_Map์ ์ ์ฅ
๐ชTileMap Layer
ํ์ผ๋งต์ ๋ค์ํ ๋ ์ด์ด๋ก ๋ง๋๋ ๊ฒ์ด ์ข๋ค
๋ฌด์์ ๋จผ์ ๊ทธ๋ ค์ค๊ฒ์ธ๊ฐ์ ๋ํด์ Order in Layer๋ก ์ค์ ๊ฐ๋ฅํ๋ค (์์ ์์ผ๋ก ๋จผ์ ๊ทธ๋ ค์ง๊ฒ ๋จ)
ํ๋ ํธ ์ค์
Edit์ ๋๋ฅธ๋ค ์ค์ ๊ฐ๋ฅ
ํ๋ ํธ๋ฅผ ์ถ๊ฐํด์ ํ์ผ๋งต์ ๋ฐ๋ผ ๊ตฌ๋ถ์ง์ด์ ์ฌ์ฉํ๋ฉด ์ข๋ค
ํ์ผ์ ํฐ์ ์ ์ด ์๊ธด ๊ฒฝ์ฐ
- ํ์ผ ๋งต ์์ฒด ์คํ๋ผ์ดํธ์ ๋ฌธ์ (๋ฒ์๋ฅผ ์ขํ์ ๋ค์ ์ฌ์ฉ)
- Edit -> Project Setting -> Quality -> Anti Aliasing์ Disabled๋ก ์ค์
์ถฉ๋ ์ ๋ณด๋ ์๋ฒ๋ ํ์ํจ ํ์ผ์ ์ถ์ถ ํ ์ ์์ด์ผ ๋จ
๐ชTileMap Collision
ํ์ผ๋งต ์๋ก ์์ฑ
Grid ์ฐํด๋ฆญ -> 2D Object -> Tilemap
Collision์ ์ํ ํ์ผ๋งต์ ๋ฐ๋ก ๋ง๋ ๋ค ์๋ฒ์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌ ํ ์ ์์
ํ์ผ๋งต ์ฝ๋ผ์ด์ ์ ๋ญ๊ฐ ๊ฑธ๋ฆฐ๊ฒ ์๋์ง ํ์ธ
public Tilemap _tilemap;
public TileBase _tile;
void Update()
{
List<Vector3Int> blocked = new List<Vector3Int>();
foreach (Vector3Int pos in _tilemap.cellBounds.allPositionsWithin)
{
TileBase tile = _tilemap.GetTile(pos);
if (tile != null)
blocked.Add(pos);
}
}
์ด๋ ๊ฒ ํ๊ณ ํ์ผ๋ก ๋ฝ์์ ์๋ฒ๋ก ์ ๋ฌ ํ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ํ๋ค