ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1067)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (180)
      • Unreal (69)
      • Unity (100)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (346)
      • C++ (167)
      • C# (88)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 함수
  • string
  • 알고리즘
  • 포인터
  • 그래픽스
  • 언리얼
  • 티스토리챌린지
  • C
  • 파이썬
  • 백준
  • c#
  • 배열
  • SQL
  • 클래스
  • Unity
  • 프로그래머스
  • 유니티
  • 오블완
  • 문자열
  • C++

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[Unity] 생명 주기
게임엔진/Unity

[Unity] 생명 주기

2023. 8. 16. 15:11

Reset : 오브젝트를 생성 후 인스펙터 뷰에서 리셋을 눌러줄 때 실행된다. 객체의 속성을 초기 값으로 설정해 줄 때 사용한다.

 

Awake : 스크립트가 실행될 때 한번만 호출된다. 모든 오브젝트가 초기화 된 후 호출되기 때문에 GameObject.Find 같은 명령문을 안전하게 사용할 수 있다. Awake 함수는 언제나 Start 함수 전에 호출되므로 초기화 순서를 정할 수 있게 한다. (Coroutine 사용 불가)

 

OnEnable : 인스펙터뷰에서 체크를 통해서 게임 오브젝트를 활성화 할 때 사용된다. 활성화 할 때마다 호출 된다.

 

Start : Update 함수가 호출되기 전에 한번만 호출된다. 다른 스크립트의 모든 Awake가 모두 실행된 이후에 실행된다. 스크립트가 활성화 되어 있어야한다.

 

FixedUpdate : 주로 물리 엔진을 사용하는 경우 일정 시간 간격으로 힘을 가할 때 사용하는 함수다. 발생 주기가 일정하다. (Default : 0.02초)

 

Update : 프레임마다 호출되는 함수로 게임의 핵심 로직에 사용된다. 스크립트가 활성화 되있어야 사용 가능하고, 주기가 일정하지 않다.

 

LateUpdate : 모든 Update 함수가 실행되고 나서 호출된다. 주로 카메라 이동 로직에 사용한다.

 

OnDisable : 게임 오브젝트 또는 스크립트가 비 활성화 되었을 때 호출된다. (Coroutine 사용 불가)

 

OnDestroy : 오브젝트 생존기간의 마지막 프레임이 업데이트 된 후 실행된다. (Object.Destroy 또는 씬 종료 시)

 

OnApplicationQuit : 응용프로그램 종료 전에 모든 오브젝트에서 호출된다. 에디터에서는 플레이 모드를 중지하면 나타난다.

Awake, Start 함수간 차이

Awake 함수는 비활성화 상태에서도 호출된다, Start 함수는 활성화 상태일 때만 호출되므로 두 상관관계를 고려해서 초기화작업을 진행할 수 있다.

위와 같이 실행 순서를 알기 위해 스크립트를 작성해 메인 카메라에 붙여준다.
스크립트를 비활성화 시킨 상태에서 게임을 실행시켜본다.
위와 같이 Awake 함수만 실행되는 것을 볼 수 있다.
이번에는 플레이 모드에서 스크립트를 활성화 해본다.
위와 같이 Start 함수가 생성된다.

FixedUpdate, Update, LateUpdate 차이

[Update]
 
업데이트는 주기적으로 호출되지 않으면서 조정이 필요한 대부분의 기능이 여기서 구현된다. 1프레임이 완료되는데 걸린 시간은 Time.deltaTime을 통해서 확인 할 수 있다.
 
 
[FixedUpdate]
 
규칙적인 시간 간격으로 호출된다. 이 함수가 호출된 후에 물리 계산이 수행된다 따라서 리지드바디 같은 물리에 영향을 받는 것들은 업데이트 함수보다는 이 함수에서 호출해야한다. (업데이트는 불규칙한 함수이기 때문에 충돌 검사가 제대로 안될 수 있다.)
 
 
[LateUpdate]
 
모든 업데이트 함수가 호출된 후에 호출된다. 일반적으로 카메라 이동 로직에 사용하는데 그 이유는 업데이트 문에서 카메라가 촬영할 오브젝트의 활동이 모두 끝나고 카메라가 이동해야하기 때문이다. 카메라 추적 파트에서 다시 한번 다뤄진다.
스크립트를 위와 같이 작성해서 각 함수가 어떻게 호출되고 프레임 간격이 얼마인지 확인
먼저 FixedUpdate - Update - LateUpdate 순으로 반복되는 것을 확인할 수 있다. 여기서 중요한 것은 FixedUpdate 함수의 프레임 간격은 일정한 반면 Update 함수의 주기는 일정하지 않다는 것이다.

생명주기 테스트

지금까지 유니티의 생명주기에 대해서 알아보았는데 이번엔 실제 씬 전환을 통해서 어떻게 생명주기가 호출되는지를 직접 확인한다.
이전 장 에서 씬 전환에 대해 배웠는데 그 예제를 활용해 씬의 전환이 일어났을 때 어떤 상황이 벌어질지 위의 코드를 추가해 확인.
첫 번째 씬에서 플레이 모드가 되면 Awake - OnEnable - Start 함수가 순서대로 호출된다.
다른 씬을 호출했을 때 현재 씬은 OnDisable - OnDestroy를 거치고 새로운 씬은 첫 씬의 흐름과 동일한 것을 볼 수 있다.

 

https://itmining.tistory.com/47
저작자표시 (새창열림)

'게임엔진 > Unity' 카테고리의 다른 글

[Unity] Cinemachine Confiner change - 시네머신 confiner 변경  (0) 2023.09.11
[Unity] 최적화 Batching, Draw Call, SetPass calls  (0) 2023.08.17
[Unity] Mono 분석  (0) 2023.08.16
[Unity] 애니메이션 타입 legacy로 변경하기  (0) 2023.08.14
[Unity] 그래픽스 최적화 - 드로우콜과 배칭  (0) 2023.08.12
    '게임엔진/Unity' 카테고리의 다른 글
    • [Unity] Cinemachine Confiner change - 시네머신 confiner 변경
    • [Unity] 최적화 Batching, Draw Call, SetPass calls
    • [Unity] Mono 분석
    • [Unity] 애니메이션 타입 legacy로 변경하기
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바