ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티 코루틴 Coroutine 코드의 모든 것
    유니티(Unity)/유니티 코딩 2019. 2. 8. 20:02

    해당 티스토리 페이지는 필자가 유니티 C# 개발을 하면서 학습한 내용들을 기록하고 공유하는 페이지입니다 !

    - 틀린 부분이 있거나, 수정된 부분이 있다면 댓글로 알려주세요 !

    - 해당 내용을 공유 or 퍼가도 좋으나, 출처를 꼭 명시해주세요 !

    - 해당 글의 모든 저작권은 Chameleon Studio에 있습니다.

    - 방문해주셔서 감사합니다 ^^



    썸네일 이미지입니다.유니티 코루틴 사용법


    안녕하세요 ㅎㅎ 카멜레온입니다!


    이전 포스팅에서 코루틴에 관해 알아보았는데요,


    이번 포스팅에서는 코루틴에는 어떠한 지연 코드가 있는 지 알아보려고 합니다.


    바로 알아봅시다.



    함수 실행 순서 이미지입니다.함수 실행 순서 중 코루틴 순서



    일반적으로, 코루틴은 지연 코드로 이루어져 있습니다.


    일반적인 코루틴 업데이트는 Update 함수가 반환된 후 실행됩니다.


    함수 실행 순서에 관한 자세한 설명은 여기를 눌러주세요.


    코루틴의 사용법을 하나하나 알아봅시다.



    yield WaitForFixedUpdate 코루틴


     FixedUpdate가 모든 스크립트에 호출된 후 시작됩니다.



    WaitForFixedUpdate 예시입니다.


    게임이 시작하면, JumpDelay 코루틴이 시작되어서 Jumping이 true가 됩니다.

    씬 내에서 돌아가고 있는 모든 스크립트에서

    FixedUpdate문이 모두 돌아서 끝나면,

    불값 Jumping은 false가 됩니다.



    yield 코루틴


    모든 Update 함수가 다음 프레임에 호출된 후 계속됩니다.



    yield null을 선언하면, Update 문의 한 프레임이 끝난 직후에 호출됩니다.


    초당 60프레임이 Update문에서 돈다고 한다면,


    위의 코드 예시로 보면 yield null은 1프레임에서 Debug.Log가 호출됩니다.


    이유는, Start함수가 Update함수보다 먼저 실행되기 때문에,


    Start함수에서 코루틴이 시작하고, 코루틴이 Update문의 첫번째 프레임이 시작될 때까지 기다렸다가,


    Update문의 첫번째 프레임이 시작되면 yield null이 호출되고, Debug.Log가 찍히게 되는 것이죠.



    yield WaitForSeconds 코루틴


    지정 시간 후, 모든 Update 함수가 프레임에 호출된 이후에 계속됩니다.



    게임이 시작하면 코루틴이 시작되고

    bool값 Jumping은 true가 됩니다.

    지정된 시간인 2초가 지나면, 다시 false가 됩니다.



    yield WWW


    WWW 다운로드가 완료된 후 계속됩니다.



    yield return new WWW(""); 의 "" 안에 다운로드를 위한 URL을 입력합니다.

    만약, 서버를 가지고 있는 경우 해당 서버에서 다운로드를 실행합니다.

    서버가 아닌 경우일 때도 있습니다.

    리소스 파일 압축 해제나 로딩같은 경우에도 사용합니다.

    관련 내용으로 예시를 들자면, 스마트폰 게임을 하는 도중

    "리소스를 다운받고 있습니다. 리소스를 다운받고 있는 도중에는 데이터가 들지 않습니다"

    와 같은 경우가 이에 해당합니다.



    yield StartCoroutine 코루틴


    코루틴을 연결하고 코루틴이 완료되기를 기다립니다.



    일반적으로 코루틴은 Awake, Start 또는 내가 만든 void 함수 내에서 실행하지만


    코루틴 내에서도 실행할 수 있습니다.


    위의 코드 예시를 보시면, 1초를 기다린 후에 다시 코루틴을 실행시키게 했습니다.


    이는 1초마다 무한 반복되는 코루틴인 것이죠.



    1초마다 골드가 떨어지는 것이 보이시나요?


    지금은 쉽게 예시로 골드가 떨어진다고 처리해두었지만,


    바꿔 생각해서 1초마다 적이 레이더 안에 들어왔는지 들어오지 않았는지 처리할 수도 있겠지요.

     

     

    yield WaitUntil 코루틴


    지정한 상황이 끝날 때까지 기다립니다.



    100 골드가 찰 때까지 코루틴을 대기시켜보는 예시입니다.


    게임을 시작하면, StartCoroutine으로 코루틴을 시작합니다.


    Update문에서 골드를 계속 올려줍니다.


    100 골드까지 찼다면, 코루틴이 끝나고,


    100골드가 채워졌다고 알려줍니다.



    yield WaitWhile 코루틴


    지정한 상황 중일 경우에만 기다립니다.



    지정한 상황이 아니라면 코루틴이 기다림을 멈추고 다음 코드가 주어집니다.


    WaitUntil과 매우 비슷합니다.


    상황과 조건에 따라서 편하신 것을 쓰시면 되겠습니다.


    게임을 시작하면, StartCoroutine으로 코루틴을 시작합니다.


    Update문에서 골드를 계속 올려줍니다.


    100 골드가 넘게 찼다면, 코루틴이 끝나고,


    100골드가 채워졌다고 알려줍니다.



    yield WaitForSecondsRealtime 코루틴


    지정된 시간이 지날 때까지 기다립니다.



    실시간을 사용하여, 코루틴을 돌립니다.


    실시간으로 30초를 기다려보는 코딩입니다.


    30초 후에 30초의 시간이 실시간으로 표시되는 지 알 수 있습니다.


    콘솔에 입력된 값처음 실행과 30초 후의 콘솔 기록


    30초 후에 30.01895의 시간이 찍혔습니다.



    여기까지 코루틴에 관한 모든 내용을 살펴보았습니다.


    코루틴은 어떻게 사용하느냐에 따라서 여러가지로 응용될 수 있습니다.


    어떤 상황이나 조건에 맞게 코루틴을 사용한다면,


    CPU 과부하를 막을 수 있습니다.


    매 프레임마다 처리하는 Update문과는 달리,


    지연을 주어서 사용하면 비약적으로 CPU가 절약되기 때문이죠.


    여러분들도 여러분들의 게임 내에 코루틴을 유용하게 사용해보세요 !


    이상 포스팅을 마치며,


    궁금한 사항은 댓글을 달아주세요.


    또, 카멜레온이 다뤘으면 좋겠다하는 포스팅 내용을 달아주시면, 해당 내용에 관한 포스팅도 해보도록 하겠습니다.


    감사합니다 !


    Chameleon Studio가 만든 게임하러가기


    <젤랑점핑>

    안드로이드- market://details?id=com.Cameleon.TangTangBall

    IOS- itms-apps://itunes.apple.com/app/id1429522379



    <크러쉬팡>

    안드로이드- market://details?id=com.Chameleon.CrushPang 

    IOS- itms-apps://itunes.apple.com/app/id1450109331


    댓글

Designed by Tistory.