Chapter 12-6. 기타 : 일시정지 메뉴

Date:     Updated:

카테고리:

태그:

인프런에 있는 케이디님의 [유니티 3D] 실전! 생존게임 만들기 - Advanced 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

🚀 일시정지 메뉴 UI

image

  • 빈 오브젝트 PauseMenu
    • 📜PauseMenu 가 붙을 곳
  • Panel UI Base_UI_Panel
    • 게임 화면을 전체 덮을 만큼 너비와 높이를 크게 해준다.
    • 검정색에 살짝 투명하게
    • 평소에 비활성화. P키 눌렀을 때만 활성화 할 것.
  • Sace, Load, Exit 버튼
    • 버튼 이미지 None. Normal Color 는 투명하게 (글씨만 나오게)
    • HighLighted Color, Pressed Color 도 적절하게 설정
    • 각각 버튼 이벤트애 📜PauseMenu 의 ClickSave, ClickLoad, ClickExit 가 등록될 것


🚀 일시 정지 메뉴 호출

📜GameManager

    public static bool isPause = false; // 일시 정지 메뉴 창 활성화

    void Update()
    {
        if (isOpenInventory || isOpenCraftManual || isOnComputer || isOpenArchemyTable || isPause)
        {
            Cursor.lockState = CursorLockMode.None;
            Cursor.visible = true;

            canPlayerMove = false;
        }
        else

마찬가지로 일시 정지 메뉴 Panel UI가 활성화되면 마우스 커서를 활성화 하고 플레이어의 움직임(canPlayerMove = false)을 멈출 것이다. || isPause.


📜WeaponSway

    void Update()
    {
        if (GameManager.canPlayerMove && !Inventory.invectoryActivated && isActivated)
            TrySway();
    }

무기 잡은 손이 흔들리는 것도 제어하기 위해 이 GameManager.canPlayerMove가 True 일 대만 무기가 흔들리도록 한다.


📜PauseMenu

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PauseMenu : MonoBehaviour
{
    [SerializeField] private GameObject go_BaseUI; // 일시 정지 UI 패널

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            if (!GameManager.isPause)
                CallMenu();
            else
                CloseMenu();
        }
    }

    private void CallMenu()
    {
        GameManager.isPause = true;
        go_BaseUI.SetActive(true);
        Time.timeScale = 0f; // 시간의 흐름 설정. 0배속. 즉 시간을 멈춤.
    }

    private void CloseMenu()
    {
        GameManager.isPause = false;
        go_BaseUI.SetActive(false); 
        Time.timeScale = 1f; // 1배속 (정상 속도)
    }

    public void ClickSave()
    {
        Debug.Log("세이브");
    }

    public void ClickLoad()
    {
        Debug.Log("로드");
    }

    public void ClickExit()
    {
        Debug.Log("게임 종료");
        Application.Quit();  // 게임 종료 (에디터 상 실행이기 때문에 종료 눌러도 변화 X)
    }
}

PauseMenu에 붙인다. 게임 도중에 P키를 누르면 게임이 일시 정지가 되고, 일시 정지 메뉴를 호출하게 하자.

  • go_BaseUI
    • 활성화하고 비활성화할 일시정지 메뉴 Panel UI
  • Update
    • P키가 눌리면
      • 일시 정지 메뉴가 활성화 되있지 않은 상태였다면 일시 정지 메뉴를 활성화한다. 👉 CallMenu
        • isPause를 True로 하고, 일시정지 메뉴 Panel UI 활성화
        • 시간을 멈춘다.
          • Time.timeScale로 시간의 크기를 지정할 수 있다. 즉 시간을 몇 배속 할지.
            • 1은 정상 속도. 0은 시간 멈춤(0배속)
              • ✨ 시간을 멈추므로 Time.deltaTime도 0 이 된다. Time.deltaTime에 의존하는 모든 것들이 멈춘다. Time.deltaTime를 사용하는 여러 스크립트가 중단되게 된다.
      • 일시 정지 메뉴가 활성화 되있는 상태였다면 일시 정지 메뉴를 비활성화 한다. 👉 CloseMenu
        • isPause를 False 로 하고, 일시정지 메뉴 Panel UI 비활성화
        • 시간을 다시 잰다.
  • ClickSave
    • Save 버튼 이벤트에 등록될 함수
    • Save 기능 추후 구현
  • ClickLoad
    • Load 버튼 이벤트에 등록될 함수
    • Load 기능 추후 구현
  • ClickExit
    • Exit 버튼 이벤트에 등록될 함수
    • Application.Quit() 👉 게임 종료
      • 유니티 에디터 상으로 게임을 실행하면 종료 눌러도 아무 변화가 없을 것이다. 나중에 최종 빌드 한 후 어플리케이션으로서 실행될 때 종료 가능.

image

3 가지 버튼 이벤트에 각각 함수들을 등록해준다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 3 카테고리 내 다른 글 보러가기

댓글 남기기