Unity Lifecycle

2023. 6. 24. 15:39·엔진, 프레임워크/Unity
목차
  1. 첫 번째 씬 로드
  2. 에디터
  3. 첫 프레임 업데이트 전
  4. 프레임 사이
  5. 업데이트 순서
  6. 애니메이션 업데이트 루프
  7. 렌더링
  8. 코루틴
  9. 오브젝트 파괴
  10. 종료

유니티에서는 지정된 순서에 맞춰서 여러 개의 이벤트 함수들이 실행된다. 해당 이벤트 함수들을 상황에 알맞게 사용하여 실행 흐름에 맞는 프로그래밍을 진행할 수 있다. 간혹가다가 순서가 꼬일 경우, 시스템의 기능이 정상적으로 작동하지 않을 수 있기 때문에 유의해야 한다.

 

 

첫 번째 씬 로드

Scene이 시작하고 호출이 진행된다. 이벤트 함수 중에 가장 초기에 있기 때문에 초기화나 값 설정을 필요로 할 때, 많이 사용된다.

 

1. Awake

- Start 함수 전에 실행이 되며, 프리팹 인스턴스 화 이후 호출된다.

- 오브젝트가 비활성화인 상태에서는 실행되지 않는다.

 

2. OnEnable

- 오브젝트가 비활성화인 상태에서 실행되지 않는다.

- 오브젝트 활성화 시 실행되며, 무언가 수정이 이루어졌을 때 실행된다.

 

에디터

1. Reset

- 오브젝트에 처음 연결하거나, Reset 커맨드를 사용할 때 호출된다.

Reset 함수는 사용 빈도가 낮아서 어디에서 호출되는지 확인했다. 스크립트의 메뉴버튼에서 Reset을 눌렀을 경우 실행된다. 스크립트에 고정적으로 들어가야 하는 값이 있다면 해당 함수를 통해서 저장하는 것이 좋을 것 같다.

 

2. OnValidate 

- 스크립트의 프로퍼티가 설정될 때 호출되며, 에디터에서 씬을 열 때와 도메인을 다시 로드한 이후 다양한 시기에 호출이 가능하다.

 

OnValidate 함수는 완전히 사용 빈도가 없었어서 어디에서 호출되는지 확인했다. Script를 수정하고 유니티로 돌아오면 Reload하는 과정에서 함수가 실행됨을 확인할 수 있었다.

 

해당 함수는 확실하게 변수가 가지면 안되는 값이 들어가있을 경우, 혹은 무언가 강제된 내용을 수정할 때 사용하면 좋을 것 같다. 

 

첫 프레임 업데이트 전

1. Start

- 스크립트 인스턴스가 활성화 이후, 첫 프레임 업데이트 이전에 실행된다. 한 마디로 Update 메서드가 처음으로 실행되기 전 한 번 실행된다.

 

프레임 사이

1. OnApplicationPause

- 일시정지가 감지된 프레임의 끝에서 실행이 되며 그래픽스 표시를 위해서 한 프레임을 추가로 실행한다.

- 게임 도중에 유저가 잠시 핸드폰 홈 바탕으로 나갔거나, PC의 배경화면으로 벗어났을 경우, 유니티에서는 해당 상태를 OnApplicationPause 상태로 판단한다. 인자값으로 bool형 변수를 받아서 true/false를 통해 유저가 화면에 나갔는지를 확인할 수 있다.

 

업데이트 순서

1. FixeUpdate

- 프레임 속도에 따라서 Update 함수보다 자주 호출될 수 있다.

- 낮은 프레임에선 여러 번 호출되며, 높은 프레임에서는 호출되지 않을 수 있다.

- 모든 물리 계산 및 업데이트는 FixeUpdate 후 발생한다. 이 함수에서는 Time.deltaTime을 통해서 프레임 간 보정을 할 필요 없어진다.

 

2. Update

- 프레임 당 한 번 호출된다.

 

3. LateUpdate

- Late에 맞게 Update가 끝나고 늦게 실행된다. Update에서 계산이 끝난 이후, LateUpdate가 실행되므로 확실히 계산이 나뉘어야 한다면 해당 함수에서 실행하는 것이 올바르다.

 

애니메이션 업데이트 루프

1. OnStateMachineEnter, Exit

2. Fire Animation

- 애니메이션 업데이트 루프는 설명하기 보다는 실행 순서가 이 위치라는 것을 알기 위해서 작성되었다.

- 애니메이션 시스템에서 사용되는 루프로 상세히 알기 위해서는 맨 하단의 유니티 공식 사이트를 참고하는 것을 권장한다.

 

