- 개요
특정 지점에 도달하면 몬스터를 스폰하는 시스템을 추가하고
또 플레이어가 쓰러지면 해당 맵에서 재시작하는 기능을 추가한다
- 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 함수에 위의 로직을 추가하여 월드에 배치된 AuraEnemySpawnVolume을 대상으로
필요한 정보를 직렬화하여 현재 FSavedMap의 SavedActors에 추가한다

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로부터 상속받아 맵을 이동할 수 있는 계단 형태의 블루프린트를 생성한다
HighlightActor 이벤트와 UnHilightActor 이벤트를 위와 같이 구성하여 하이라이트 효과를 적용하고 해제한다
3) BP_SpawnPoint 블루프린트

Sprite를 위와 같이 설정한다

스폰하기 위한 몬스터의 정보를 위와 같이 설정한다
4) BP_SpawnVolume 블루프린트

월드에 배치된 BP_SpawnVolume의 인스턴스에서 Spawn Points를 위와 같이 설정한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 게임 맵 - 4) 아이템 드롭 (0) | 2026.01.12 |
|---|---|
| 게임 맵 - 2) 던전 구조물과 입구 추가 (0) | 2026.01.10 |
| 게임 맵 - 1) 커서 동작 수정 (0) | 2026.01.09 |
| 체크 포인트 - 최종) 월드 저장하고 불러오기 (0) | 2026.01.09 |
| 체크 포인트 - 3) GameplayAbility 저장 + 불러오기 (0) | 2026.01.02 |