본문 바로가기

TIL

[ 24.06.13 ] 내일배움캠프 TIL - UGUI, Coroutine

흔히 말하는 UI는 User Interface의 줄임말이다. 비슷한 느낌으로유니티 공부를 할 때 나오는 UGUI는

Unity's User Interface의 줄임말이다.

 

UGUI는 모든 UI 요소를 Canvas 컴포넌트에 배치하게 된다.

Canvas에서 만질만할 것은 보통 렌더링 모드이다.

Canvas Render Mode

 

"Screen Space - Overlay"

카메라 설정이나 월드의 변화에 상관 없이 화면에 그리는 모드다.

즉, 무조건 UI를 제일 위에 평면으로 그리는 모드다.

 

"Screen Space - Camera"

특정한 카메라가 실제 평면을 찍고 있는 것처럼 그리는 모드다.

Order in Layer에 따라 그려지지 않는 오브젝트가 나온다.

 

"World Space"

몬스터의 HP처럼 실제 게임오브젝트마냥 UI를 올릴 수 있다.

 

그 다음으로 코루틴(Coroutine)이다.

코루틴은 실행을 일시 중단하고 나중에 다시 시작할 수 있어,

작업을 원하는 순서, 조건, 간격에 맞게 수행하고 싶을 때 유용하다.

 

IEnumerator 리턴 타입의 함수에서 yield return을 사용하여 코루틴을 구현할 수 있다.

StartCoroutine 함수를 통해 코루틴을 시작할 수 있고, StopCoroutine 함수를 통해 코루틴을 중지할 수 있다.

 

yield return 방식은 아래와 같이 다양하다.

 

yield return null : 다음 프레임까지 대기

yield return new WaitForSeconds(float) : 입력한 초(sec) 만큼 대기

yield return new WaitFixedUpdate() : 다음 프레임의 FixedUpdate 까지 대기

yield return WaitUntil(조건) : 조건을 만족할 때까지 대기

yield return startCoroutiune(string) : 입력한 다른 코루틴이 끝날 때까지 대기

yield return new www(string) : 입력한 웹 통신 작업이 끝날 때까지 대기

 

마지막으로 코루틴은 별도의 스레드에서 실행되지 않는다. (멀티스레드 X)

따라서 Unity의 메인 스레드에서 안전하게 Unity API를 호출할 수 있다.

 

싱글스레드와 멀트스레드의 차이점을 잘 정리해주신 블로그 주소

=> 싱글스레드(Single thread) vs 멀티스레드 (Multi thread) (velog.io)

 

1초마다 "Hello, World!"를 출력하는 간단한 코루틴

IEnumerator HelloCoroutine()
{
    while (true)
    {
        Debug.Log("Hello, World!");
        yield return new WaitForSeconds(1f);
    }
}


void Start()
{
    StartCoroutine(HelloCoroutine());
}