본문 바로가기
Unity 끄적임

Coroutine 이야기

by Dev_Hugh 2022. 11. 11.
728x90
반응형

C# 에서의 Coroutine

- 특정 위치에서 실행을 일시 중단하고 다시 시작할 수 있는 진입점을 허용함

- 처리 도중 취소가 가능하다

- 하나의 Object로 Single Thread에서 더욱 효율적으로 사용하기 위해 만들어진 것

- 병렬 처리가 아닌 동시성 처리다

- Why use? 하나의 스레드에서 오랫동아 처리되는 작업 진행시 스레드가 대기상태가 되는데, 대기 상태에 진입한 스레드를 깨워서 다른 작업 수행할 수 있게 하여 효율성 극대화 하려고

- 가만 보면 병렬처리하는 것 과 매우 비슷해 보이나, 서로 다름을 인지하고 있자!!

Unity에서의 Coroutine

- 기본적으로 C#을 사용하기에 위 내용은 기본

- Unity에선 StartCoroutine을 통해 코루틴을 실행! 이건 엔진 내부에서 제공하는 것

- Why use? unity는 기본적으로 update문을 통해 frame 단위로 작업이 진행되다 보니, 중간에 값을 받거나 아니면 이 frame 외 동시적으로 처리하고 싶은 것이 있을 때 사용하면 좋다.

 

Frame?

- Unity에서 frame은 1초에 60번 돈는데, 사실 정확하진 않다. 왜냐면 기기 성능에 따라 frame drop이 일어난다.

- 아래 코드는 간단하게 작성한 코드다. 직접 실행해보면, TestOne의 경우 증가하는 시간과 TestTwo의 증가하는 시간 비교를 보면 차이가 확 남을 알 수 있다.

- 추가로 TestTwo의 방식은 실제로 Unity에서 실제 초가 흘러가는 것과 비슷한 느낌을 주고 싶을 때 자주 사용하는 방식이니 알아두면 좋을 거 같다.

private float StartTime = 0.0f;
public float TestOne = 0.0f;
public float TestTwo = 0.0f;

private void Start()
{
	StartTime = Time.time;
}

private void Update()
{
    TestOne += Time.deltaTime;
    TestTwo += (StartTime - Time.deltaTime);
    
    Debug.Log("TestOne Value: " + TestOne);
    Debug.Log("TestTwo Value: " + TestTwo);
}
728x90
반응형

'Unity 끄적임' 카테고리의 다른 글

Unity IL2CPP, JIT, AOT  (0) 2024.05.05
코루틴(Coroutine)  (0) 2023.11.20
[게임수학] 내적, 외적 이야기  (0) 2023.11.17
월드 공간과 UI 공간  (0) 2023.10.17
Coroutine - 가비지 줄이기  (0) 2022.11.11