렌더링

1. OnPreCull

- 카메라가 씬을 컬링하기 전에 호출된다.

 

* 컬링이란, 카메라에 보이지 않는 것을 선별하는 과정이다.

* 왜 컬링을 사용하는가? 가상 공간에 있는 모든 오브젝트를 카메라에 그리게 된다면 비용이 무척 비싸기에 일정 범위 안에 있는 오브젝트만 그릴 수 있게 한다.

 

2. OnBecameVisible / OnBecameInvisible

- 오브젝트가 카메라에 표시되거나, 표시되지 않을 때 호출된다.

 

해당 기능도 잘 사용하지 않아서 몰랐는데 카메라에 보일 때, 보이지 않을 때 호출되는 함수가 정말 좋은 것 같다. 플레이어의 화면에 보이지 않을 때 오브젝트를 정리하거나, 일정 위치에 도착했을 때 다음 씬을 불러오거나, 등 다양한 시점에서 사용할 수 있을 것 같다.

 

3. OnWillRenderObject

- 오브젝트가 표시되면 각 카메라에 한 번 호출된다. 

 

* 유니티에서 카메라는 복수로도 사용이 가능한데, 이 때에 복수의 카메라에서 1번씩 호출하기로 약속한 것이다.

 

4. OnPreRender

- 카메라가 씬 렌더링을 시작하기 전에 호출된다.

 

5. OnRenderObject

- 일반 씬 렌더링이 처리된 이후 호출된다. 

 

* 개인적인 생각으로는 Post-Processing이 들어가기 전, 모든 오브젝트를 그렸을 때 실행이 되는 것 같다. 

 

6. OnPostRender

- 카메라가 씬 렌더링을 끝내고 호출된다.

 

7. OnRenderImage

- 씬 렌더링 완료 후, 호출되며 이미지 포스트 프로세싱이 가능한 메서드다.

 

8. OnGUI

- GUI 이벤트에 따라서 프레임당 여러번 호출될 수 있다. 

 

9. OnDrawGizmos 

- Scene View에 Gizmos를 그릴 때 사용된다.

 

코루틴

1. yield

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

 

2. yield WaitForSeconds

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

 

* WaitForSeconds를 통해서 일정 시간까지 지연할 수 있음.

 

3. yield WaitForFixedUpdate

- 모든 FixedUpdate가 호출 된 이후 계속된다.

 

4. yield WWW

- WWW 다운로드가 완료되면 계속된다.

 

* WWW를 통해서 Web 소통이 가능함.

 

5. yield StartCoroutine

- 코루틴을 연결하고 일정 코루틴이 먼저 완료되기를 기다린다.

 

오브젝트 파괴

1. OnDestroy

- 오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마치고 호출된다.

- 씬 종료를 통해서도 호출할 수 있으며, 오브젝트 파괴에서 이루어진다.

 

* 하지만 해당 함수는 비용이 비싼 편이고 Destroy 과정에서 Un-Lock 과정이 복잡할 수 있다.

 

종료

1. OnApplicationQuit

- 어플리케이션 종료 시, 호출된다.

 

2. OnDissable

- 동작 비활성화 상태, 오브젝트 비활성화 상태에서 해당 함수가 실행된다.

 

 

참고 사이트 

https://docs.unity3d.com/kr/2021.3/Manual/ExecutionOrder.html

 

 

 

'엔진, 프레임워크 > Unity' 카테고리의 다른 글

UI에서 Particle System 추가하는 방법 - Raw Image & Render Texture  (1) 2023.11.12
Unity - Bezier Curve에 대해서 학습해보자.  (0) 2023.08.31
Unity - AnimationCurve를 사용해보자.  (0) 2023.08.28
[UI Toolkit] 2. UI Builder가 아닌 UXML로 만들기  (0) 2023.05.18
[UI Toolkit] 1. UI Builder를 사용한 UI 배치  (0) 2023.05.17
  1. 첫 번째 씬 로드
  2. 에디터
  3. 첫 프레임 업데이트 전
  4. 프레임 사이
  5. 업데이트 순서
  6. 애니메이션 업데이트 루프
  7. 렌더링
  8. 코루틴
  9. 오브젝트 파괴
  10. 종료
'엔진, 프레임워크/Unity' 카테고리의 다른 글
  • Unity - Bezier Curve에 대해서 학습해보자.
  • Unity - AnimationCurve를 사용해보자.
  • [UI Toolkit] 2. UI Builder가 아닌 UXML로 만들기
  • [UI Toolkit] 1. UI Builder를 사용한 UI 배치
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      오블완
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    Unity Lifecycle
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.