Unity 오브젝트 생명주기 익히기

1. 초기화

 

1) Awake()

 

게임 오브젝트 생성할때 최초로 1번 실행되는 함수

 

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

public class LifeCycle : MonoBehaviour
{

    void Awake()
    {
        Debug.Log("플레이어 데이터가 준비되었습니다.");
    }
}

 

 

 

 

가장 먼저 실행되긴하네

 

2)Start()

 

업데이트 시작 직전, 최초 1번 실행

 

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

public class LifeCycle : MonoBehaviour
{

    void Awake()
    {
        Debug.Log("플레이어 데이터가 준비되었습니다.");
        
    }

    void Start()
    {
        Debug.Log("사냥 장비를 챙겼습니다.");
    }
}

 

 

 

 

 

2. 물리연산

 

1) FixedUpdate()

 

물리연산을 업데이트 하는 함수

 

보통 1초에 50번 작동

 

컴퓨터 사양에 관계없이 고정된 실행 주기로 CPU를 많이 사용함

 

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

public class LifeCycle : MonoBehaviour
{

    void Awake()
    {
        Debug.Log("플레이어 데이터가 준비되었습니다.");
        
    }

    void Start()
    {
        Debug.Log("사냥 장비를 챙겼습니다.");
    }

    void FixedUpdate()
    {
        Debug.Log("이동");
    }
}

 

 

 

 

 

 

실행해보면 고정된 주기로 이동이라는 메시지가 계속 출력되는

 

 

3. 게임로직

 

1) Update()

 

물리연산을 제외한 나머지 로직 중 주기적으로 변하는 로직

 

FixedUpdate와는 다르게 컴퓨터 사양에 따라 실행 주기가 달라질 수 있음

 

보통 60프레임으로 1초에 60번정도?

 

FixedUpdate보다 빠름

 

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

public class LifeCycle : MonoBehaviour
{

    void Awake()
    {
        Debug.Log("플레이어 데이터가 준비되었습니다.");
        
    }

    void Start()
    {
        Debug.Log("사냥 장비를 챙겼습니다.");
    }

    void FixedUpdate()
    {
        Debug.Log("이동");
    }

    void Update()
    {
        Debug.Log("몬스터 사냥");
    }
}

 

 

 

 

 

콘솔창 좌측 상단 Collapse 누르면 우측에 출력 횟수로 바꿔주는데

 

보면 Update가 출력 횟수가 더 많다

 

하지만 환경에 따라 달라질 수 있긴함

 

 

2) LateUpdate()

 

모든 업데이트 함수들이 끝난 후 실행되는 함수

 

특정 로직들의 후처리

 

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

public class LifeCycle : MonoBehaviour
{

    void Awake()
    {
        Debug.Log("플레이어 데이터가 준비되었습니다.");
        
    }

    void Start()
    {
        Debug.Log("사냥 장비를 챙겼습니다.");
    }

    void FixedUpdate()
    {
        Debug.Log("이동");
    }

    void Update()
    {
        Debug.Log("몬스터 사냥");
    }

    void LateUpdate()
    {

        Debug.Log("경험치 획득");
    }
}

 

 

 

 

 

보면 Update()와 동일한 숫자로 출력되고 있음

 

당연히 모든 업데이트가 끝나고 실행되는거니까 당

 

 

4. 해체

 

1) OnDestroy()

 

게임 오브젝트가 삭제되기 직전에 무언가 실행하는 함수

 

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

public class LifeCycle : MonoBehaviour
{

    void Awake()
    {
        Debug.Log("플레이어 데이터가 준비되었습니다.");
        
    }

    void Start()
    {
        Debug.Log("사냥 장비를 챙겼습니다.");
    }

    void FixedUpdate()
    {
        Debug.Log("이동");
    }

    void Update()
    {
        Debug.Log("몬스터 사냥");
    }

    void LateUpdate()
    {

        Debug.Log("경험치 획득");
    }

    void OnDestroy()
    {
        Debug.Log("플레이어 데이터를 해체하였습니다.");
    }
}

 

 

스크립트 실행하고 오브젝트를 삭제해본다

 

 

 

 

삭제하면 메시지가 출력

 

 

 

5. 활성화

 

초기화 단계와 물리연산 단계 사이에 위치

 

1) OnEnable()

 

게임 오브젝트가 활성화 되었을 때마다 실행

 

Awake()와 Start() 사이에 실행

 

    void Awake()
    {
        Debug.Log("플레이어 데이터가 준비되었습니다.");
        
    }
    void OnEnable()
    {
        Debug.Log("플레이어가 로그인했습니다.");
    }

    void Start()
    {
        Debug.Log("사냥 장비를 챙겼습니다.");
    }

 

 

 

 

 

6. 비활성화

 

모든 오브젝트가 업데이트 된 후, 즉 게임로직 단계와 오브젝트 해체 단계 사이에 위치

 

1) OnDisable()

 

게임 오브젝트가 비활성화 되었을 때마다 실행

 

LateUpdate()와 OnDestroy() 사이에

 

    void LateUpdate()
    {

        Debug.Log("경험치 획득");
    }

    void OnDisable()
    {
        Debug.Log("플레이어가 로그아웃하였습니다.");
    }

    void OnDestroy()
    {
        Debug.Log("플레이어 데이터를 해체하였습니다.");
    }

 

 

물체에 연결된 스크립트를 해제하면 로그아웃 하였습니다 뜨고

 

 

 

 

로그 클리어하고 나서 다시 켜보면 로그인했습니다 후에 업데이트 실행되는

 

 

 

오브젝트를 삭제하면...

 

TAGS.

Comments