Chapter 12-6. 기타 : 일시정지 메뉴
카테고리: Unity Lesson 3
태그: Unity Game Engine
인프런에 있는 케이디님의 [유니티 3D] 실전! 생존게임 만들기 - Advanced 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
🚀 일시정지 메뉴 UI
- 빈 오브젝트
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 비활성화- 시간을 다시 잰다.
- 일시 정지 메뉴가 활성화 되있지 않은 상태였다면 일시 정지 메뉴를 활성화한다. 👉 CallMenu
- ClickSave
- Save 버튼 이벤트에 등록될 함수
- Save 기능 추후 구현
- ClickLoad
- Load 버튼 이벤트에 등록될 함수
- Load 기능 추후 구현
- ClickExit
- Exit 버튼 이벤트에 등록될 함수
Application.Quit()
👉 게임 종료- 유니티 에디터 상으로 게임을 실행하면 종료 눌러도 아무 변화가 없을 것이다. 나중에 최종 빌드 한 후 어플리케이션으로서 실행될 때 종료 가능.
3 가지 버튼 이벤트에 각각 함수들을 등록해준다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기