게임의 완성

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

댓글()