24.08.19 Unity_C# - Time.deltaTime, 유니티로 타이머 구현 알고리즘 설명
Time.deltaTime이란 무엇인가요?
Time.deltaTime은 이전 프레임과 현재 프레임 사이에 발생한 시간 간격을 나타냅니다.
이를 사용하는 주된 이유는 프레임 속도의 차이에 관계없이 일관된 결과를 보장하기 위해서입니다.
예를 들어, Update() 메서드에서 객체를 매 프레임마다 일정한 속도로 이동시킬 때, 사용자의 하드웨어 환경에 따라 프레임 레이트가 달라지기 때문에 Update() 호출 횟수도 달라집니다. 이때 Time.deltaTime을 활용하여 다양한 컴퓨터 환경에서도 객체의 이동 속도를 일관성있게 적용시킬 수 있습니다. 또한 Time.deltaTime은 물리 계산이나 시간에 기반한 기능을 구현할 때에도 사용됩니다.
유니티로 타이머를 구현하는 알고리즘을 설명해주세요.
1. Update의 Time.deltaTime
Update 메서드와 Time.deltaTime을 활용하면 됩니다. 매 프레임마다 경과 시간을 누적시키고, 경과된 시간으로 특정 조건에 충족될 때 특정 로직을 실행하게 합니다.
public class Timer : MonoBehaviour
{
private float timeLimit = 5.0f;
private float time = 0.0f;
void Update()
{
time += Time.deltaTime;
if (time >= timeLimit)
{
// 실행할 로직
time = 0;
}
}
}
2. Coroutine 사용
Coroutine을 사용하여 타이머를 구현할 수 있습니다. 특정 시간 동안 대기한 후 로직을 수행할 수 있습니다.
public class Timer : MonoBehaviour
{
public float delayTime = 5.0f;
void Start()
{
StartCoroutine(WaitAndPlay(delayTime));
}
IEnumerator WaitAndPlay(float delay)
{
yield return new WaitForSeconds(delay);
// 실행 로직
}
}
3. Invoke 메서드 활용
Invoke 메서드를 사용하면 특정 메서드를 지연 시간 후에 호출할 수 있습니다.
public class Timer : MonoBehaviour
{
public float delayTime = 5.0f;
void Start()
{
Invoke("AfterAction", delayTime);
}
void AfterAction()
{
//실행 로직
}
}
각 방법의 사용 이유 + 예시
Update & Time.deltaTime : 계속해서 처리해야 하는 반복적인 작업 (ex. 캐릭터 이동, 입력 처리, 물리 엔진 업데이트 등)
Coroutine : 특정 시간이 지나거나 일정한 조건이 만족될 때까지 기다려야 하는 작업, 반복적으로 긴 시간에 걸쳐 실행해야 하는 작업(ex. 서서히 변화하는 효과, 네트워크 응답 대기, 점진적 변화 등)
Invoke : 단순한 지연 호출, 복잡한 조건 없이 특정 시간 후에 함수를 실행해야 할 때