Back Ground

[MonoBehaviour] LifeCycle 본문

Unity/Unity Engine

[MonoBehaviour] LifeCycle

Back 2021. 3. 20. 16:13

MonoBehaviour

MonoBehaviour는 모든 스크립트가 명시적으로 상속받는 기본 클래스

 

LifeCycle함수가 갖고 있다. (Start(), Awake(), Update(), FixedUpdate(), 와 OnGUI().. 등 )

그 밖에도 Unity엔진 제어할 여러 함수를 갖고 있다.

 

[참고 문서] 링크

 

 

LifeCycle (생명주기)

Scene에서 살아가는 일정한 흐름이 있다.

엔진에서 자동으로 호출해주는 함수들인데 이 패턴의 흐름을 모아 '생명 주기(Life cycle)'라고 한다.

 

아래 그림을 보면 어떤 생명주기를 갖고 있는지 알 수 있다.

출처 : http://egloos.zum.com/metashower/v/9656922

 

  • 첫 'Awake', 'OnEnable', 'Start'함수는 객체가 생성될 때 1회 호출되는 함수다.
  • 단, OnEnable은 스크립트에서 객체를 활성화/비활성화시킬 경우가 있는데 객체가 활성화 되었을 때마다 호출되는 함수이다.
  • Update는 3가지 종류가 있다. 'FixedUpdate', 'Update', 'LastUpdate'다.
    • 가장 기본적인것이 Update로 매 프레임 마다 실행된다. 일반적으로 유니티를 처음 시작했다면 이 부분에서 거의 모든 로직을 처리할 것이다.
    • 그 뒤에 있는 LastUpdate가 바로 Update다음으로 실행된다. Update에서의 결과가 전부 반영된 뒤 작업하고 싶다면 LastUpdate에서 작업하는 것이 맞을 것이다. (ex. 카메라 이동 처리)
    • FixedUpdate는 고정된 프레임 주기로 호출되는 함수들이다. Update는 디바이스의 성능이나 게임의 최적화 상황에 따라 framerate가 변하게 되는데 이렇게 되면 프레임 사이사이의 시간 간격이 다르게 적용된다. 이렇게 되면 물리적인 계산이 필요할 때 상당한 오차가 발생할 수 있다. 그래서 시간 간격이 고정된 FixedUpdate에서 처리해주는 것이 좋다.
  • 이렇게 미리 생명 주기를 파악하고 내가 원하는 동작이 어느 동작이 보장되고나서 실행되는지 알고 있어야 게임에 적합한 프로그래밍을   있다.

 

 

실제 어떻게 동작하는지 직접 코드로 입력해서 알아보았다.

public class NewBehaviourScript : MonoBehaviour {
 
    float cnt=0;
 
    void Reset(){  
        Debug.Log("Reset");
    }
    void Awake(){
        Debug.Log("Awake");
    }
    void OnEnable(){
        Debug.Log("OnEnable");
    }
    void Start(){
        Debug.Log("start");
    }
    void FixedUpdate(){
        Debug.Log("FixedUpdate");
    }
    void Update (){
        Debug.Log("Update");
        if ((cnt+=Time.deltaTime) >1.0f) Destroy(this.gameObject);
    }
    void LateUpdate(){
        Debug.Log("LastUpdate");
    }
    void OnWillRenderObject(){
        Debug.Log("OnWillRenderObject");
    }
    void OnGUI(){
        Debug.Log("OnGUI");
    }
    void OnDisable(){
        Debug.Log("OnDisable");
    }
    void OnDestroy(){
        Debug.Log("OnDestroy");
    }
}

 

[결과] - 실행 순서 주목

 

[Script 컴포넌트를 추가했을때]

[게임 실행 후]

 

'Unity > Unity Engine' 카테고리의 다른 글

Unity - Vector란  (0) 2021.05.05
Unity - Vector3 Class를 사용하여 이동  (0) 2021.05.05
[Sprite] Filter Mode  (0) 2021.03.19
[Sprite] Pixels Per Unit (PPU)  (0) 2021.03.19
[Sprtie] Sprite Mode  (0) 2021.03.19
Comments