[타워디펜스게임] #15. 버튼 매니저 & 일시정지

치치·2025년 2월 16일
1

타워디펜스게임

목록 보기
15/18
post-thumbnail

오늘의 목표

UI 버튼 동작들을 하나의 ButtonManager 스크립트에서 관리한다

ButtonManager 스크립트가 가장 쉬웠다
-> 하나의 스크립트에서 모든 걸 정의해두고 버튼들에 OnClick()동작만 해주면 되기 때문이다


https://youtu.be/OmZRB-4ox5c


ButtonManager 스크립트

  • Pause_Button의 버튼 컴포넌트에 On Click()함수로 지정한다
    -> 이 버튼 컴포넌트가 해당 함수로 연결되있는 상태

  • 버튼같은 경우는 한곳에 다 작성해도 괜찮다
    -> 필요한 함수들만 적용시켜두면 됨

  • 정지버튼을 누르면 timesacle이 0이 되어 모든 행동들이 정지된다
    -> 정지버튼과 나가기 버튼 모두 누르면 정지되어야한다
    -> exitMenu UI가 활성화 되었는데, 뒤에 게임이 진행되고 있으면 안된다

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

public class ButtonManager : MonoBehaviour
{
    // 게임중지 팝업 이미지
    [SerializeField] GameObject exitMenu;

    private bool isPause;

    private void Start()
    {
        isPause = false;
    }


    // 시작부터 비활성화
    private void Awake()
    {
        exitMenu.SetActive(false);
    }

    public void Exit()
    {
        Debug.Log("클릭");
        Time.timeScale = 0;
        exitMenu.SetActive(true);
    }

    public void Exitcancel()
    {
        Debug.Log("창닫기");
        exitMenu.SetActive(false);
        Time.timeScale = 1;
    }

    public void ExitButtonClick()
    {
        SceneManager.LoadScene("LobbyScene");
    }

    // 정지 클릭 시 일시정지
    public void Pause()
    {
        if (isPause == false)
        {
            Debug.Log("일시정지");
            Time.timeScale = 0;
            isPause = true;
            return;
        }
        if (isPause == true)
        {
            Debug.Log("일시정지 해제");
            Time.timeScale = 1;
            isPause = false;
            return;
        }
        
    }    
}


일시정지 기능 Time.timescale

시간이 흐르는 정도를 나타낸다

  • Time.timeScale = 1f -> 시간이 정상적으로 흐르고 있는 상태
  • Time.timeScale = 0.5f -> 원래 속도보다 0.5배 느리게 흐르는 상태
  • Time.timeScale = 0f -> 원래 속도보다 0배 느리게 흐르는 상태
    -> 멈춘 상태를 의미


일시정지 버튼을 누르면 정지하는 기능을 구현한 코드

  • bool 타입의 isPause 변수를 선언하고 false인 경우 정지, true상태에서 버튼 클릭 시 다시 시간이 동작하고 isPause = false;


BackButtonClick 스크립트

  • 로비씬의 스테이지 버튼은 따로 스크립트를 나누었다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class BackButtonClick : MonoBehaviour
{
    [SerializeField] Button stage1;

    [SerializeField] Button stage2;

    private void Awake()
    {
        // 버튼 첫 시작 비활성화 
        stage1.gameObject.SetActive(false);
        stage2.gameObject.SetActive(false);
    }

    public void Stage1Click()
    {
        stage1.gameObject.SetActive(true);
        stage1.interactable = true;
    }
    public void Stage2Click()
    {
        stage2.gameObject.SetActive(true);
        stage2.interactable = true;
    }

    public void OnBackButtonClick()
    {
        SceneManager.LoadScene("TitleScene");
    }

    public void Stage1StartClick()
    {
        SceneManager.LoadScene("GameScene");
    }
}


고민 사항

지금 일시정지 상태에서는 배경음이 계속 실행되고 있다
-> 일시정지 상태일땐 배경음이 안나오게 할까, 아니면 이대로 실행되는 상태로 냅둘까 고민해보자

profile
뉴비 개발자

0개의 댓글