응용프로그램/유니티(Unity)

유니티(Unity) 시점함수

zelkova 2016. 7. 2. 17:10

<목차로 돌아가기>

 

  Unity의 시점함수

유니티C#에는 기본적으로 제공하는 기본함수, 시점함수, 일반함수가 있습니다.

이중에 시점함수는 특정 시점에 자동으로 실행되는 함수입니다.

 

시점함수의 그림과 같이 많~~이 있습니다.

이중에서 제일 자주 쓰는 함수는 아래와 같습니다.

 

start(), Update(), FixedUpdate(), OnEnable(), OnDisable(), 

OnTriggerEnter(), OnTriggerStay(), OnTriggerExit() 

 

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

 

 

Editor

스크립트가 연결되거나 재설정 될 때 Editor에서 reset이 호출됩니다.

Reset()

Reset은 개체가 처음 연결되었을 때 스크립트의 프로퍼티로 초기화하는 데 호출됩니다

Reset 명령을 실행했을 때도 마찬가지입니다.

 

Initialization

Awake()

이 함수는 항상 Start 함수의 이전 및 프리팹의 인스턴스화 직후에 호출됩니다.

만약 게임 오브젝트가 시작할 때 무효인 경우, 활성화되거나 연결된 하나의 스크립트 함수가 호출될 때까지, Awake는 호출되지 않습니다.

OnEnable()

Script가 부착된 오브젝트가 활성화되는(켜지는)순간마다, 실행 구문안의 내용을 한 번씩 실행시킨다.

Start()

Script가 시작되는 순간, 단 한 번 실행합니다.

구문 안의 내용을 한 번씩 실행시킨다.

 

Physics

FixedUpdate()

Fixed Timestep에 설정된 값에 따라 일정한 간격으로 호출됩니다

물리 효과가 적용된(Rigidbody) 오브젝트를 조정할 때 사용됩니다

Update는 불규칙한 호출임으로 물리엔진 충돌검사 등이 제대로 안될 수 있다

고정 된 시간 간격이 실제 프레임 업데이트 시간보다 작으면 물리주기가 프레임 당 두 번 이상 발생할 수 있습니다.

고정 된 시간 간격이 실제 프레임 업데이트 시간보다 프레임 속도가 높을 경우 프레임간에 호출 되지않고 넘길 수 있씁니다.

FixedUpdate() 직후에 모든 물리적 특성 계산 및 업데이트가 발생합니다.

프레임 속도와는 독립적으로 FixedUpdate()가 타이머에서 호출되기 때문에 이동 계산을 적용 할 때 Time.deltaTime 값을 곱할 필요는 없습니다.

Yield WaitForFixedUpdate

 Fixed Timestep에 설정된 값에 따라 일정한 간격으로 호출함.

Internal physics update

 

OnTriggerEnter()

Trigger 속성의 충돌체가 특정 오브젝트와 부딪친 순간, 실행 구문안의 내용을 한 번씩 실행시킨다.

OnTriggerStay()

Trigger 속성의 충돌체의 경우 충돌체를 가진 오브젝트가 계속 겹쳐있는동안, 매 프레임마다 실행 구문 안의 내용을 한 번씩 실행시킨다.

OnTriggerExit()

Trigger 속성의 충돌체의 경우 자신으로부터 특정 오브젝트가 자신의 충돌영역을 벗어나는 순간, 실행 구문 안의 내용을 한 번씩 실행시킨다

OnCollisionEnter

collision 속성의 충돌체가 특정 오브젝트와 부딪친 순간, 실행 구문안의 내용을 한 번씩 실행시킨다.

OnCollisionStay

collision 속성의 충돌체의 경우 충돌체를 가진 오브젝트가 계속 겹쳐있는동안, 매 프레임마다 실행 구문 안의 내용을 한 번씩 실행시킨다.

OnCollisionExit

collision 속성의 충돌체의 경우 자신으로부터 특정 오브젝트가 자신의 충돌영역을 벗어나는 순간, 실행 구문 안의 내용을 한 번씩 실행시킨다

 

Input events

OnMouseOver()

마우스가 객체 위에있는 동안 매 프레임마다 호출

OnMouseEnter()

마우스가 객체에 들어가는 순간 호출

