상세 컨텐츠

본문 제목

[Unity] Unity 유니티 이벤트 프로세싱 과정, 메인 main function 관련

게임엔진관련/유니티 엔진

by AlrepondTech 2019. 3. 25. 16:06

본문

반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

 

출처: https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html

 

이벤트 함수의 실행 순서

 

Unity 스크립팅시, 미리 정의된 순서대로 실행되는 많은 이벤트 함수가 있습니다. 아래에서는, 실행 순서를 설명합니다.

에디터

  • __ Reset : __ Reset은 개체가 처음 연결되었을 때 스크립트의 프로퍼티로 초기화하는 데 호출됩니다. Reset 명령을 실행했을 때도 마찬가지입니다.

첫 번째 씬 로드

이 함수는 씬이 시작되면 호출됩니다(씬의 각 오브젝트에 대해 한 번).

  • __ Awake : __이 함수는 항상 Start 함수의 이전 및 프리팹의 인스턴스화 직후에 호출됩니다. (만약 게임 오브젝트가 시작할 때 무효인 경우, 활성화되거나 연결된 하나의 스크립트 함수가 호출될 때까지, Awake는 호출되지 않습니다.)
  • __ OnEnable : __ (오브젝트가 활성화된 경우에만 호출됩니다): 이 함수는 오브젝트를 활성화 한 직후에 호출됩니다. 이것은 MonoBehaviour 인스턴스가 생성될 때, 예를 들어 레벨 로드 또는 스크립트 컴포넌트에 연결된 게임 오브젝트가 인스턴스화 될 때 발생합니다.
  • OnLevelWasLoaded: This function is executed to inform the game that a new level has been loaded.

씬에 추가 된 오브젝트에서 모든 스크립트는 Start, Update 등기 기타 함수가 호출되기 전에 Awake와 OnEnable 함수가 호출되는 것에 주의하십시오. 당연히 오브젝트가 게임 플레이 중에 인스턴스화 되었을 때 강제로 호출할 수 없습니다.

첫 번째 프레임의 업데이트 전

  • __ Start : __ 스크립트의 인스턴스가 활성화되면 첫 번째 프레임의 업데이트 전에 Start가 호출됩니다.

씬에 추가된 오브젝트의 Start 함수는 모든 스크립트 Update 및 기타 함수가 호출되기 전에 호출됩니다. 당연히 오브젝트가 게임 플레이 중에 인스턴스화되었을 때 강제로 호출 할 수 없습니다.

프레임 사이

  • __ OnApplicationPause : __ 일반 프레임 업데이트 사이에서 pause가 탐지된 프레임의 끝에서 호출 됩니다. OnApplicationPause가 호출되면 추가 프레임이 발행되어, pause 상태를 나타내는 그래픽 인디케이터가 표시 됩니다.

업데이트 순서

게임 로직 인터랙션, 애니메이션, 카메라 위치 등을 추적하는 경우, 각종 이벤트를 사용할 수 있습니다. 일반적인 패턴은 Update() 함수 내에서 대부분의 작업을 수행하는 것입니다만, 다른 함수도 사용할 수 있습니다.

  • __ FixedUpdate : __ FixedUpdate()는 Update()보다 자주 호출되는 경우가 많습니다. 프레임 속도가 낮은 경우에는 프레임마다 여러 번 호출 할 수 있지만, 프레임 속도가 높을 경우 프레임간에 호출 할 수 없습니다. FixedUpdate() 직후에 모든 물리적 특성 계산 및 업데이트가 발생합니다. FixedUpdate()에서 이동 계산을 적용 할 때 Time.deltaTime 값을 곱할 필요는 없습니다. 이것은 프레임 속도와는 독립적으로 FixedUpdate()가 신뢰할 수있는 타이머에서 호출되기 때문 입니다.
  • __ Update : __ Update는 프레임마다 한 번씩 호출됩니다. 이것은 프레임의 업데이트에 대한 주요 기능입니다.
  • __ LateUpdate : __ LateUpdate()는 Update() 후 프레임마다 한 번씩 호출됩니다. Update()에서 수행되는 계산이 완료되면 LateUpdate() 함수가 시작 합니다. LateUpdate()의 일반적인 사용은 다음의 3인칭 카메라입니다. Update()에서 캐릭터를 이동하고 회전시킬 경우 LateUpdate()에서 카메라의 이동과 회전 계산을 수행할 수 있습니다. 이렇게하면 캐릭터가 카메라가 그 위치를 추적하기 전에 완전히 이동합니다.

