Unity의 Time.deltaTime은 서로 다른 사용자의 컴퓨터 사양에 대해 게임 환경을 동일하게 적용할 수 있도록 도와주는 기능이다.
FPS(Frame per Seconds)라는 단어는 익히 들어봤을 것이다. FPS, 초당 프레임 즉, 1초에 몇 개의 프레임을 찍어내는가를 의미하는 이 단어는 Time.deltaTime을 사용하는 중요한 이유이다.
Update() method는 유저의 컴퓨터 성능에 따른 frame 단위로 호출되는 함수이다. 100fps의 경우 1초에 100개의 frame을 찍어내며, 1초에 100번의 Update() method를 호출하게 된다. 반대로 1fps의 경우 1초에 1개의 frame, 1번의 Update() method를 호출한다.
이해하기 쉬운 예제로, 배틀그라운드와 같은 fps게임을 한다고 가정하자. 고성능의 컴퓨터를 사용하여 100fps에서 게임하는 유저(1)와 1fps에서 게임하는 유저(2)가 있다고 하자. Time.deltaTime이 없는 경우, 유저 1은 1초 간 100개의 총알을 발사할 수 있는 반면, 유저 2는 1초 간 1개의 총알만을 발사할 수 있는 불합리한 상황이 생긴다. (고성능 컴퓨터 유저가 무조건 유리할 수 밖에 없음) 따라서, 한 frame 당 나오는 결과 값을 보정하여 모든 유저가 동일한 환경에서 게임할 수 있도록 수정이 필요하다.
Unity에서는 Time.deltaTime에 대해 다음과 같이 설명하고 있다.

직전 frame과 현재 frame 간의 시간 간격 (interval), 즉 컴퓨터의 성능이 안 좋을 수록 Time.deltaTime의 값이 커지게 된다. 한 frame이 완료되는 시간이 1초가 걸린다면 Time.deltaTime = 1, 10초가 걸린다면 Time.deltaTime = 10이 된다.
using UnityEngine;
public class PlayerCar : MonoBehaviour
{
[Header("Settings")]
[SerializeField] private float steerSpeed;
[SerializeField] private float moveSpeed;
void Update()
{
// 기본 움직임 (좌우, 상하)
float steerAmount = Input.GetAxis("Horizontal") * steerSpeed * Time.deltaTime; // 좌우 무빙 키보드 입력
float moveAmount = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime; // 상하
transform.Rotate(0, 0, steerAmount);
transform.Translate(0, moveAmount, 0);
}
}

위의 예제에서 살펴보면, slow computer에서는 1fps이므로 Time.deltaTime = 1, fast computer에서는 100fps이므로 Time.deltaTime = 0.01이 된다.
따라서, 위의 코드에서 살펴 봤듯이
void Update()
{
// 기본 움직임 (좌우, 상하)
float steerAmount = Input.GetAxis("Horizontal") * steerSpeed * Time.deltaTime; // 좌우 무빙 키보드 입력
}
Time.deltaTime을 곱해주면 100fps의 성능에서든, 1fps의 성능에서든 결과 값이 1로 동일하여 모든 유저에게 동일한 환경을 제공할 수 있게 된다.