5. 게임내 일시정지 메뉴 생성 / 스크립트 작성

게임 일시정지 또는 종료가 가능한 게임내 일시정지 메뉴를 만들겠습니다.

Windows
MacOS
Linux

더이상 필요하지 않은 페이지입니다.


마지막으로 할 작업은 플레이어가 게임을 일시정지 또는 종료시킬 수 있는 단순한 일시정지 메뉴를 만드는 것입니다.

비주얼: 일시정지 메뉴 레이아웃

여기서는 기본적인 일시정지 메뉴의 비주얼 레이아웃을 만듭니다.

  1. Pause Menu 위젯 블루프린트를 엽니다.

  2. 디자이너 탭의 팔레트 에서 위젯을 계층구조 로 끌어놓아 아래 구성을 만듭니다.

    Pause1.png

    캔버스 패널 에는 Text 포함 Button 두 개와 Text 포함 Vertical Box 가 하나 들어있는 Border 가 있습니다.

  3. 디자이너 창에서 Border 가 전체 점선을 *화면을) 채우도록 크기를 조절합니다.

    Pause2.png

    디테일 패널 안의 Brush Color 옵션을 통해 색을 바꿀 수도 있습니다.

    Pause3.png

    컬러의 Alpha0.5 로 설정하여 약간 반투명하게 할 수도 있습니다. 게임플레이 도중 일시정지 메뉴가 열리면, Border 가 화면을 채우지만, 약간 반투명하게 해 두면 뒤로 게임을 계속 확인할 수 있습니다.

  4. Border디테일 패널에서 앵커가 화면을 채우도록 설정되어 있는지도 확인합니다.

    Pause4.png

    그래야 화면 크기에 상관없이 Border 가 화면을 가득 채웁니다.

  5. 계층구조 에서 Vertical Box 를 선택하고 디테일 패널에서 가로 세로 중앙을 선택합니다.

    Pause5.png

  6. Vertical Box 아래 Text 를 선택한 다음 디테일 패널에서 ContentPause Menu 라 입력합니다.

    Pause6.png

  7. 나머지 두 개의 Text 블록에는 ResumeQuit 라 입력합니다.

    Pause7.png

  8. Ctrl 키를 누르고 계층구조 의 두 Button 을 선택한 다음, 디테일 패널에서 Style 아래 Hovered 에 색을 지정합니다.

    Pause8.png

  9. 디테일 패널에서 Button 이름을 ResumeQuit 으로 각각 바꿉니다.

    Pause9.png

스크립트: 일시정지 메뉴 함수성

