📝 24.01.31
Unity 2D 프로젝트를 끝냈다. 입문 주차의 과제 치고 꽤나 큰 볼륨의 프로젝트였다.
🔗 깃허브 링크 : https://github.com/purangi/RogueDodge
팀 프로젝트 이름을 늦게 지어서 Repository의 이름은 RogueDodge지만, 프로젝트 이름은 TimeKeeper이다.
고전 게임인 닷지를 재해석한 로그라이크 2D 게임이다. 매번 랜덤으로 맵이 생성되고, 그 안에서 몬스터 웨이브가 3회 & 보스 몬스터가 나타난다. 그것을 모두 클리어하면 스테이지가 클리어 되어 새로운 맵으로 이동하게 된다.
이를 위해 내가 구현한 방법은 스테이지를 클리어할 때마다 새로운 스테이지를 Instantiate
를 통해 생성하는 방법이다. 상점의 포탈을 타면, 새로운 맵이 랜덤으로 생성되어 해당 맵으로 이동하는 함수를 실행하도록 했다.
MapCreator.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MapCreator : MonoBehaviour
{
//TODO: Check basic map's size and make new map's location vector
[SerializeField] List<GameObject> maps;
int prevMap = 0;
bool isFirst = true;
CameraMovement CameraCS;
public static MapCreator instance;
private void Awake()
{
instance = this;
CameraCS = Camera.main.GetComponent<CameraMovement>();
}
// Start is called before the first frame update
void Start()
{
CreateNewMap();
CameraCS.LimitCameraArea();
}
GameObject CreateNewMap()
{
int rand = Random.Range(0, maps.Count);
if (!isFirst)
{
while(true)
{
rand = Random.Range(0, maps.Count);
if (rand != prevMap) break;
}
}
prevMap = rand;
GameObject newMap = Instantiate(maps[rand]);
GameManager.Instance.curMap = newMap;
GameManager.Instance.Teleport(true);
isFirst = false;
return newMap;
}
public void CreateNextMap()
{
int curX = GetMapSize();
float curPosition = GameManager.Instance.curMap.transform.position.x;
GameObject newMap = CreateNewMap();
int newX = GetMapSize();
newMap.transform.position = new Vector3(curPosition + (curX + newX) / 2 + 5, 0, 0);
CameraCS.LimitCameraArea();
}
int GetMapSize()
{
int mapSize = 0;
switch (prevMap)
{
case 0:
mapSize = 24;
break;
case 1:
mapSize = 32;
break;
case 2:
mapSize = 38;
break;
}
return mapSize;
}
}
처음에 이 방향을 구상한 이유가 미니맵을 구현할 때 새로운 맵이 생성되면서 미니맵에도 해당 모습이 나타나도록 하게 하기 위해서였는데 그냥 미리 맵들을 생성하고 이동함에 따라 미니맵에 보이도록 하는 방향으로 하는 것이 더 좋았을 것이라 생각한다.
이를 구현한 다른 팀이 있어서 더 아쉽게 느껴졌다. 발표 후에 팀원들도 아쉬움을 느껴 해당 방식의 맵을 구현하는 방법을 팀원분이 유튜브 영상에서 찾아주셨다.
이 방향으로 생성했다면 더 게임적으로 재미있었을 것이라 생각한다.
다음에는 이를 숙지하여 맵을 동적 맵 생성을 구현해봐야겠다.