반응형


안녕하세요 ~ 오늘은 게임에서 많이들 쓰이는 일시정지 기능에 대해서 알아보려고 합니다 :D 





굳이 추가할 필요 없지만 멈춰 있다는 걸 보여드리기 위해서 저는 Plane과 Cube를 배치할게요 ~



1
2
3
4
5
6
7
8
9
10
11
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Rotate : MonoBehaviour {
 
    void Update() {
        transform.Rotate(new Vector3(111* 90 * Time.deltaTime);
    }
}
 
cs

그리고 공중에 띄어놓은 Cube 오브젝트를 천천히 회전하도록 만들게요. 굳이 해야하는 작업은 아닙니다 !


일단 오브젝트가 잘 회전하는지 봤는데 잘 돌아가네요 ~


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Pause : MonoBehaviour {
 
    bool IsPause;
 
    // Use this for initialization
    void Start () {
        IsPause = false;
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.T))
        {
            /*일시정지 활성화*/
            if (IsPause == false)
            {
                Time.timeScale = 0;
                IsPause = true;
                return;
            }
 
            /*일시정지 비활성화*/
            if (IsPause == true)
            {
                Time.timeScale = 1;
                IsPause = false;
                return;
            }
        }
    }
}
 
cs


이제 스크립트를 작성합시다 ~

먼저 일시정지 상태인지 알 수 있도록 bool IsPause; bool 타입의 변수를 하나 추가해주고 Start에서 값을 초기화 시킵니다.


일시정지를 시킬 조건으론 키보드 T 버튼을 지정했습니다.

if (Input.GetKeyDown(KeyCode.T))


그리고 핵심이 되는 아이가 바로 Time.timeScale 인데요. 이걸

Time.timeScale = 0;으로 하면 시간을 정지

Time.timeScale = 1;으로 하면 시간을 정상으로 되돌린 다는 말입니다.

그리고 일시정지 상태라면 원래 상태로, 원래 상태라면 일시정지로 되어야 하기 때문에 상태를 알 수 있는 IsPause 값을 조건에 따라 참, 거짓으로 바꿔줍니다.


그러면 T 키를 입력하면 보기와 같이 시간이 멈추는 걸 볼 수 있습니다 ~

(저는 시간이 멈추는 걸 시각화 하기 위해 UI가 나타나도록 코딩했습니다.)




여담으로 TimeScale 값이 곧 시간의 흐름을 나타냅니다. 0은 0% 1은 100% 라고 생각하시면 될 것 같습니다. 때문에 1 이상의 값을 주면, 예로 2를 준다고 가정하면 시간이 2배로 빠르게 지나가겠죠 ?


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기