본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(88) - Monster Killer(50)

by jyppro 2024. 7. 26.

Monster Killer

 

헌트 모드(Hunt Mode)

저번 글에 이어서 헌트 모드 구현에 대해서 이야기 해보겠습니다. 이번에 살펴 볼 내용은 몬스터 스포너 입니다.

 

몬스터 스포너(Monster Spawner)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MonsterSpawner : MonoBehaviour
{
    public GameObject monsterPrefab; // 소환할 몬스터의 프리팹
    public Transform[] spawnPoints; // 몬스터가 소환될 위치들
    public float spawnInterval = 5f; // 몬스터가 소환되는 주기
    public int numberOfMonsters = 2; // 한 번에 소환할 몬스터의 수
    public int maxMonster = 20; // 최대 소환할 몬스터 수

    private int currentMonsterCount = 0; // 현재 소환된 몬스터 수

    void Start()
    {
        StartCoroutine(SpawnMonsters());
    }

    IEnumerator SpawnMonsters()
    {
        while (true)
        {
            if (currentMonsterCount < maxMonster)
            {
                for (int i = 0; i < numberOfMonsters && currentMonsterCount < maxMonster; i++)
                {
                    Transform spawnPoint = spawnPoints[Random.Range(0, spawnPoints.Length)];
                    Instantiate(monsterPrefab, spawnPoint.position, spawnPoint.rotation);
                    currentMonsterCount++;
                }
            }
            yield return new WaitForSeconds(spawnInterval);
        }
    }
    
    // 몬스터가 죽었을 때 호출되는 메서드
    public void MonsterDied()
    {
        currentMonsterCount--;
    }
}

 

몬스터 스포너 코드입니다. 스포너를 실행시키기 위해서는 두 가지가 선행되어야 합니다.

첫번째는 몬스터 프리팹을 설정하는 것, 두번째는 몬스터가 스폰될 위치를 지정해 주는 것입니다. 저는 몬스터를 소환시킬 위치를 두 곳으로 지정할 생각이기 때문에 배열로 구성하였습니다. 그리고 몬스터가 무한하게 소환되는 것이 아닌 일정 마리수 까지 소환을 진행하고 멈추도록 최대 마리 수를 설정해 주었습니다. 이제 해당 스포너를 실행시켜 보겠습니다.

 

몬스터-소환

 

이전에 보신 것처럼 몬스터가 지정된 위치에 제대로 소환되는 것을 볼 수 있습니다.

 

헌트 모드 꾸미기(디자인)

이제 휑하게 비어있는 헌트 모드를 꾸미도록 하겠습니다. 일단 제가 생각한 것은 몬스터가 필드에 빠르게 소환되고 플레이어는 제약없이 해당 몬스터를 빠르게 잡아나가는 그림을 생각했습니다. 그래서 일단 평지를 구성했는데 좀 더 스테이지 혹은 던전 같은 느낌을 줘야 한다고 생각했습니다.

꾸미기

 

그래서 협곡과 같은 환경을 구성하고, 몬스터가 스폰되는 위치 뒤에 동굴을 배치하여 동굴 속에서 몬스터가 끊임없이 나오는 듯한 느낌을 주어 스테이지를 구성했습니다.

 

1인칭 플레이어 구성

계속 게임을 만들다가 문득 플레이어에 대한 개념이 없이 게임을 만들고 있었다는 것을 깨달았습니다. 그래서 팀원들과 상의를 통해 플레이어를 구성하기로 했습니다. 기존과 달라지는 것은 플레이어의 시점이 약간 변경되고, 플레이어는 이제 자유롭게 움직일 수 있습니다. 이전에는 킬러 모드에 국한되어 몬스터 한 마리에 고정된 채로 양 옆으로 움직이는 방법 밖에 없었습니다.

 

플레이어를 구성하기 위해 뼈대가 되는 CharacterController를 넣어주고, 각종 수치를 조절해 줍니다. 그리고 기존에 무기를 재생성하는 데에만 사용하던 WeaponGenerator 오브젝트를 Player로 변경해줍니다. 마지막으로 PlayerController 스크립트를 작성해 줍니다.

플레이어-컨트롤러

 

가장 기본적인 형태의 움직임만 처리할 것이기 때문에 간단하게 작성해 줍니다. 속도와 중력 수치는 임의로 조정해줍니다.

그리고 해당 플레이어 오브젝트를 프리팹으로 만들어 줍니다. 아마 메인 씬을 제외한 모든 전투 씬에서 사용하게 될 것이기 때문입니다.

플레이어

 

그리고 위 헌트 모드 이미지를 보신 분들은 이미 눈치 채셨겠지만, FPS 느낌의 1인칭 시점을 위해 약간의 카메라 위치와 무기 생성 위치도 변경되었습니다.

플레이어-움직임

 

이제 구성된 플레이어는 W,A,S,D  키로 자유롭게 움직일 수 있으며, 마우스를 통해 시선의 방향을 조절할 수 있습니다.

 

<NEXT>

다음에는 현재 구현한 모드에 대한 관리를 모든 모드에서 사용할 수 있도록 확장시키도록 하겠습니다. 그리고 가능하다면 스테이지에 대한 정보도 관리하게 하여 1스테이지부터 차근차근 도전할 수 있고, 클리어해야 다음 스테이지를 도전할 수 있도록 스테이지 잠금을 구현해 보도록 하겠습니다. 감사합니다.