-
게임개발 9일차 (간단한 슈팅게임 7)게임 개발 2025. 6. 3. 18:49
어제부로 3d를 시작하려고 했지만 중요한 걸 안해서 다시 돌아왔다.
바로 esc를 눌렀을 때 멈추게 하고 메뉴가기 다시시작하기 진행하기 끄기 등등의 기능을 넣어주는 것
캔버스 screen space - overlay로 하나 만든 후 아래에 PauseMenu 아래에 버튼과 텍스트를 구현했다.
PauseMenuController 스크립트를 만들어서 빈 오브젝트인 PauseMenuController에 넣고
각 버튼에 스크립트의 함수들을 넣었다.
using UnityEngine;
using UnityEngine.SceneManagement;
public class PauseMenuController : MonoBehaviour
{
public GameObject pauseMenuUI; // PauseMenuController연결
public static bool isPaused = false;
void Start() // 이 코드를 넣어주지 않으니 재시작을 했을 때 isPaused가 true로 되어있어서 고장난다.
{
isPaused = false;
Time.timeScale = 1f;
pauseMenuUI.SetActive(false);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (isPaused)
Resume();
else
Pause();
}
}
public void Resume()
{
pauseMenuUI.SetActive(false);
Time.timeScale = 1f; // 게임 재개
isPaused = false;
}
void Pause()
{
pauseMenuUI.SetActive(true);
Time.timeScale = 0f; // 게임 정지
isPaused = true;
}
public void OnPressMainMenu()
{
Time.timeScale = 1f;
SceneManager.LoadScene("MainMenuScene");
}
public void OnPressGameRestart()
{
Time.timeScale = 1f;
SceneManager.LoadScene(SceneManager.GetActiveScene().name); // 현재 씬 다시 로드
}
public void OnPressExit()
{
Application.Quit(); // 종료
}
}
이렇게 넣고 실행하니 멈춘 상태에서 다 멈춰있는데 내 캐릭터 뛰기 애니메이션과 총알생성은 움직여버렸다.
Update() 또는 FixedUpdate()에서 Time.timeScale과 관계없이 실행 중이면 계속 실행되기 때문이다.
그래서 Player 스크립트에서
- private Animator animator; → 변수 선언
- animator = GetComponent<Animator>(); → 변수에 값(컴포넌트) 넣기 (이니셜라이즈 속에다 넣음)
if (PauseMenuController.isPaused) // 멈춰있으면
{
if (animator.speed != 0f) animator.speed = 0f; // 애니메이션이 안멈춰있으면 멈추게만들고
if (Input.GetMouseButtonUp(0)) // 좌클릭을 누르면
{
if (shootCoroutine != null) // 만약 쏘는 루틴이 켜져있으면
{
StopCoroutine(shootCoroutine); // 쏘는루틴을 끄고
shootCoroutine = null; // 다시 쓸 수 있게 초기화 (stop은 루틴을 중지시키기만함)
}
}
return;
}
else
{
if (animator.speed != 1f) animator.speed = 1f;
}'게임 개발' 카테고리의 다른 글
게임개발 11일차 (Unity Learn 1일차) (0) 2025.06.06 게임개발 10일차 (1인칭 스타터에셋 이해) (0) 2025.06.05 게임개발 8일차 (간단한 슈팅게임 6) (0) 2025.06.02 게임개발 7일차 (간단한 슈팅게임 5) (0) 2025.05.29 게임개발 6일차 (간단한 슈팅게임 4) (0) 2025.05.28