반응형
SMALL

유니티의 라이프사이클에 대해 정리해보려고 한다.
우선 유니티 라이프 사이클의 정의는 다음과 같다
- 유니티 라이프사이클은 유니티 엔진에서 실행되는 게임 또는 애플리케이션의 생명 주기를 나타낸다.
- 생명 주기는 게임 오브젝트와 스크립트 컴포넌트의 초기화, 업데이트, 렌더링 및 종료와 같은 단계로 구성된다.
- 초기화(Initialization): 게임 또는 애플리케이션 실행 시 최초로 호출되는 단계.
- 게임 오브젝트 및 리소스의 로딩, 컴포넌트 초기화 등이 수행됩니다. Awake() 메서드가 호출.
- 다른 게임 오브젝트와의 연결을 설정하고 초기 상태를 설정하는 등의 작업을 수행가능
- 활성화(Activation): 게임 오브젝트가 활성화되는 단계.
- 게임 오브젝트가 렌더링되고 업데이트되는 등의 동작이 수행.
- OnEnable() 메서드가 호출.
- 초기화된 상태에서 추가적인 설정을 수행하거나 이벤트 구독 등의 작업을 수행가능.
- 업데이트(Update): 게임 로직이 실행되는 단계.
- 이게임 오브젝트의 상태 변화나 입력 처리, 애니메이션 업데이트 등이 수행.
- Update() 메서드가 호출.
- 게임 상태의 변화를 감지하고 필요한 로직을 실행가능.
- 렌더링(Rendering): 화면에 그래픽을 렌더링하는 단계.
- 게임 오브젝트의 시각적인 표현이 화면에 그려진다.
- LateUpdate() 메서드가 호출.
- 업데이트된 상태를 반영하여 렌더링 작업을 수행가능.
- 비활성화(Deactivation): 게임 오브젝트가 비활성화되는 단계.
- 게임 오브젝트가 일시적으로 중단되거나 화면에서 사라지는 등의 상태로 변경.
- OnDisable() 메서드가 호출.
- 이 단계에서는 리소스의 정리나 이벤트 구독 해제 등의 작업을 수행 가능.
- 종료(Destruction): 게임 오브젝트가 파괴되는 단계.
- 게임 오브젝트와 관련된 리소스를 정리하고 메모리를 해제.
- OnDestroy() 메서드가 호출.
- 할당된 리소스의 해제나 다른 오브젝트와의 연결 해제 등의 작업을 수행.
- 이제 각 함수들에 대해 정리
- Awake()
- 스크립트가 실행될때 한번만 호출, 모든 오브젝트가 초기화된 뒤 실행되며 GamObject.Find() 메서드 등도 이 단계에서 안정적으로 실행 가능하다.
- 프로젝트에서의 사용 : "건즈앤레이첼스" 개발당시에는 코드의 구조를 짤때 상위 main 컴포넌트를 만들고 UI의 경우 각각의 Director 컴포넌트를 관리하는 최상위단 Director 컴포넌트를 만들어 Init() 메서드를 발동시켜 실행 주기를 관리하였다. 이때문에 Awake의 경우 초기 설정의 역할을 수행하는 init()메서드보다 먼저 실행되어야 하는 (아틀라스 매니저 혹은 오디오매니저등의 모노 싱글톤 클래스들)스크립트들의 초기화 등에 사용되었다.
- On Enable()
- 오브젝트가 활성화 될때마다 호출, (인스펙터뷰의 체크박스가 true가 될때 한번만 호출)
- 프로젝트에서의 사용 : UI의 경우 캔버스를 Director 로 만들어 하위단의 오브젝트들을 꺼주고 켜주는 식으로 관리를 하였는데 이때 오브젝트가 활성화 될때마다 초기화 되야 하는 경우 간간히 사용하였다.
- Start()
- Update 함수가 호출되기 전에 한번만 호출, 다른 스크립트들의 모든 Awake 가 실행된 뒤에 호출되며 스크립트가 활성화 되어있어야 호출됨
- 프로젝트에서의 사용 : 앞서 언급했듯이 init() 메서드를 만들어 실행주기를 관리하였으므로 자주 사용하지는 않음
- FixedUpdate()
- 주로 물리엔진을 사용하는 경우, 일정시간 간격으로 힘을 가할때 사용하는 함수이며 발생주기가 Update 함수에 비해 일정하다 (Default : 0.02초)
- 프로젝트에서의 사용 : 담당한 부분이 대부분 물리 효과를 사용하지 않는 부분이 많아 자주 사용하지는 않았지만 NPC 의 랜덤한 움직임을 구현할때 사용하였다.
- Update()
- 프레임마다 호출되는 함수, 보통 게임의 핵심 로직에 사용되며 스크립트가 활성화 되어있어야 하고 프레임마다 호출되기 때문에 프레임상태에 따라 (기종별로) 다르게 작동될수 있다.
- 프로젝트에서의 사용 : UniRx 인풋스트림을 사용하지 않는 스크립트들의 인풋을 받을때 사용하였으나 대부분의 스크립트에서는 코루틴을 주로 사용하였으므로 사용빈도가 많지 않았다, 특히 GameObject.Find 등의 성능이 좋지 않은 메서드들(하이어라키의 모든 오브젝트를 검사하는 등 연산량이 상대적으로 높은 기능들)의경우 최적화를 위해 가급적 Update 메서드 안에서는 사용하지 않았다.
- LateUpdate()
- 모든 Update 함수가 실행되고 나서 호출된다. 주로 카메라 이동 로직에서 사용
- 프로젝트에서의 사용 : 메인카메라 로직과 연출등을 작업할때 사용하였으며 플레이어의 움직임을 따라가며 중간중간 히트 연출등이 발생할때 코루틴과 섞어 사용
- OnDisable()
- 게임 오브젝트 또는 스크립트가 비활성화 되었을때 호출, Coroutine 사용시 오브젝트가 비활성화 되어 일시정지 되므로 주의
- 프로젝트에서의 사용 : 대부분의 UI 혹은 이벤트성 함수들은 함수의 연산이 끝나면 해당 게임 오브젝트를 비활성화 하게 만들었는데 이때 다음 이벤트 발생을 위한 초기화 용도로 사용.
- OnDestroy()
- Object.Destroy 또는 씬 종료 시 호출, Coroutine 사용시 오브젝트가 파괴되어 종료되므로 주의
- 프로젝트에서의 사용 : OnDisable 과 마찬가지로 초기화 용도로 사용하였으며 씬이 전환될때 실행중인 메서드 혹은 코루틴 등을 종료시키는 용도로 사용하였다.
- OnApplicationQuit()
- 응용프로그램 종료 전에 모든 오브젝트에서 호출, 에디터에서는 플레이 모드를 중지하거나 윈도우에서 다른 프로그램을실행시 발동된다.
- 프로젝트에서의 사용 : 해당 메서드는 안드로드나 iOS에서 앱을 종료시키지 않고 홈 화면으로 나가게 되면 자동으로 발동되는데 이를 이용해 Pause 기능
- Awake()
반응형
LIST
'유니티 엔진 클라이언트 > 개인공부' 카테고리의 다른 글
| 텍스쳐 - 쉐이더 코드 정리 (1) | 2023.12.22 |
|---|---|
| [유니티 프로젝트] ik 역 운동학을 적용한 좀비 서바이버 (0) | 2023.05.23 |
| [유니티] [유니티] Euler Angle (오일러 각) & Quaternion (쿼터니언) 정리 .2 - 메서드 (1) | 2023.03.05 |
| [유니티] Euler Angle (오일러 각) & Quaternion (쿼터니언) 정리 .1 (1) | 2023.03.01 |
| [유니티] 3D월드에서의 FPS 시점(1인칭) 움직임 구현 (0) | 2023.02.24 |