ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 게임개발 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;
    }

     

Designed by Tistory.