말감로그

24.08.19 Unity_C# - Time.deltaTime, 유니티로 타이머 구현 알고리즘 설명 본문

TIL

24.08.19 Unity_C# - Time.deltaTime, 유니티로 타이머 구현 알고리즘 설명

habbn 2024. 8. 19. 23:47
728x90

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 : 단순한 지연 호출, 복잡한 조건 없이 특정 시간 후에 함수를 실행해야 할 때

728x90