프로그래밍 농장

Monobehavior / Awake()와 OnEnable(), Start(), Update() [ Unity ] 본문

Unity

Monobehavior / Awake()와 OnEnable(), Start(), Update() [ Unity ]

Tennessee201 2022. 7. 4.
728x90

 

- Monobehavior : 유니티에서 가장 기본이 되는 클래스이며, Gameobject 를 사용하기 위해서는 꼭 클래스에 상속시켜주어야한다. -> Monobehavior가 없다면, 유니티상의 Gameobject에 컴포넌트와 같은 것을 붙히지 못한다. 


유니티에서도 안드로이드와 같이 생명주기가 존재한다. 생명주기(LifeCycle)이란, 유니티 내부에서 알아서 프로젝트 시작부터 종료까지 진행하는 흐름이다.

즉, 사용자가 직접 만들지 않아도 프로젝트가 실행되면 자동으로 호출되는 메소드를 뜻한다. 

이와 같은 메소드는 호출 순서에 따라 크게 아래와 같이 4가지가 존재한다. 

Awake() -> Start() -> Update() -> onDestroy() 

 

유니티는 크게 위의 4가지로 구분되어 동작하며, 세부적으로는 Awake(), onEnable() (=setactive) ,  Update() 이후에는 Trigger, Collision과 같은 물리함수를 동작시키는 형식으로 구성되어 있다. 


1. Awake() 

- 스크립트가 실행될 때 단 한번만 호출된다.

- 모든 오브젝트가 초기화된 후에 호출되기 때문에 GameObject.Find, GameObject.FindWithTag 등의 명령어들을 

   안전하게 사용할 수 있다.

- Awake 함수는 항상 Start() 함수 이전에 호출되므로 초기화 순서를 정할 수 있게 된다.

- 코루틴(Coroutine) 사용이 불가능하다.

2. OnEnable()

- 인스펙터뷰에서 게임오브젝트를 활성화/비활성화를 체크한다. 즉, 체크(활성화) 되었을 때 호출된다.

- 만약, 게임오브젝트를 껐다가 다시 켜면, Start()는 불리지 않으므로 작동이 되지 않는다.

- 활성화/비활성화를 사용하고자할 때, 이 함수에 활성화되었을 때 일어날 코드를 넣는다.

3. Start()

- Update() 함수가 호출되기 전에 한번만 호출된다.

- 다른 스크립트의 모든 Awake()가 실행이 끝난 이후에 실행된다.

- 스크립트가 활성화되어 있어야만 호출되어 실행된다.

4. Update()

- 매 프레임마다 호출되는 함수이며, 게임 로직에 핵심적으로 사용된다.

- 스크립트가 활성화 되어있어야 사용이 가능하다.

- 일시적으로 사용하지 않으면 불필요하게 성능저하 발생 가능성이 커진다.

 

728x90