개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!
안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!
이번에는 Time 클래스의 프로퍼티 중에서 timeScale과 unscaledDeltaTime에 대해서 알아봅시다!
사용 엔진 버전 : 2020.3
타임라인
0:00 인트로
0:10 Time.timeScale
1:40 Time.unscaledDeltaTime
3:14 아웃트로
스크립트
인트로
안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.
이번에는 Time 클래스의 프로퍼티인 timeScale과 unscaledDeltaTime에 대해서 알아보겠습니다.
Time.timeScale
time scale라는 프로퍼티의 이름을 단순하게 번역해보면 시간의 크기라는 뜻입니다.
이 값을 조절하면 시간이 흐르는 속도를 조절하여 시간이 빠르게 흐르거나 느리게 흐르게 만들 수 있습니다.
C# 스트립트를 하나 생성하고 스크립트 에디터를 엽니다.
스크립트 에디터가 열리고 나면 float 타입으로 timer 변수를 만들어줍니다.
그리고 Update 함수에서 timer 변수에 deltaTime 값을 누적시키며 더하고 그 timer 변수를 이용해서 오브젝트가 Sin 그래프를 따라서 움직이게 만들어 줍니다.
그 아래에는 키보드 화살 키를 눌러서 timeScale를 늘리거나 줄이는 코드를 작성합니다.
그리고 숫자 1을 누르면 timeScale를 1로 만들도록 해줍니다.
코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 이동합니다.
에디터로 이동한 다음에는 큐브 오브젝트를 생성하고 방금 만든 컴포넌트를 붙여줍니다.
이제 게임을 플레이시켜 보겠습니다.
게임이 시작되면 큐브가 왕복으로 움직이는 모습을 볼 수 있는데 이때 위쪽 화살표 키를 누르면 time scale이 커지면서 큐브의 움직임이 빨라집니다.
반대로 아래쪽 화살표 키를 누르면 time scale이 작아지면서 큐브의 움직임이 느려집니다.
그러다가 time scale이 0이 되면 움직임이 완전히 멈춥니다.
그리고 숫자 1 키를 누르면 time scale이 1이 되면서 원래의 속도로 움직입니다.
이런 식으로 time scale을 조절해서 슬로우 모션같은 연출을 할 수 있습니다.
Time.unscaledDeltaTime
그 다음 알아볼 프로퍼티는 unscaledDeltaTime입니다.
delta time에 대해서 설명했을 때 이야기한 것처럼 delta time은 게임에서 플레이어의 입력과 게임 처리, 화면 렌더링 등의 작업이 한 번 처리되고 그 결과물이 플레이어의 모니터에 그려지는 한 프레임이 진행되는 시간을 의미합니다.
이 delta time에 unscaled를 붙임으로써 크기가 바뀌지 않은 delta time을 의미하게 됩니다.
time scale의 영향을 받지 않는 delta time인 것이죠.
새 C# 스크립트를 생성하고 앞에서 만든 컴포넌트에서 오브젝트를 이동시키는 코드를 복사해서 Update 함수에 붙여넣어줍니다.
그리고 timer에 더해주는 값을 deltaTime에서 unscaledDeltaTime으로 바꿔줍니다.
코드를 모두 작성한 다음에는 저장하고 에디터로 돌아갑니다.
그리고 씬에 새로운 3D 오브젝트를 배치하고 거기에 새로 만든 컴포넌트를 붙여줍니다.
그 다음 게임을 플레이시키면 거의 비슷한 속도로 움직이는 두 오브젝트가 보일 겁니다.
이 때 화살표 키를 눌러서 time scale을 조절하면 delta time으로 움직이는 오브젝트의 속도는 time scale의 영향을 받아 느려지거나 빨라지지만, unscaled delta time으로 움직이는 오브젝트의 속도는 전혀 영향을 받지 않고 동일한 속도로 움직이는 것을 볼 수 있습니다.
이런 식으로 어떤 오브젝트의 움직임이 time scale의 영향을 받지 않기를 원할 때는 unscaled delta time을 사용해야 합니다.
time scale과 delta time, unscaled delta time을 적절하게 조합해서 사용하면 특수한 스킬로 적들은 멈춰있거나 느려졌는데 플레이어만 정상적인 속도로 움직이는 기능을 연출할 수 있습니다.
아웃트로
이번 영상에서는 Time 클래스의 time scale과 unscaled delta time 프로퍼티에 대해서 알아보았습니다.
이상 베르의 게임 개발 유튜브였습니다. 감사합니다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'Unity3D > Programming' 카테고리의 다른 글
[Unity] Time 클래스 통합본 (0) | 2021.12.27 |
---|---|
[Unity] Time.time & Time.realtimeSinceStartup & Time.timeSinceLevelLoad (0) | 2021.12.07 |
[Unity] Time.deltaTime (1) | 2021.11.22 |
[Unity] 인보크(Invoke) (0) | 2021.07.12 |
[Unity3D] 유니티 2020에서 바뀌는 유니티 이벤트 Generic Serialization (0) | 2021.04.12 |