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