[Unity] 유니티 Time

Flaming Bun·2025년 4월 9일

Unity

목록 보기
8/39

🔥 Time

Unity에서 Time 클래스가 제공하는 기본 프로퍼티로 시간과 관련된 값으로 프로젝트에서 작업할 수 있습니다.

참고: 유니티 공식 매뉴얼 https://docs.unity3d.com/kr/2022.1/Manual/TimeFrameManagement.html

Time 클래스의 시간을 측정할 수 있는 프로퍼티.

  • Time.time : 게임 실행 후 경과한 시간을 초 단위로 반환한다.
  • Time.deltaTime : 마지막 프레임부터 현재 프레임까지의 간격(한 프레임을 그리는 시간)을 초 단위로 반환하고 주로 애니메이션, 이동, 회전 등의 프레임 보정에 사용한다.(FixedUpdate 내부에서 호출되면 Time.fixedDeltaTime을 반환한다.)

Time 클래스의 시간을 제어하는 프로퍼티.

  • Time.timeScale : 시간이 경과하는 속도를 제어한다.
  • Time.fixedDeltaTime : Unity의 * 고정 타임 스텝 루프 간격을 제어한다.
  • Time.maximumDeltaTime : deltatime의 상한을 설정한다.

📌 변수 타임 스텝, 고정 타임 스텝

Unity에는 시간을 추적하는 두 가지 시스템이 있는데 그건 변수 타임 스텝 시스템과, 고정 타임 스텝 시스템이다.

변수 타임 스텝 시스템은 각 스텝 사이 시간의 변수 양(프레임 간 시간 간격)을 추적하고,

고정 타임 스텝 시스템은 각 스텝 사이 시간의 고정된 양을 추적 대개 물리 시스템과 연관되어 있다.

📌 변수 프레임 속도 관리

Unity는 각 프레임에서 코드를 실행할 수 있도록 Update 메서드를 엔트리 포인트로 제공한다.

컴퓨터의 성능에 따라서 프레임 속도가 달라지므로 프레임마다 변화하는 양을 확대/축소 하기 위해서는 Time.deltaTime을 이용해야한다.

예시

	void Update()
    {
    	// transform.Translate(1f, 0, 0) : 성능에 따라 속력이 달라짐
    	transform.Translate(1f * Time.deltaTime,0,0) // 속력이 일정함
    }

타겟 플랫폼에 따라 Application.targetFrameRate 또는 QualitySettings.vSyncCount로 프레임 속도를 설정할 수 있다.

📌 고정 타임 스텝

Unity는 각 고정 타임 스텝마다 자체 코드를 실행하기 위해 FixedUpdate 메서드를 엔트리 포인트로 제공한다. (일정한 간격으로 처리할 때 사용)

메인 프레임 업데이트와는 달리 Unity의 물리 시스템은 고정 타임 스텝에 따라 작동한다.

📌 Time.timeScale

Time.timeScale을 0으로 설정하여 게임을 일시정지할 수 있습니다. 이런 경우 Update 메서드는 여전히 호출되지만, Time.time은 전혀 증가하지 않으며 이때 Time.deltaTime0이다.

📌 maximumDeltaTime

큰 프레임 지연이 발생했는데 제한이 없다면 이론적으로 한 프레임에서 다음 프레임으로 오브젝트가 이동할 수 있는 거리에 제한이 없기 때문에 움직임이 deltaTime으로 크기가 지정된 오브젝트는 프레임 속도 스파이크 동안 벽을 통해 "글리치"할 수 있으므로 maximumDeltaTime으로 deltaTime의 한도를 제한해야 한다.

0개의 댓글