본문 바로가기

내일 배움 캠프/뭐하지

스테이지 구조 설계

[스테이지 구조 설계]

스테이지별 웨이브 구성 및 몬스터 스폰 데이터를 정적으로 정의

스테이지 → 웨이브 → 몬스터 구성을 계층적으로 관리

 

StageInfo 클래스

    ● 하나의 스테이지에 대한 정보를 저장한다.

        ○ stageKey: 스테이지의 고유 번호

        ○ waves: 해당 스테이지의 웨이브 배열

public class StageInfo 
{
    public int stageKey;
    public WaveData[] waves;
}

 

WaveData 클래스

    ● 하나의 웨이브에 어떤 몬스터들이 나오고 보스가 있는지를 정의한다.

        ○ monsters: 몬스터들의 스폰 정보

        ○ hasBoss: 보스의 유무

        ○ bossType: 등장 보스의 종류 (예시: Orc_Shaman)

public class WaveData
{
    public MonsterSpawnData[] monsters; 
    public bool hasBoss;                
    public string bossType;            
}

 

MonsterSpawnData 클래스

    ● 어떤 몬스터를 몇 마리 소환할지 정의한다.

        ○ monsterType: 몬스터 종류 (예시: Goblin)

        ○ spawnCount: 등장 수

public class MonsterSpawnData
{
    public string monsterType;  
    public int spawnCount;    
}

 

StageData 클래스

    ● StageInfo들을 담는 정적 데이터 저장소

    ● 런타임 중 변경되지 않는 불변 데이터(readonly)로 선언됨

    ● 새로운 스테이지를 하드코딩으로 추가 가능

    ● StageData.Stage[x]를 통해 직접 접근 가능

public static readonly StageInfo[] Stages = new StageInfo[]
{
    //스테이지 0 정보
    new StageInfo(0, new WaveData[]
        {
            //웨이브 1: Goblin 1마리, 보스 없음
            new WaveData(new MonsterSpawnData[]
            {
                new MonsterSpawnData("Goblin", 1),
            }, false, ""),
            //웨이브 2: Goblin 3마리, 보스 없음
            new WaveData(new MonsterSpawnData[]
            {
                new MonsterSpawnData("Goblin", 3),
            }, false, ""),
            //웨이브 3: Goblin 6마리, 보스 있음 (Orc_Shaman)
            new WaveData(new MonsterSpawnData[]
            {
                new MonsterSpawnData("Goblin", 2),
                new MonsterSpawnData("Goblin", 2),
                new MonsterSpawnData("Goblin", 2),
            }, true, "Orc_Shaman")
        }
    ),
    //스테이지 1 정보
    new StageInfo(1, new WaveData[]
        {
            //웨이브 1: Goblin 5마리, 보스 없음
            new WaveData(new MonsterSpawnData[]
            {
                new MonsterSpawnData("Goblin", 5),
            }, false, ""),
            //웨이브 2: Goblin 10마리, 보스 없음
            new WaveData(new MonsterSpawnData[]
            {
                new MonsterSpawnData("Goblin", 10),
            }, false, ""),
            //웨이브 3: Goblin 30마리, 보스 있음 (Orc_Shaman)
            new WaveData(new MonsterSpawnData[]
            {
                new MonsterSpawnData("Goblin", 10),
                new MonsterSpawnData("Goblin", 10),
                new MonsterSpawnData("Goblin", 10),
            }, true, "Orc_Shaman")
        }
    ),
};

 

'내일 배움 캠프 > 뭐하지' 카테고리의 다른 글

오브젝트 풀링  (0) 2025.06.04
게임 데이터 저장과 로드  (0) 2025.06.04
커스텀 에디터  (0) 2025.06.04
Cinemachine  (0) 2025.06.04
렌더링 파이프라인  (10) 2025.06.01