렌더링

  • __ OnPreCull : __ 카메라가 씬을 추려내기 전에 호출됩니다. 컬링(Culling)하여 카메라에 어떤 오브젝트를 표시할 지가 결정됩니다. OnPreCull은 컬링이 발생하기 직전에 호출됩니다.
  • __ OnBecameVisible / OnBecameInvisible : __ 오브젝트가 카메라에 표시되거나 표시되지 않게 될 때 호출됩니다.
  • __ OnWillRenderObject : __ 오브젝트가 표시되면 각 카메라에 __ 한 번 __ 호출됩니다.
  • __ OnPreRender : __ 카메라가 씬의 렌더링을 시작하기 전에 호출됩니다.
  • __ OnRenderObject : __ 모든 씬 렌더링 종료 후에 호출됩니다. GL 클래스 또는 Graphics.DrawMeshNow을 사용하여 이 시점에 사용자 지정 지오메트리를 그릴 수 있습니다.
  • __ OnPostRender : __ 카메라가 씬의 렌더링을 종료한 후 호출됩니다.
  • __ OnRenderImage: __ 화면 렌더링이 완료되고, 화면 이미지 처리가 가능하게 된 후에 호출됩니다.
  • __ OnGUI : __ GUI 이벤트에 따라 프레임마다 여러 차례 호출됩니다. 레이아웃 및 리페인트 이벤트가 먼저 처리된 후 레이아웃 및 키보드 / 마우스 이벤트가 각 입력 이벤트에 대해 처리됩니다.
  • __ OnDrawGizmos__ 시각화를 위한 씬 뷰에서 기즈모(Gizmos)를 그리는 데 사용됩니다.

코루틴

일반적인 코루틴 업데이트는 Update 함수가 반환된 후 수행됩니다. 코루틴은 YieldInstruction이 종료할 때까지 그 실행(생성)을 중지할 수 있는 함수입니다. 코루틴의 다른 사용법은 아래와 같습니다.

  • __ yield__ 코루틴은 다음 프레임에서 모든 Update 함수가 호출된 후에 속행합니다.
  • __ yield WaitForSeconds__ 프레임에 대한 모든 Update 함수가 호출된 후 지정된 시간 지연 후에 속행합니다.
  • __ yield WaitForFixedUpdate__ 모든 스크립트에서 모든 FixedUpdate 호출 후 속행합니다.
  • __ yield WWW__ WWW 다운로드 완료 후 속행합니다.
  • __ yield StartCoroutine__ 코루틴을 연결하고 MyFunc 코루틴이 먼저 완료될 때까지 기다립니다.

오브젝트를 파기할 때

  • __ OnDestroy : __ 오브젝트 생존기간의 마지막 프레임의 프레임 업데이트 후 OnDestroy가 호출됩니다. (오브젝트는 Object.Destroy 또는 씬 종료시에 파기됩니다)

종료 시

이 함수는 씬 안에 있는 모든 활성 오브젝트에서 호출됩니다. :

  • __ OnApplicationQuit : __이 함수는 응용 프로그램 종료 전에 모든 게임 오브젝트에서 호출됩니다. 에디터에서는 사용자가 재생 모드를 중지하면 호출됩니다. 웹 플레이어에서는 웹 뷰가 닫힐 때 호출됩니다.
  • __ OnDisable : __이 함수는 동작이 비활성화 될 때 호출됩니다.

스크립트 라이프 사이클 플로우차트(Script Lifecycle Flowchart)

다음 그림은 스크립트의 유효기간 동안 이벤트 함수의 순서와 반복 처리를 정리 한 것입니다.

Note: Some browsers do not support SVG image files. If the image above does not display properly (for example, if you cannot see any text), please try another browser, such as Google Chrome or Mozilla Firefox.

 

 

 

=================================

=================================

=================================

 

 

 

출처: https://docs.unity3d.com/kr/530/ScriptReference/MonoBehaviour.Awake.html

 

Description

Awake는 스크립트 인스턴스가 로딩될 때 호출됩니다.

Awake는 게임이 시작되기 전에, 모든 변수와 게임의 상태를 초기화하기 위해서 호출됩니다. 스크립트 인스턴스가 종료될 때까지 한번만 호출됩니다. Awake는 모든 오브젝트가 초기화되고 호출되기 때문에, GameObject.FindWithTag를 이용해서 해당 게임 오브젝트를 요청하거나, 다른 오브젝트와 안전하게 연동해서 사용할 수 있습니다. 각 게임 오브젝트의 Awake함수는 오브젝트들 사이에서 임의의 순서로 호출됩니다. 따라서, 스크립트간의 참조를 설정하기 위해 Awake를 사용하고, 정보를 보내고 받는 경우에는 Start를 사용해야 합니다.

Awake는 모든 Start함수 앞에 호출됩니다. 따라서 스크립트의 초기화 순서를 정할 수 있습니다. Awake는 coroutine으로 동작하지 않습니다.

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour {     private GameObject target;     void Awake() {         target = GameObject.FindWithTag("Player");     } } 

C#과 Boo 사용자 주의: 컴포넌트의 순차적인 상태는 생성하는 시점에는 정의되지 않기 때문에, 초기화를 위해 생성자 대신에 Awake를 사용합니다.

 

 

=================================

=================================

=================================

 

 

 

반응형


관련글 더보기

댓글 영역