언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

게임 맵 - 3) 몬스터 스포너와 맵 재시작 구현

monstro 2026. 1. 11. 23:45
728x90
반응형

- 개요

특정 지점에 도달하면 몬스터를 스폰하는 시스템을 추가하고

플레이어가 쓰러지면 해당 맵에서 재시작하는 기능을 추가한다

 

- C++ 사이드

1) MVVM_LoadSlot 클래스

 

현재 맵의 애셋 이름을 지정하는 MapAssetName 멤버변수를 추가한다

 

2) MVVM_LoadScreen 클래스

 

NewSlotButtonPressed 함수를 위와 같이 수정하여 게임 데이터를 저장하는 데이터 슬롯의 MapAssetName을 설정한다

 

3) AuraEnemySpawnPoint 클래스

 

스포너에서 소환하는 몬스터의 위치를 지정하기 위한 AuraEnemySpawnPoint 클래스를 생성한다

멤버변수의 구성은 다음과 같다

  • EnemyClass 멤버변수 : 소환하는 몬스터의 클래스
  • EnemyLevel 멤버변수 : 소환하는 몬스터의 레벨
  • CharacterClass 멤버변수 : 소환하는 몬스터의 직업 타입

 

 

SpawnEnemy 함수의 로직은 위와 같다

ActorSpawnParameters를 설정하여 몬스터가 생성될 때의 규칙을 설정한다

SpawnCollisionHandlingOverride를 설정하여 겹치더라도 몬스터를 생성하도록 설정한다

이후 SpawnActorDeffered 함수를 호출하여 스폰되는 몬스터를 설정하고 FinishSpawning 함수를 호출하여 종료한다

이후 SpawnDefaultController 함수를 호출하여 기본적으로 설정된 AI Controller를 할당한다

 

4) AuraEnemySpawnVolume 클래스

 

몬스터를 스폰하는 스포너의 역할을 수행하는 AuraEnemySpawnVolume 클래스를 생성한다

멤버변수의 구성은 다음과 같다

  • bReached 멤버변수 : 스포너에 플레이어가 도달했는지 여부
  • SpawnPoints 멤버변수 : 몬스터를 스폰하는 위치TArray
  • Box 멤버변수 : 몬스터 스포너의 범위

 

 

생성자는 위와 같이 구성하여 BoxComponent를 생성하고 Box 멤버변수에 할당한다

이후 Box 멤버변수를 Root 컴포넌트로 설정하고 Collision을 설정한다

 

 

LoadActor 함수의 로직은 위와 같이 설정하여 한번만이라도 플레이어가 도달했다면 파괴한다

 

 

BeginPlay 함수의 로직은 위와 같이 구성하여 오버랩되면 호출할 콜백함수로 OnBoxOverlap 함수를 바인드한다

 

 

OnBoxOverlap 함수의 로직은 위와 같다

오버랩된 대상이 플레이어인지 확인하고 bReached를 True로 변경한다

이후 SpawnPoints를 순회하면서 몬스터를 스폰하고 Box의 Collision을 비활성화한다

 

5) AuraGameModeBase 클래스

 

 

PlayerDied 함수를 위와 같이 생성한다

로직은 위와 같이 구성하여 SaveGame을 가져와 현재 맵을 다시 시작할 수 있도록 설정한다

 

SaveWorldState 함수

 

SaveWorldState 함수에 위의 로직을 추가하여 월드에 배치된 AuraEnemySpawnVolume을 대상으로

필요한 정보를 직렬화하여 현재 FSavedMapSavedActors에 추가한다

 

LoadWorldState 함수

 

LoadWorldState 함수에 위의 로직을 추가하여 Acrive 저장된 정보를 역직렬화하여

월드에 배치된 AuraEnemySpawnVolume을 대상으로 LoadActor 함수를 호출한다

 

6) Checkpoint 클래스

 

OnSphereOverlap 함수를 위와 같이 수정하여 오버랩된 이후에 일관된 맵의 이름을 가져올 수 있도록 설정한다

 

7) AuraCharacterBase 클래스

 

SetCharacterClass 함수를 추가하여 캐릭터의 직업 타입을 수정할 수 있도록 설정한다

 

 

bDead 멤버변수BlueprintReadOnly 어트리뷰트를 추가한다

 

8) AuraEnemy 클래스

 

SetLevel 함수를 추가하여 몬스터의 레벨을 수정할 수 있도록 설정한다

 

9) AuraCharacter 클래스

 

2개의 멤버변수를 추가한다

  • DeathTime 멤버변수 : 플레이어가 쓰러진 후함수를 호출하기 위한 시간
  • DeathTimer 멤버변수 : 플레이어가 쓰러진 후시간을 측정하기 위한 타이머

 

 

 

CombatInterface로부터 상속받은 Die 함수를 오버라이드한다

부모 버전의 함수 + ServerHandleDeath 함수를 호출한 후에 카메라의 시점을 고정한다

 

 

 

ServerHandleDeath 함수의 로직은 위와 같다

플레이어가 쓰러진 후DeathTime의 시간이 지나고 나서 GameMode의 PlayerDied 함수를 호출한다

 

- 블루프린트 사이드

1) BP_AuraGameMode 블루프린트

 

AuraGameModeBase 클래스와 관련된 설정을 진행한다

 

2) BP_DungeonStair 블루프린트

BP_MapEntrance 로부터 상속

 

 

BP_MapEntrance로부터 상속받아 맵을 이동할 수 있는 계단 형태의 블루프린트를 생성한다

HighlightActor 이벤트와 UnHilightActor 이벤트를 위와 같이 구성하여 하이라이트 효과를 적용하고 해제한다

 

3) BP_SpawnPoint 블루프린트

 

Sprite를 위와 같이 설정한다

 

 

스폰하기 위한 몬스터의 정보를 위와 같이 설정한다

 

4) BP_SpawnVolume 블루프린트

월드의 인스턴스 설정

 

월드에 배치된 BP_SpawnVolume의 인스턴스에서 Spawn Points를 위와 같이 설정한다

 

- 최종 실행 결과

 

728x90
반응형