Time.deltaTime
Time.deltaTime는 시간 개념으로 각 프레임을 렌더링하는데 걸리는 시간을 계산하는 Unity 함수이다. 즉 프레임이 바뀔 때마다의 시간 간격을 측정한 것이 Time.deltaTime이고 자료형은 float형이다.
왜 사용할까? 개인의 컴퓨터의 스펙은 다 다르다. 예를 들어 어떤 컴퓨터는 1초에 100프레임의 속도를 가질수도 있고, 다른 컴퓨터는 1초에 200프레임의 속도를 가질 수 있다.
두 개의 컴퓨터를 사용한다고치고 Time.deltaTime을 사용하지 않고 1프레임마다 y축 방향으로 1f씩 증가하는 코드를 작성해 큐브에 할당해 보자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeEx : MonoBehaviour
{
void Update() // 매 프레임마다 호출
{
transform.position =
new Vector3(
transform.position.x,
transform.position.y + 1f,
transform.position.z);
}
}
위 코드를 두 개의 컴퓨터에서 동작시키면 1초 뒤에는 그림과 같은 결과가 나온다. 이런 식으로 게임을 제작한다면 컴퓨터의 사양에 따라서 결과가 완전히 달라질 수 있다. 이 문제를 해결하기 위해 나온 개념이 Time.deltaTime이다.
1초에 100프레임 PC의 경우 Time.deltaTime = 0.01f 이고 (1초에 100번 프레임이 바뀌는 것이고 한 프레임이 바뀌는 시간은 0.01초이다)
1초에 200프레임 PC의 경우 Time.deltaTime = 0.005f 이다. (1초에 200번 프레임이 바뀌고 한 프레임이 바뀌는 시간은 0.005초이다)
Time.deltaTime을 사용해 코드를 다시 작성해보자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeEx : MonoBehaviour
{
void Update() // 매 프레임마다 호출
{
transform.position =
new Vector3(
transform.position.x,
transform.position.y + (1f * Time.deltaTime),
transform.position.z);
}
}
결과를 보게 된다면 두 컴퓨터 모두 1초 뒤에 y축 방향으로 1 상승한다.
이렇게 Time.deltaTime을 사용하면 사용자 PC성능에 상관없이 동일한 퍼포먼스를 보여준다. 그래서 시간에 따른 변화나 이동 등에 자주 사용되는 개념이다.
유니티 공식 문서 참고 : https://docs.unity3d.com/kr/current/Manual/TimeFrameManagement.html
중요 클래스 - Time - Unity 매뉴얼
Unity의 Time 클래스가 제공하는 중요한 기본 프로퍼티를 사용하여 프로젝트에서 시간과 관련된 값으로 작업할 수 있습니다.
docs.unity3d.com
'Unity C# > 개념 및 문법 정리' 카테고리의 다른 글
[Unity C#] Delegate (대리자), Delegate Chain 기본 개념 (0) | 2025.01.25 |
---|---|
[Unity C#] Lerp 함수 (0) | 2025.01.21 |
[Unity C#] 객체 지향 _ 상속(추상 클래스, 인터페이스, 다중 상속) (1) | 2025.01.17 |
[Unity C#] 객체 지향 _ 다형성 (0) | 2025.01.16 |
[Unity C#] 객체 지향 _ 캡슐화(접근 제한자, 프로퍼티) (1) | 2025.01.16 |