비주얼 설정이 다 됐으면, 일시정지 메뉴의 함수성 스크립트를 짤 차례입니다.

  1. 위젯 블루프린트 에디터 창 우상단의 그래프 버튼을 클릭합니다.

  2. 내 블루프린트 창의 그래프 탭에서 QuitButton 을 클릭한 다음 디테일 패널에서 OnClicked 이벤트를 추가합니다.

    PauseScript1.png

  3. ResumeButton 에 대한 OnClicked 이벤트를 추가합니다.

  4. 그래프 창에 우클릭 한 다음 Get Player Controller 노드를 추가합니다.

    PauseScript2.png

  5. Get Player Controller 를 끌어놓고 Set Input Mode Game Only 를 사용한 다음 Remove from ParentSet Game Paused 를 아래와 같이 설정합니다.

    PauseScript3.png

    Resume Button 을 클릭하면, 입력 모드는 게임 전용으로 설정되어 일시정지 메뉴 활성화시 표시되는 커서가 제거됩니다. Remove from Parent 노드를 사용해서 일시정지 상태를 나가기 전 실제 일시정지 메뉴 위젯 표시를 제고하는데, Set Game Paused 노드를 사용하고 Paused 체크를 해제하는 것입니다.

  6. 함수 를 새로 만들어 Remove HUD 라 합니다.

    PauseScript4.png

    일시정지 메뉴가 활성화되면 플레이어의 뷰에서 게임 HUD 를 제거하는 데 쓸 것입니다.

  7. 함수에서 Get Player Character 노드를 추가하고 Return Value 을 끌어놓고 Cast ToFirstPersonCharacter 노드를 추가합니다.

    PauseScript5.png

    플레이어에 사용되는 캐릭터 블루프린트와 그 플레이어에 사용되는 게임 HUD 를 접근할 수 있게 됩니다.

  8. As First Person Character 에서 Get HUD ReferenceRemove from Parent 를 아래와 같이 사용합니다.

    PauseScript6.png

    플레이어 캐릭터에 사용중인 HUD 에 접근하여 게임 종료시 뷰포트에서 제거해 줍니다.

  9. 이벤트 그래프Get Player Controller 에서 True 로 설정된 Set Show Mouse Cursor 노드를 사용합니다.

    PauseScript7.png

    Quit 를 클릭하면, 메인 메뉴로 돌아갈 때의 메뉴 조작용 마우스 커서를 켭니다.

  10. 다음 위에서 생성한 Remove HUD 함수를 (MainMenu 또는 메인 메뉴가 있는 레벨 이름으로 설정된) Open Level 뒤에 추가하고 다음과 같이 연결합니다.

    클릭하면 원래 크기로 봅니다.

    두 버튼 구성이 완료되었으니, 마지막으로 해 줄 작업은 플레이어가 일시정지 메뉴를 호출하여 게임을 일시정지시킬 수 있도록 하는 것입니다.

  11. 콘텐츠 브라우저 에서 Content/FirstPersonBP/Blueprints 아래 FirstPersonCharacter 블루프린트를 엽니다.

    PauseScript9.png

  12. 그래프에서 M Key Event 와 Create Widget (Pause Menu 로 설정) 노드를 추가하고 Return Value 핀을 변수로 승격시킵니다.

    PauseScript10.png

    일시정지 메뉴를 불러오는 데 M 키를 사용했지만, 아무 키나 사용해도 됩니다. 승격된 변수의 이름은 Pause Menu Reference 로 했는데, 생성된 일시정지 메뉴의 as this will store a reference to created Pause Menu.

  13. Ctrl 키를 누르고 내 블루프린트 창에서 변수를 끌어놓은 다음 IsValid 노드에 연결합니다.

    PauseScript11.png

    일시정지 메뉴 위젯이 생성되어 이 변수에 저장되었는지 검사하고 있습니다.

  14. Is Not Valid 핀을 Create PauseMenu_C Widget 에 연결합니다.

    PauseScript12.png

  15. 우클릭Get Player Controller 노드를 추가한 뒤 Set Input Mode UI Only 설정하고 아래와 같이 연결합니다.

    PauseScript13.png

    M 키를 누르면, 일시정지 메뉴가 열려있는 경우 다시 생성하지 않고 변수를 접근합니다. 일시정지 메뉴를 처음 연 것이라면 생성한 뒤 나중에 접근할 수 있게끔 변수로 저장합니다. 어느 경우든 일시정지 메뉴 표시 전 입력 모드는 UI 전용으로 설정합니다 (곧 해 줄 작업입니다).

  16. Pause Menu Reference 변수에서 Add to Viewport 노드를 사용한 뒤 Set Game Paused (PausedTrue) 설정합니다.

    클릭하면 원래 크기로 봅니다.

    일시정지 메뉴 구성이 완료되었으니, 테스트할 차례입니다.

  17. 컴파일, 저장 버튼을 클릭한 뒤, 플레이 버튼을 눌러 에디터에서 플레이합니다.

    게임내에서 M (또는 자체 설정한) 키를 누르면, 게임이 일시정지되고 일시정지 메뉴가 뜨는 것이 보일 것입니다. 여기서 Resume 버튼으로 게임플레이를 재개하거나, Quit 버튼으로 메인 메뉴로 빠져나갈 수 있습니다.

다음 섹션에는 언리얼 모션 그래픽블루프린트 작업시 추가 정보를 제공해 드리겠습니다.


Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback