[UE5] 이득우 Part 2. 15강 게임의 완성

공부 스파이럴·2024년 2월 1일
0

게임모드

  • 멀티플레이를 포함해 게임에서 유일하게 존재하는 게임의 심판 오브젝트
  • 최상단에서 게임의 진행을 관리하며, 게임 판정에 관련된 중요한 행동을 주관하는데 적합함
  • 다양한 게임 규칙을 적용할 수 있도록 핵심 기능과 분리해 설계하는 것이 바람직함
  • 게임의 상태와 플레이어의 상태를 별도로 저장할 수 있는 프레임워크를 제공함

  • 최상단 게임 레이어 : GameMode, GameState, PlayerState
  • 게임 레이어 : Character, Gimmick
  • 미들웨어 레이어

-> 간단하게 만드는 거라 GameState, PlayerState는 다루지 않음

실습

  • 게임모드 클래스
    • 클리어 스코어, 현재 스코어, 클리어bool 변수

  • 스테이지
    • 적 처치 시 점수 획득, 클리어 점수면 클리어
    • 게임모드가 상위이므로 직접 참조하는 것이 껄끄러울 수 있어서 인터페이스로 캐스팅

  • 플레이어가 죽었을 때도 구현
    • 플레이어의 set dead 함수에서 게임모드 인터페이스의 플레이어 dead 함수 호출

  • 플레이어 컨트롤러에서의 함수가 호출될 때 관련 UI를 띄워주는 작업이 진행이 되어야하는데 모두 C++ 코드로 하는 것은 생산성이 좋지 않음
    • 블루프린트로 진행
  • 블루프린트 함수 앞에 K2_ 라는 접두사를 붙이는데 블루프린트 전신인 Kismet을 뜻함
    • 약간의 관습
    • 같은 역할의 함수지만 이름이 달라야해서기도 함
  • 블루프린트에서 이벤트를 발동시키는 기능을 수행하기 위해서는 UFUNCTION 에 BlueprintImplementableEvent 라는 지정자를 추가
    • Meta 에는 블루프린트에서 보여질 함수명을 DisplayName 에 지정

  • HUD 위젯 블루프린트 스코어 위젯 추가
  • 플레이어 컨트롤러 블루프린트
    • cpp의 BeginPlay에 있던 위젯 생성 함수 주석 처리
    • 블루프린트로 위젯 생성
      • HUD 클래스 지정
    • 결과를 Add to Viewport로 화면에 띄움
    • score 위젯을 변수로 접근
      • 결과를 저장
    • clear score 연동이 안되어 있음
      • 게임모드 가져와서 설정

  • SaveGame 상속 받은 클래스 생성
    • 리트라이 변수 추가
  • 컨트롤러 클래스
    • SaveGame 객체를 관리한 변수 추가
    • BeginPlay에서 저장된 게임이 있는지 확인하고 로딩
    • UGameplayStatics::LoadGameFromSlot 를 이용해 편리하게 게임 저장 가능
      • 저장할 파일 이름
      • 대응되는 플레이어 아이디 (싱글플레이는 항상 0번)
    • UGameplayStatics::SaveGameToSlot 를 이용해 값을 저장
  • 에디터에서 블루프린트 함수 호출
    • 스코어 위젯과 위젯의 함수 연결

  • 최종 빌드
    • Platforms - Windows - Shipping
    • Platforms - Packaging Settings - Advanced - Additional Asset Directories to Cook
      • 맵에 관련된 정보만 저장되므로 아이템 관련 정보도 경로 추가
    • 맵도 지정 가능
    • Package Project 누르면 진행

0개의 댓글