본문 바로가기

Programming/Unity

[개발일지 01] 유니티 일시정지, 배속 구현

728x90
반응형

안녕하세요 유니티 관련 포스팅은 처음이네요.

 

오늘 해볼것은 타워디펜스나 자동전투를 하는 게임에서 많이 사용되는 게임 일시정지, 배속입니다.

 

핵심으로 사용되는 코드는 Time.timescale 입니다.

 

단 이 방법은 속도에 관련된 코드들에 Time.deltaTime이 사용되어야합니다.

 

- 일시정지

puaseBtn
pauseBtn Inspector

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

public class Time_Pause : MonoBehaviour
{
    public Sprite pause;
    public Sprite unpause;

    Controller_Time ct;
    SpriteRenderer spriteRenderer;
    void Start()
    {
        ct = GameObject.Find("TimeController").GetComponent<Controller_Time>();
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    void OnMouseUp()
    {
        // pause
        if(ct.isPause == false)
        {
            ct.isPause = true;
            Time.timeScale = 0f;
            spriteRenderer.sprite = unpause;
        }
        // un-pause
        else
        {
            ct.isPause = false;
            Time.timeScale = 1f;
            spriteRenderer.sprite = pause;
        }
    }
}

 Pause_Time 스크립트를 사용하실 일시정지 버튼에 넣어주면 됩니다.

저는 배속과 함께 구현하느라 isPause 값을 다른 스크립트로 빼놨지만 일시정지만 사용할거라면 해당 스크립트에 선언하면 됩니다.

 

 

- n배속

speedBtn
speedBtn Inspector

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

public class Time_x2 : MonoBehaviour
{
    public Sprite x1;
    public Sprite x2;

    Controller_Time ct;
    SpriteRenderer spriteRenderer;
    void Start()
    {
        ct = GameObject.Find("TimeController").GetComponent<Controller_Time>();
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    void OnMouseUp()
    {
        if(ct.isPause == false)
        {
            // 2배속
            if(ct.isFastSpeed == false)
            {
                ct.isFastSpeed = true;
                Time.timeScale = 2f;
                spriteRenderer.sprite = x2;
            }
            // 1배속
            else
            {
                ct.isFastSpeed = false;
                Time.timeScale = 1f;
                spriteRenderer.sprite = x1;
            }
        }
    }
}

 마찬가지로 스크립트를 사용하실 버튼에 넣어주면 됩니다.

 

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

public class Controller_Time : MonoBehaviour
{
    public bool isPause = false;
    public bool isFastSpeed = false;
}

 

 

728x90
반응형

'Programming > Unity' 카테고리의 다른 글

유니티 테마 변경 방법  (0) 2020.08.15
[개발일지_00] 타워디펜스  (0) 2020.08.15