게임 개발/Unity

[unity C#] - 타이머 설정하기

Heesuk Lee 2019. 4. 3. 14:50

타이머를 설정하는것은 정말 빈번하게 사용하게됩니다. 그렇기 때문에 좀더 좋은 형태를 가지도록 구현하고자 정리하려고 합니다.

 

  1. Update를 이용한 방법

Private float time = 0f;

Void Update() 
{
    this.time += Time.deltaTime;
    
    if(this.time > 5f)
    {
        Debug.Log(“Do something!”);
        this.time = 0;
    }    
}

 

Time.deltaTime은 지난 프레임이 완료되는게까지 걸린 시간을 말합니다.

저희가 만든 time프로퍼티에 매 프레임마다 더해줌으로써 현재까지 걸린시간을 측정할 수 있습니다.

그 time프로퍼티가 5초를 넘는순간 어떠한 작업을 하고 다시 0초로 초기화해줘서 5초마다 일정한 시간을 가지고 어떠한 반복작업을 하는것이 가능해집니다.

 

이런 식으로 update를 이용하는 방법으로 간단하고 직관적으로 코드를 작성할수있지만 저는 이보다 좀더 복잡한 상황에서 사용하기 좋을수있는 coroutine을 사용해서 구현하고자합니다. 

 

 

  1. Couroutine을 이용하는 방법

Void Start() 
{
    StartCoroutine(“timerCoroutine”);
}

IEnumerator testCoroutine() 
{
    While(true)
    {
        Debug.Log(“Do something!”);
        yield return new WaitForSeconts(5f);
    }
    yield return null;
}

 

StartCoroutine()는 파라미터로 주어진 IEnumerator타입의 메소드를 실행시켜주는 역할을합니다.

IEnumerator타입 함수는 yield의 사용을 할수있어서 함수가 호출되고 나서 저희가 함수로 다시 돌아오고 어떻게 동작하는지 확인 할수있게 해줍니다.

 

Yield return new WaitForSecond()은 IEnumerator타입 함수가 재시작 할때까지 얼마나 오랫동안 기다려야하는지를 결정하는 유연성을 제공해줍니다. 파라미터로 원하는 시간을 넘겨주면 그시간동안 다음 동작을 기다립니다. 그후에 더이상의 이함수의 반복이 필요하지않은 부분에서 yield return null로 탈출해주면됩니다.

 

이 코루틴을 이용한 타이머는 타이머가 필요한 동작을 각각 분리하여 구현을 할수있다는것이 장점이 될수있습니다.

 

update로 하기에는 다양한 조건을 검사하거나 동시에 여러개의 타이머가 필요할때는 코루틴을 사용해 구현하는것이 편리할것같다고 생각합니다.

반응형