๐Ÿ™‡โ€โ™€๏ธ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

ํƒ€์ผํŒ”๋ ˆํŠธ

  1. Window -> 2D -> Tile Palette
    • Ractangle : ๊ธฐ๋ณธ 2D ๊ฒŒ์ž„์„ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ํŒ”๋ ˆํŠธ
    • Isometric : ๋Œ€๊ฐ์„ ์ด ํ•„์š”ํ•œ 2D ๊ฒŒ์ž„์„ ๋งŒ๋“ค ๋–„ ํ•„์š”ํ•œ ํŒ”๋ ˆํŠธ
    • Hexagon : 6๊ฐํ˜• ๋ชจ์–‘์˜ ํƒ€์ผ ๋งต
  2. Create New Palette๋ฅผ ํ•œ ๋’ค Resource-Tiles-Palettes์— ์ €์žฅ
  3. ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํƒ€์ผ์…‹์„ ๋“œ๋ž˜๊ทธ ๋“œ๋ž, Resource-Tiles-Tiles_Map์— ์ €์žฅ

๐ŸชTileMap Layer

ํƒ€์ผ๋งต์„ ๋‹ค์–‘ํ•œ ๋ ˆ์ด์–ด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

๋ฌด์—‡์„ ๋จผ์ € ๊ทธ๋ ค์ค„๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•ด์„œ Order in Layer๋กœ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค (์ž‘์€ ์ˆœ์œผ๋กœ ๋จผ์ € ๊ทธ๋ ค์ง€๊ฒŒ ๋จ)

ํŒ”๋ ˆํŠธ ์„ค์ •

Edit์„ ๋ˆ„๋ฅธ๋’ค ์„ค์ • ๊ฐ€๋Šฅ

ํŒ”๋ ˆํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ํƒ€์ผ๋งต์— ๋”ฐ๋ผ ๊ตฌ๋ถ„์ง€์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค

ํƒ€์ผ์— ํฐ์ƒ‰ ์„ ์ด ์ƒ๊ธด ๊ฒฝ์šฐ

  1. ํƒ€์ผ ๋งต ์ž์ฒด ์Šคํ”„๋ผ์ดํŠธ์˜ ๋ฌธ์ œ (๋ฒ”์œ„๋ฅผ ์ขํ˜€์„œ ๋‹ค์‹œ ์‚ฌ์šฉ)
  2. 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);
}
}

์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ํŒŒ์ผ๋กœ ๋ฝ‘์•„์„œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ ํ•  ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: