TIL

2024 09 12 TIL (코루틴)

noc777 2024. 9. 12. 20:31

UPDATE 문 넣어 쓰는 것이 너무 많다는 것을 알고 개인적으로 어떤 방법이 있을까 생각하여 

찾아보다 코루틴에 대하여 공부하게 되었다.

 

코루틴은 시간의 경과에 따라 절차적인 단계를 수행할 때 쓰이는 함수라고 한다.

시간에 따라 실행되도록 하는 로직은 UPDATE 함수로 해결할 수 도 있지만 

UPDATE문은 매 프레임마다 안에 있는 내용을 수행하기에 프레임 단위로 처리해야하는

것이 아니라면 비효율적이라고 한다. 그렇기에 개발자는 코루틴을 자주 사용하게 된다고 한다.

이번에 내가 들었던 이야기도 아마 코루틴을 사용하라는 의미였던 것 같다.

 

코루틴은 IEnumerator 라는 반환값을 가지고있다. 그리고 이 함수의 내용을 실행 중지시키고

다음 프레임에서 실행을 재개하도록 하는 yield return 이라는 전용 함수가 존재한다.

yield retrun는 뒤에 붙어있는 내용에 따라 다른 결과를 만드는데 

 

yield return null                                                         //다음 UPDATE 호출 시 까지 대기한다.

yield return new WaitForSeconds()                          //괄호안의 시만큼 무조건 대기시간을 가진다.

yield return new WaitForSecondsRealtime()            // WaitForSeconds와 기능은 같지만 TimeScale의 영향을 받지 않는다.

yield break                                                                // 반복하지 않고 코루틴을 바로 빠져 나간다.

 StartCoroutine() 매서로 코루틴을 실행시킨다. 괄호안에 실행할 코루틴의 이름을 넣어

실행시킨다.

 

그리고 코루틴을 종료시킬 때는 StopCoroutine()을 동일한 방식으로 쓰거나 StopAllCoroutines() 를 사용하여

중지시킨다. 둘의 차이점은 All은 코루틴들을 전부 중지시킨다는 것이다.

 

public bool isDelay;

public float DelayTime = 3.0f

 

  void Update()

{

    if(Input.GetKeyDown(KeyCode.Space))    //키보드의 스페이스바가 눌렸을 때의 조건문

  {

       if (isDelay ==false)  //isDelay  의 불값이 false일때를 조건

      {

           isDelay =true;      // isDelay를 true로 만들고

           StartCoroutine(IDK)    //IDK 코루틴을 실행

       }

       else   //조건에 충족하지 않을 때의 조건

      {

          

       }

   }

IEnumerator IDK()   //코루틴 함수

{

  yield return new WaitForSeconds(DelayTime)     //DelayTime의 값만큼 기다림

  isDelay = false;           //isDelay 값은 false로 만들어 스페이스바를 눌렀을 때 다시 실행되게 함

 

 

}

 

처럼 코루틴을 사용하여 Update 안에 사용되어 프레임 단위로 실행되는 것을 지연시키는 역할이 가능하다.

 

 

'TIL' 카테고리의 다른 글

2024 09 19 TIL (C# 기초)  (0) 2024.09.20
2024 09 13 TIL (PlayerPrefs)  (0) 2024.09.13
2024 09 11 TIL  (1) 2024.09.11
2024 09 10 TIL  (1) 2024.09.10
2024 09 09 TIL  (0) 2024.09.09