OnMouseDown()

마우스가 객체를 왼쪽마우스 버튼을 누르는 순간 호출

OnMouseUp()

마우스가 객체를  왼쪽마우스 버튼을 올리는 순간 호출

OnMouseExit()

마우스가 객체에 나오는 순간 호출

OnMouseDrag()

마우스로 객체를 드래그하면 발동

 

Game logic

Update()

Script가 활성화되어있는 동안, 매프레임마다. 실행 구문 안의 내용을 한 번씩 실행시킨다.

하드웨어의 성능에 다라 시간당 도는 프레임수가 다르다

물리 효과가 적용되지 않은 오브젝트의 움직임이나 단순한 타이머, 키 입력을 받을 때 사용됩니다.

Yield null

코루틴은 다음 프레임에서 모든 Update 함수가 호출된 후에 속행합니다.

yield WaitForSeconds

프레임에 대한 모든 Update 함수가 호출된 후 지정된 시간 지연 후에 속행합니다.

yield WaitForFixedUpdate

모든 스크립트에서 모든 FixedUpdate 호출 후 속행합니다.

yield WWW

WWW 다운로드 완료 후 속행합니다.

yield StartCoroutine

코루틴을 연결하고 MyFunc 코루틴이 먼저 완료될 때까지 기다립니다.

Internal animation update

 

LateUpdate()

모든 Update 함수가 호출된 후, 마지막으로 호출됩니다

주로 오브젝트를 따라가게 설정한 카메라는 LateUpdate 를 사용합니다.

카메라가 따라가는 오브젝트가 Update함수 안에서 움직일 경우가 있기 때문

 

Scene rendering

OnWillRenderObject

오브젝트가 표시되면 각 카메라에 __ 한 번 __ 호출됩니다.

OnPreCull

카메라가 씬을 추려내기 전에 호출됩니다

컬링(Culling)하여 카메라에 어떤 오브젝트를 표시할 지가 결정됩니다

OnPreCull은 컬링이 발생하기 직전에 호출됩니다.

OnBecameVisible

오브젝트가 카메라에 표시되게 될 때 호출됩니다.

OnBecameInVisible

오브젝트가 카메라에 표시되지 않게 될 때 호출됩니다.

OnPreRender

카메라가 씬의 렌더링을 시작하기 전에 호출됩니다.

OnRenderObject

모든 씬 렌더링 종료 후에 호출됩니다

GL 클래스 또는 Graphics.DrawMeshNow을 사용하여 이 시점에 사용자 지정 지오메트리를 그릴 수 있습니다.

OnPostRender

카메라가 씬의 렌더링을 종료한 후 호출됩니다.

OnRenderImage

화면 렌더링이 완료되고, 화면 이미지 처리가 가능하게 된 후에 호출됩니다.

Gizmo rendering

OnDrawGizmos

시각화를 위한 씬 뷰에서 기즈모(Gizmos)를 그리는 데 사용됩니다.

GUI rendering

OnGUI

GUI 이벤트에 따라 프레임마다 여러 차례 호출됩니다

레이아웃 및 리페인트 이벤트가 먼저 처리된 후 레이아웃 및 키보드 / 마우스 이벤트가 각 입력 이벤트에 대해 처리됩니다.

 

End of frame

Yield WaitForEndOfFrame

프래임이 끝날때마다 호출

 

Pausing

OnApplicationPause

어플리케이션이 정지되었을 때

 

Disable/enable

OnDisable

Script가 부착된 오브젝트가 비활성화되는(꺼지는)순간마다, 실행구문 안의 내용을 한 번씩 실행시킨다.

 

Decommissioning

OnApplicationQuit

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

OnDisable

Script가 부착된 오브젝트가 비활성화되는(꺼지는)순간마다, 실행구문 안의 내용을 한 번씩 실행시킨다.

OnDestroy

오브젝트 생존기간의 마지막 프레임의 프레임 업데이트 후 OnDestroy가 호출됩니다

오브젝트는 Object.Destroy 또는 씬 종료시에 파기됩니다

 

 

참조

(서적)C# 초보자를 위한 유니티 게임게발 스타트업

https://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html

http://developug.blogspot.kr/2014/09/update-fixedupdate-lateupdate.html

 

반응형