본문 바로가기

블루프린팅/11. 게임 스테이트

[11.게임스테이트와 마무리] 게임일시중지및 저장파일 재세팅

플레이어가 게임을 이어하거나 게임을 1라운드로 재세팅하거나 애플리케이션을 종료할 수 있는 옵션을 제공하는 PauseMenu를 만든다.

 

일시 중지 메뉴 만들기

PauseMenu는 LoseMenu와 같다. 그래서 우리는 LoseMenu를 템플릿으로 사용할 것이다. 다음 스크린샷은 PauseMenu에서 원하는 요소를 보여준다. 다음과 같이 만들겁니다.

 

1. UI폴더에서 LoseMenu를 우클릭하고 복제한다.

2. 새 블루프린트위젯 이름은 PauseMenu로 이름을 지정한다.

3. You Lost!가 표시된 텍스트를 Paused로 변경하고 칼라를 파란색으로 변경한다. X:-170 Y:-450으로 변경 Resume 버튼을 놓을 자리를 벌려준다.

4. 새로운 Button을 추가하고 이름은 ButtonResume 텍스트는 새로 끌어 이름은 TxtResume Text필드는 Resume으로 한다. 화면중앙앵커를 선택후 X:-180, Y:-250 크기(360,100)으로 세팅한다. 폰트크기는 48로 한다.

5. 기존의 BtnRestart버튼이름을 BtnReset로 변경한다. 텍스트는 ResetAll로 한다

6.컴파일후 저장한다.

 

게임재개

게임을 다시 시작하려면 뷰포트에서  PauseMenu를 제거하고 마우스 커서를 숨긴후 게임 일시 중지를 해제해야 한다. 

1. Btn resume요소를 클릭하고 디테일 패널의 맨 아래로 스크롤 한 다음 클릭시 옆에 있는 +버튼을 클릭한다.

2. 그래프에디터가 나타나면 BtnResume 이벤트를 다음과 같이 변경한다.

PauseMenu widget을 마무리한다.

저장파일 재세팅

저장된 파일을 리셋하는 매크로를 만들것이다.

 

1. 내블루프린트의 매크로+를 클릭해 이름을 DeleteFile로 변경한다.

2. +를 눌러 실행타입의 In/Out 파라미터를 만든다.

3. 슬롯이름저장 변수의 값을 검색하기 위해 FirstPersonCharacter 인스턴스에 대한 레퍼런스를 얻기위해 GetPlayerCharacter를 추가하고 출력을 끌어 FirstPersonCharacter형변환을 추가한후 GET SaveSlotName노드를 추가한다.

4. FirstPersonCharacter형변환 출력핀을 끌어 DoesSaveGameExit노드를 추가하고 Get SaveSlotName을 연결합니다.

5. DoesSaveGameExit출력핀에서 Branch노드를 추가하고 Return핀을 Branch Condition입력핀과 연결한다.

6. Branch True출력핀에서 Delete Game in Slot 노드를 추가후 Slot Name핀을 GetSaveSlotName노드에 연결한다. Outputs와도 연결한다.

7. 이벤트그래프에서 OnClick(BtnReset) 이벤트뒤에 DeleteFile매크로 노드를 추가한다.

8. 다시 게임을 시작하고  OpenLevel(by Object Reference)를 추가하고 Remove from Parent를 추가해 메뉴를 닫아준다

8. PauseMenu를 컴파일하고 저장한다.

PauseMenu를 만들었다. 이제 사용해보자

 

일시정지트리거

Enter키를 사용해 게임을 일시중지하고 PauseMenu를 연다. 프로젝트 세팅에서 Pause액션 매핑을 추가하고 Pause액션 매핑을 위해 생성된 입력액션 이벤트에 액션을 추가해야 한다.

1. 게임 입력 세팅을 변경하려면 툴바모음의 맨 오른쪽 있는 세팅메뉴를 클릭하고 프로젝트 세팅 옵션을 선택한다.

2. 표시되는 창의 왼쪽에서 엔진 > 입력 > 액션 매핑 옆  +를 클릭후 새 액션 이름을 Pause로 지정하고 드롭다운 메뉴에서 Enter 키를 선택해 해당키를 Pause이벤트에 매핑한다.

3. BP_FirstPersonCharacter블루프린터를 연다.

4. 이벤트그래프를 우클릭하고 PauseInput 액션을 검색한 다음 Pause입력 액션 노드를 추가한다. LostGame커스텀 이벤트에서모든 노드를 복사해 Pause입력액션 노드 근처에 붙여 넣는다.

5. InputActionPause출력핀을 SetGamePaused에 연결한다.

6. CreateWidget노드의 Class를 PauseMenu로 변경하다.

7. 컴파일후 저장하고 실행해서 테스트한다. 이제 게임도중 Enter키를 눌러 Pause Menu를 시행시킬수 있다. Resume버튼을 누르면  PuaseMenu가 닫히고 게임으로 돌아간다. ResetAll 버튼은 저장된 게임을 초기화 한다.