๐Ÿ™‡โ€โ™€๏ธMapManager

๐ŸชMapManager

๋งต๋งค๋‹ˆ์ € ์ถ”๊ฐ€

  • Managers์— ์ถ”๊ฐ€
    MapManager _map = new MapManager();
    public static MapManager Map {get { return Instance._map;}}
    
  • ์ง„์งœ MapManager์— ์ถ”๊ฐ€ ```cs public Grid CurrentGrid{get; private set;}

public void LoadMap(int mapId) { DestroyMap();

string mapName = โ€œMap_โ€ + mapId.ToString(โ€œ000โ€); GameObject go = Managers.Resources.Instantiate($โ€Map/{mapName}โ€); go.name = โ€œMapโ€;

GameObject collision = Util.FindChild(go, โ€œTilemap_Collisionโ€, true); if(collision != null) collision.SetActive(false);

CurrentGrid = go.GetComponent(); }

public void DestroyMap() { GameObject map = GameObject.Find(โ€œMapโ€); if(map != null) { GameObject.Destory(map); CurrentGrid = null; }



`_grid`๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ œ๊ฑฐ, ๊ทธ์— ๋งž๊ฒŒ ๋‹ค๋ฅธ๋ถ€๋ถ„ ๊ต์ฒด(`Mamagers.Map.CurrentGrid`์‚ฌ์šฉ)



๊ฒŒ์ž„ ์”ฌ ๋‚ด์šฉ
๊ฒŒ์ž„์”ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ (๊ธฐ์กด 3๊ฐ•์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ๋‚ด์šฉ)
`Managers.Map.LoadMap(1);`


๋งต์ •๋ณด๋ฅผ ํƒ€์ผ๋งต๋ฒ ์ด์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค๊ธฐ
MapEditor์—์„œ ์„ค์ •
๋งต์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ์ฒดํฌํ•˜๋Š” ๋ถ€๋ถ„์„ ํƒ€์ผ๋งต๋ฒ ์ด์Šค๋กœ ์„ค์ •


**MapManager์—์„œ Collision ๊ด€๋ จ ํŒŒ์ผ์„ LoadMap์— ์ถ”๊ฐ€**
* ํ•„๋“œ๋ถ€๋ถ„
```cs
public int MinX {get; set;}
public int MaxX {get; set;}
public int MinY {get; set;}
public int MaxY {get; set;}
bool[,] _collision;
  • Collision ๊ด€๋ จ ํŒŒ์ผ ``` TxtAsset txt = Managers.Resource.Load($"Map/{mapName}"); StringReader reader = new StringReader(txt.text);

MinX = int.Parse(reader.ReadLine()); MaxX = int.Parse(reader.ReadLine()); MinY = int.Parse(reader.ReadLine()); MaxY = int.Parse(reader.ReadLine());

int xCount = MaxX - MinX + 1; int yCount = MaxY - MinY + 1;

_collision = new bool[yCount, xCount];

for (int y = 0; y < yCount; y++) { string line = reader.ReadLine(); for (int x = 0; x < xCount; x++) { _collision[y,x] = (line[x] == โ€˜1โ€™ ? true : false); } }

public bool CanGo(Vector3Int cellPos) { if(cellPos.x < MinX || cellPos.x > MaxX) return false; if(cellPos.y < MinY || cellPos.y > MaxY) return false; int x = cellPos.x - MinX; int y = MaxY - cellPos.y; return !_collision[y,x]; }



**PlayerController์˜ ์‹ค์ œ๋กœ ์ด๋™ ๋ถ€๋ถ„์„ ์ˆ˜์ •**

void UpdateIsMoving() { if(_isMoving == false && _dir != MoveDir.None) { Vector3Int destPos = _cellPos; switch (_dir) { case MoveDir.Up: destPos += Vector3Int.up; break; case MoveDir.Down: destPos += Vector3Int.down; break; case MoveDir.Left: destPos += Vector3Int.left; break; case MoveDir.Right: destPos += Vector3Int.right; break; }

if(Managers.Map.CanGo(destPos))
{
  _cellPos = destPos;
  _isMoving = true;
}   } } ```

์นด๋ฉ”๋ผ ์ด๋™(PlayerController)

void LateUpdate()
{
  Camera.main.transform.position = new Vector3(transform.position.x, transform.position.y, -10);
}

ํƒœ๊ทธ:

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

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