728x90
player의 이동 영역을 지정하고 싶은데 방법을 알지 못해서 강의에서 알려준 그대로 복습해봤다.
새로운 타일맵을 생성한다. 이름은 collision 비슷한 느낌이 나게 만들어주면 된다.
사용하지 않는 sprite로 player가 갈 수 없는 공간을 쭉 둘러준다.
collision에 새로운 script인 "Collision" 파일을 생성하고 컴포넌트로 추가해준다.
public class Collision : MonoBehaviour
{
public Tilemap _tilemap;
void Start()
{
}
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);
}
}
}
Collision 파일 안에는 이러한 코드를 작성해준다.
원하는 곳에 MapEditor script를 생성해준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
using System.IO;
#if UNITY_EDITOR // 개발 단계에서만 해당 코드를 사용하게 해줌
using UnityEditor;
#endif
public class MapEditor : MonoBehaviour
{
#if UNITY_EDITOR
[MenuItem("Tools/GenerateMap")] // 유니티 툴 상단 메뉴를 원하는 데로 만들 수 있다
private static void GenerateMap()
{
GameObject go = GameObject.Find("Map"); // 위에서는 Grid라고 되어있는 하이라키 상의 타일맵 이름을 Map으로 변경했다
if (go == null)
return;
Tilemap tm = GameObject.Find("Tilemap_Collision").GetComponent<Tilemap>();
if (tm == null)
return;
List<Vector3Int> blocked = new List<Vector3Int>();
foreach (Vector3Int pos in tm.cellBounds.allPositionsWithin)
{
TileBase tile = tm.GetTile(pos);
if (tile != null)
blocked.Add(pos);
}
using (var writer = File.CreateText("Assets/Resources/Map/output.txt")) // 파일이 생겼으면 좋겠는 장소를 작성한다
{
writer.WriteLine(tm.cellBounds.xMin);
writer.WriteLine(tm.cellBounds.xMax);
writer.WriteLine(tm.cellBounds.yMin);
writer.WriteLine(tm.cellBounds.yMax);
for (int y = tm.cellBounds.yMax; y >= tm.cellBounds.yMin; y--)
{
for (int x = tm.cellBounds.xMin; x<=tm.cellBounds.xMax; x++)
{
TileBase tile = tm.GetTile(new Vector3Int(x, y, 0));
if (tile != null)
writer.Write("1");
else
writer.Write("0");
}
writer.WriteLine();
}
}
}
#endif
}
하나하나 보면 어려울 거 없는 코드다. collision 타일을 foreach로 돌면서 무언가 있나 없나를 살펴보고 있으면 1을, 없으면 0을 출력하는 내용이다.
우리가 새로 만든 상단 메뉴인 GenerateMap을 클릭하면
이렇게 원하는 장소에 원하는 파일이 생성된 것을 볼 수 있다. 이 메모장 내용을 이용해서 player의 이동을 관리할 수 있다.
728x90
'공부 > Unity' 카테고리의 다른 글
[Unity] GetKey / GetKeyDown / GetKeyUp (0) | 2022.08.16 |
---|---|
[Unity] Tile로 만든 맵, 선이 생겨서 마음에 들지 않을 때 (0) | 2022.08.15 |
[Unity] 게임 실행 작은 화면으로 하기 (0) | 2022.07.29 |
[Unity] 몬스터가 죽을 때 나오는 효과는 어떻게 만들어야 할까 (0) | 2022.07.28 |
[Unity] player의 움직임 제어시 Time.deltaTime을 곱하는 이유 (0) | 2022.07.25 |