게임의 완성
Unreal 이론2024. 11. 23. 23:02
[이득우의 언리얼 프로그래밍 Part2 수업의 정리]
게임 모드
- 멀티플레이를 포함해 게임에서 유일하게 존재하는 게임의 심판 오브젝트
- 최상단에서 게임의 진행을 관리하며, 게임 판정에 관련된 중요한 행동을 주관하는데 적합
- 다양한 게임 규칙을 적용할 수 있도록 핵심 기능과 분리해 설계하는것이 바람직
- 게임의 상태와 플레이어의 상태를 별도로 저장할 수 있는 프레임웍 제공
- 지금의 프로젝트는 싱글 게임이기 때문에 GameState와 PlayerState는 사용하지 않음
구현을 위해 GameMode 클래스에 코드 작성
- 현재 진행되고 있는 게임의 점수와 게임 클리어를 위한 점수 두가지 설정
- CurrentScore 같은 경우는 개별 플레이어의 점수이므로, 게임의 규모가 커진다면 PlayerState에 보관하는것이 좋다
- StageGimmick 클래스의 OnOpponentDestroyed 함수가 적을 처치했을 때 호출되므로, 여기서 점수를 추가하도록 구성하는게 좋다
- 클리어했을 땐 보상상자가 나오는 로직 대신 return시켜 게임이 그대로 끝나도록 구성
- 플레이어가 죽는 경우엔 ABCharacterPlayer 클래스의 SetDead 함수에 로직 작성
- 이렇게 중요한 정보를 GameMode를 호출해 전달하면 GameMode 클래스에선 사용자가 어떠한 액션을 취하도록 유도
- 가장 적합한 방법은 UI를 띄워주는것. 하지만 GameMode는 UI 컨트롤에 적합하지 않으므로 UI를 띄워달라고 별도로 명령을 내린다
- PlayerController에 GameScoreChanged, GameClear, GameOver 세 함수를 선언하고 GameMode에 불러온다.
void AABGameMode::OnPlayerScoreChanged(int32 NewPlayerScore)
{
CurrentScore = NewPlayerScore;
AABPlayerController* ABPlayerController = Cast<AABPlayerController>(GetWorld()->GetFirstPlayerController());
if (ABPlayerController) {
ABPlayerController->GameScoreChanged(CurrentScore);
}
if (CurrentScore >= ClearScore) {
bIsCleared = true;
if (ABPlayerController) {
ABPlayerController->GameClear();
}
}
}
void AABGameMode::OnPlayerDead()
{
AABPlayerController* ABPlayerController = Cast<AABPlayerController>(GetWorld()->GetFirstPlayerController());
if (ABPlayerController) {
ABPlayerController->GameOver();
}
}
- 이후 같은 기능을 하는 K2_OnGameState 함수들을 선언해주고 블루프린트에서 구현
게임의 저장 기능
- 언리얼의 SaveGame 클래스를 상속받아 ABGameSave 클래스를 Player 폴더에 생성
- RetryCount라는 간단한 변수 추가 후 PlayerController에 SaveGame 객체 가져옴
- 게임이 시작되면 저장된 세이브 데이터가 있는지 확인 후 이것을 로딩하는 코드 작성
- UGameplayStatics에서 제공하는 LoadGameFromSlot(TEXT("Player0"), 0) 함수 활용해 저장
- Player0 -> 세이브 파일명, 0-> 플레이어 아이디. 싱글플레이의 경우 항상 0번 지정
게임 패키징
- 에디터 상단 툴바의 Platforms->Windows->Shipping(디버깅에 관련된 모든 부분 제외된 가장 가벼운 선택지)
- Project Setting->Package->Additional builds for this Project 아래의 advanced 항목-> Additional Asset Directories to Cook : 우리가 사용한 에셋들을 플랫폼에 맞춰서 변환하는 작업
- 기본적으로 추가된 항목 외에도 아이템 등 코드에서 불러들이는 에셋들을 수동으로 추가해줘야함
'Unreal 이론' 카테고리의 다른 글
Online Subsystem (0) | 2024.11.25 |
---|---|
Multiplayer Games Network model (0) | 2024.11.24 |
게임 플로우 다듬기 (1) | 2024.11.21 |
헤드업디스플레이의 구현 (0) | 2024.11.14 |
인공지능 - 행동트리 모델의 구현 (0) | 2024.11.11 |
댓글()