| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- std::unordered_map
- Queue
- rookiss
- 트리
- 벡터
- 객체지향
- 기술면접
- list
- MonoBehaviour
- 힙영역
- 프래그멘테이션
- static_cast
- 스택영역
- 자료구조
- 해쉬맵
- 멀티쓰레드
- c#
- 차이점
- vector
- thread
- std::map
- 리스트
- map
- 인프런
- 배열
- 큐
- 스택
- 공부
- 반복문
- 알고리즘
- Today
- Total
호빵의 IT 개발소
[유니티/C#] 코루틴(Coroutine) 본문
코루틴(Coroutine)을 사용하는 이유
유니티에서 화면에 변화를 일으킬 때 사용하는 Update() 함수가 있습니다. 이 메소드는 매 프레임마다 실행되기 때문에( 60fps = 1초에 60번) 특정 작업을 지연시키게 되면 기기의 성능에 따라 프레임 드랍을 발생시키고 맙니다. 그래서 코루틴(Coroutine)을 사용하여 프레임 드랍에 안전한 코드를 작성 할 수 있게 됩니다.
코루틴(Coroutine)을 사용 예시
나무가 쓰러지는 동안 몇 초간 시간을 지연한 다음 코드 실행
// 나무가 쓰러지면서 나무 윗부분은 사라지고 통나무 prefabs 3개 생성
IEnumerator LogCoroutine()
{
yield return new WaitForSeconds(destroyTime);
SoundManager.instance.PlaySE(logChange_sound);
Instantiate(go_Log_prefabs, go_ChildTree.transform.position + (go_ChildTree.transform.up * 3f), Quaternion.LookRotation(go_ChildTree.transform.up));
Instantiate(go_Log_prefabs, go_ChildTree.transform.position + (go_ChildTree.transform.up * 6f), Quaternion.LookRotation(go_ChildTree.transform.up));
Instantiate(go_Log_prefabs, go_ChildTree.transform.position + (go_ChildTree.transform.up * 9f), Quaternion.LookRotation(go_ChildTree.transform.up));
onLog.Invoke();
Destroy(go_ChildTree.gameObject);
}
-코루틴을 사용한 이 코드는 나무를 벌목 했을 때 마지막으로 실행되는 코루틴입니다. yield return new WaitForSeconds를 통해 삭제되는 시간을 지연해 줍니다. 그리고 지정된 시간이 지나면 나무 아이템이 나오는 사운드와 3개의 통나무가 생성되게 됩니다. 그리고 본체 나무 윗둥 부분은 삭제되게 됩니다.
코루틴(Coroutine)을 반환 종류
1. yield return null;
- Update() 함수가 1프레임을 호출자에게 양보하라는 뜻입니다. 즉, Update()가 끝나면 그때 yield return null 구문의 밑 부분 코드를 실행합니다.
2. yield return new WaitForEndOfFrame();
- 프로그램에서 한 프레임워크가 종료될 때 호출. 즉, 모든 Update() 함수가 끝난 뒤 렌더링까지 끝나게 됬을 때 yield return new WaitForEndOfFrame() 구문의 밑부분 코드를 실행합니다.
3. yield return new WaitForSeconds();
- 괄호 안 지연 시키고 싶은 시간(초)을 적으면 그 지연 시간이 지난 뒤 밑에 구문 코드를 실행합니다.
4. yield return new WaitForSecondsRealtime();
- 괄호 안 지연 시키고 싶은 시간(초)을 적으면 그 지연 시간이 지난 뒤 밑에 구문 코드를 실행합니다. 하지만 yield return new WaitForSeconds();과 다른 점은 Time.timeScale에 영향을 받지 않는 절대적 시간을 의미합니다.
5. yield retuen new WaitForFixedUpdate();
- FixedUpdate()가 끝났을 때 해당 구문 다음 코드를 실행합니다.
6. yield return new WaitUntil();
- 괄호에 쓰인 해당 조건이 만족하면(true) 해당 구문 다음 코드를 실행합니다.
7. yield return new WaitWhile();
- 괄호에 쓰인 해당 조건이 만족하지 않으면(false) 해당 구문 다음 코드를 실행합니다.
8. yield return StartCoroutine();
- 괄호에 쓰인 코루틴이 끝나면 해당 구문 다음 코드를 실행합니다.
'C#, 유니티 > 유니티엔진 기초' 카테고리의 다른 글
| [유니티] 유니티 엔진의 특징 (0) | 2022.06.27 |
|---|---|
| [유니티/C#] Invoke (0) | 2022.06.21 |
| [유니티] C# 스크립트 생성 시 자동 주석 제거 (0) | 2022.01.17 |
| [유니티] MonoBehaviour (0) | 2022.01.17 |
| [유니티] console창에 Log 출력 (0) | 2022.01.16 |