🎯 game engine/◽ 유니티(unity)

(unity) 생명주기,unity Lifecycle, 이벤트 함수의 실행 순서, 코루틴

핑크코냥 2022. 9. 15. 16:32
728x90

 

유니티 생명주기/ unity Lifecycle/ 이벤트 함수의 실행 순서

1. 주요 함수 간단 정리

Awake Start 함수 전에 호출되며 프리팹이 인스턴스화 된 직후에 호출.
Start 업데이트 시작 직전 최초로 실행.
OnEnalbe  오브젝트가 활성화된 경우에만 활성화 직 후 이 함수를 호출.
FixedUpdate FixedUpdate 는 종종 Update 보다 더 자주 호출됨.
프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있음. 
모든 물리 계산 및 업데이트는 FixedUpdate 후 즉시 발생.
FixedUpdate 의 움직임 계산을 적용할 때 Time.deltaTime 만큼 값을 곱할 필요가 없음.
- 이유: FixedUpdate 가 프레임 속도와 관계없이 신뢰할 수있는 타이머에서 호출되기 때문
Update  Update 는 프레임당 한 번 호출.
 프레임 업데이트를 위한 주요 작업 함수.
LateUpdate LateUpdate 는 Update 가 끝난 후 프레임당 한 번 호출
Update 에서 수행된 모든 계산은 LateUpdate 가 시작할 때 완료 
OnGUI GUI 이벤트에 따라 프레임당 여러 번 호출
레이아웃 및 리페인트 이벤트는 우선 처리되며 각 입력 이벤트에 대해 레이아웃 및 키보드/마우스 이벤트가 다음으로 처리.
OnPreRender 카메라가 씬 렌더링을 시작하기 전에 호출.
OnPostRender 카메라가 씬 렌더링을 마친 후 호출.
OnDrawGizmos 시각화 목적으로 씬 뷰에 기즈모를 그릴 때 사용.
OnApplicationQuit 애플리케이션 종료 전 모든 게임 오브젝트에서 호출.
에디터에서 사용자가 플레이 모드를 중지할 때 호출.
OnDisable 동작이 비활성화되거나 비활성 상태일 때 이 함수가 호출.
OnDestroy 오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 이 함수가 호출.
오브젝트는 Object.Destroy 또는 씬 종료에 대한 응답으로 파괴될 수 있음.

 

2. 코루틴 (CoRoutine -> Co"협력, 함께" + Routine)

한 부분에서 실행을 중지하여 Unity에 제어권을 돌려주고, 계속할 때는 다음 프레임에서 중지한 곳부터 실행을 계속할 수 있는 기능이다. 

  • 코루틴의 동작 : CleaningHouse( ) 코루틴을 실행하면 먼저 A를 청소하고, 다음의 yield문을 만나는 순간 10초 동안 코루틴 진행이 일시 정지된다. 코루틴이 처리를 쉬는 동안에는 프로그램의 다른 코드기 실행 될 수가 있다. 그리고 남은 처리를 이어서 진행한다. 
IEnumerator CleaningHouse
{
	// A방 청소
    yield return new WaitForSeconds(10f); // 10초 대기
    // B방 청소 
    yield return new WaitForSeconds(10f); // 10초 대기
    // C방 청소
}
  • 진행 순서: IEnumerator CleaningHouse( ) -> A 방 청소 -> yield return new WaitForSeconds(10f); -> -> -> (10초 동안 다른 코드 실행) -> -> ->  B 방 청소 -> yield return new WaitForSeconds(10f); -> -> -> (10초 동안 다른 코드 실행) .... 

코루틴이 처리를 쉬는 동안에 프로그램의 다른 코드가 실행될 수 있다. 

  • Unity 코루틴 사용 문법: Ienumerator 반환 타입과 body 어딘가에 포함된 yield 반환문으로 선언하는 메서드이다.
    -  IEnumerator는 "열거자"로 데이터의 목록을 하나씩 넘겨줄 때 사용되는 인터페이스이다. 
  • 코루틴 실행: StartCoroutine ( "코루틴 메서드를 실행한 반환값" or "코루틴 메서드의 이름" ) ;
  • 코루틴 시간 지연
    - 초 단위로 쉬기 yield return new WaitForSeconds( 시간 ) ; 
    - 한 프레임만 쉬기: yield return null ; 
  • 코루틴 정지: StopCoroutine, StopAllCoroutine, 코루틴에 연결된 게임오브젝트를 비활성화하기 위해 SetActive를 false로 설정하면 코루틴이 정지 된다.

 

Reference. 
- unity 도큐멘테이션 Unity User Manual 2021.3 (LTS) - Unity 매뉴얼 (unity3d.com)
- (도서) 레트로의 유니티 게임 프로그래밍 에센스
728x90