코루틴 Coroutine 


유니티 Update( )함수는 게임의 지속적인 변화를 주거나 게임의 진행되는 매순간 체크(사용자의 입력 등)해야할 경우 사용하게 된다.

하지만 특정행동을 5초 동안 취해야 할 경우,  초당60~80(프레임)번 호출 되는 Update함수 안에서는 제어 하기가 힘들다. 

그리고 플레이하는 디바이스마다 각각 다른 프레임이 나오기 때문에 구현 자체가 더더욱 힘들다.


그래서 C#과 유니티에서는 코루틴이라는 것을 제공한다.

유니티에서 사용할 것이기 때문에 유니티 코루틴을 알아보도록 하자


사용법 

StartCoroutine

void 함수명( ) //Update안에 있는

{

     StartCoroutine( 코루틴 함수 이름( ) );  

}

IEnumerator

    public IEnumerator 코루틴 함수 이름( ) //코루틴 사용

    {

            Debug.log(코루틴 대기);   

 yield return new WaitForFixedUpdate();

            Debug.log(코루틴 완료);

    }

 코드분석

우선 StartCoroutine( ) 괄호안에 코루틴으로 IEnumerator 개채명, 지정한 함수이름을 써준다.

yield라는 것은 반복자의 IEnumerator객체에 값을 전달하거나, 반복의 종료를 알리기 위해 사용한다.

WaitForFixedUpdate( );  다음 FixedUpdate 물리 프레임 전까지 대기

(코루틴 예외 :  함수안에서 만 사용, 알수 없는 이름의 함수(람다)에서는 에러)

코루틴용 데이터엔진이 수행하는 기능
yield return null다음 프레임까지 대기
yield return new WaitForSeconds(float)지정된 초 만큼 대기
yield return new WaitForFixedUpdate()다음 물리 프레임까지 대기
yield return new WaitForEndOfFrame()모든 렌더링작업이 끝날 때까지 대기
yield return StartCoRoutine(string)다른 코루틴이 끝날 때까지 대기
yield return new WWW(string)웹 통신 작업이 끝날 때까지 대기
yield return new AsyncOperation

비동기 작업이 끝날 때까지 대기




참고 : https://docs.unity3d.com/kr/530/Manual/Coroutines.html





반응형

+ Recent posts