[Unity] 3. 오브젝트의 생명주기와 관련 함수들
공부/Unity

[Unity] 3. 오브젝트의 생명주기와 관련 함수들

안녕하세요.

기계과 감성쟁이입니다.

 

더워죽겠네요;;;;;;;;;;;;;;;;;;;;;;

 

 

* 해당 영상을 참고했습니다.

 

1. 게임 오브젝트의 생명 주기 (Life Cycle)


게임 오브젝트의 생명 주기는

초기화 - (활성화) - 물리연산 - 게임로직 - (비활성화) - 해체 순으로 구성됩니다.

 

1) 초기화 - Awake(), Start()

2) 물리연산 - FixedUpdate()

3) 게임로직 - Update(), LateUpdate()

4) 해체 - OnDestroy()

 

활성화와 비활성화는 아래에서 설명합니다.

 

2. Awake()와 Start()


 

Awake() 함수는 제일 먼저, 1번 실행되는 함수이며,

모든 변수를 초기화, 즉 게임의 상태를 초기화합니다.

 

Start()한번만 실행되는 것은 같으나,

Update() 보다 빠르지만, Awake() 보다 늦게 실행되며

스크립트가 활성화 되어 있어야합니다.

 

즉, Awake - Start - Update 순으로 실행됩니다.

 

3. Update 계열 함수


 

Update 계열은 3가지로 나뉘는데,

 

Update, FixedUpdate, LateUpdate 가 있습니다.

 

1) Update()

  - 매 프레임마다 호출 및 실행됩니다.

    물리효과를 가지고 있지 않은 메소드들을 사용할 수 있습니다.

    PC환경마다 프레임이 달라지므로, 주기가 일정하지 않습니다.

 

2) FixedUpdate()

  - Fixed Timestep 로 정해진 일정 시간마다 호출 및 실행됩니다. CPU를 많이 사용합니다.

    물리연산과 관련된 것들에 주로 사용합니다. 예를 들면 Rigid body 을 움직일 때가 있겠습니다.

 

* Fixed Timestep 은 메뉴창의 Edit - Project Setting - Time 에서 조정할 수 있습니다.

  기본 설정은 0.02로, 약 50프레임입니다.

 

3) LateUpdate()

  - 다른 Update 계열 함수들이 모두 호출된 후, 실행됩니다.

    카메라, 또는 후처리에 주로 사용합니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class try2 : MonoBehaviour
{
void Awake()
    {
        Debug.Log("기상");
    }

void Start()
    {
        Debug.Log("등교");
    }

void FixedUpdate()
    {
        Debug.Log("어렵네");
    }

void Update()
    {
        Debug.Log("졸업 어떻게 하지?");
    }

void LateUpdate()
    {
        Debug.Log("5학년 해야겠다");
    }
}

 

위 코드의 출력물

 

오른쪽 숫자를 통해

반복적으로 실행되는 것을 확인할 수 있습니다.

 

4. OnDestroy() 와 OnEnable(), OnDisable()


1) OnDestroy() 의 내부에는 오브젝트가 삭제되기 바로 직전에 실행할 것들을 넣습니다.

    예를 들면, 몬스터가 죽을 때 처치되었다는 문구를 출력하거나 말이죠.

 

2) OnEnable() 은 게임 오브젝트를 활성화 하는 함수입니다.

    예를 들면, 플레이어 로그인이 있겠습니다.

    Awake와 Start 사이에 위치하며, 활성화 할 때마다 실행됩니다.

 

3) OnDisable() 은 게임 오브젝트를 비활성화 하는 함수입니다.

    예를 들면, 플레이어 로그아웃이 있습니다.

 

Enable 과 Disable 은 빨간 표시 부분을 체크/해제로 사용 가능합니다.

사실상 컴포넌트의 활성화/비활성화로 작동하는 함수에요.

 

5. 종합


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class try2 : MonoBehaviour
{
void Awake()
    {
        Debug.Log("출생");
    }

void OnEnable()
    {
        Debug.Log("기상");
    }

void Start()
    {
        Debug.Log("등교");
    }

void FixedUpdate()
    {
        Debug.Log("어렵네");
    }

void Update()
    {
        Debug.Log("졸업 어떻게 하지?");
    }

void LateUpdate()
    {
        Debug.Log("5학년 해야겠다");
    }

void OnDisable()
    {
        Debug.Log("숙면");
    }

void OnDestroy()
    {
        Debug.Log("자퇴");
    }

}

 

 

오브젝트를 삭제함으로써,

OnDestroy의 출력까지 완료되었습니다.

 


습식사우나에서

하루종일 살아가는 기분입니다.

 

사우나 문을 열 때의 상쾌함은

에어컨 앞에서나 느낄 수 있어요.

 

공자가 대구에서 태어났으면

더워죽겠는데 무슨 책을 쓰냐고 했을겁니다...

 

여튼 화이팅