+ 이 글은 작성자가 직접 공부하고 복습하며 작성한 글입니다. 만약 직접 작성하지 않았다면, 꼭 출처를 밝히겠습니다!

 + 이 글은 개인적인 공부를 바탕으로 작성되었기에, 틀린 부분이 있을 수 있으며, 틀린 부분이 있다면 알려주시면 감사하겠습니다!

 + 이 글을 다른 곳으로 가져가신다면, 꼭 출처를 남겨주세요~

 + '참고사이트'는 공부하기 위해 참고한 사이트들을 모아 둔 것입니다.


 Unity Engine을 사용할 때, 가장 필수적으로 알아둬야 할 것이 Frame 당 어떤 함수들이 실행되며, 어떤 순서로 실행되는지 알아줘야 하는 것입니다.


 공식적으로 Unity Docments에 나와있지만, 실제로 사용해보기 전까지 몸에 와닿지 않죠. 그래서 직접 사용해 보면서 느꼈던 점을 기록으로 남깁니다. 훗날 다시 까먹을 저를 위해서도 말이죠...


[Awake]

 + Object가 생성되었을 때, 실행되는 함수


[OnEnable]

 + Object가 활성화되었을 때, 실행되는 함수

 + Object Pool을 사용하기위해 주로 사용하는 함수로, Pool에 생성 시, 활성화된 상태로 생성이 되면, 생성 -> PushPool -> PopPool 작업으로 OnEnable 함수가 2번 실행된다. 생성되었을 때 1번, PopPool할 때 1번. 이를 방지하고싶다면, Prefab단계에서 비활성화를 시킨 다음 생성하면 PopPool 때, 1번만 실행된다.


[Start]

 + 해당 Script가 실행될 때, 딱 한 번 실행되는 함수


[FixedUpdate]

 + Fixed Timestep에 설정된 값에따라 일정한 간격으로 호출된다. 특히, 물리 효과가 적용된(Rigidbody & Collider) 스크립트를 조정할 때 사용됩니다.

   - 왜냐하면, 물리 계싼 및 업데이트는 FixedUpdate다음에 즉시 발생하기 때문!)

 + Update는 단순히 Frame마다 실행되는 함수로 불규칙해서 물리엔진 충돌 검사 등이 제대로 안될 수 있습니다.

 + 프레임이 낮은 경우, 한 프레임마다 여러번 실행될 수 있습니다. 

 + 움직임 계산을 적용할 때, Time.deltaTime을 곱하지 않아도 됩니다. 왜냐하면, Update와는 달리 프레임속도와 관계없이 신뢰할 수 있는 타이머에서 호출되기 때문입니다.


[Update]

 + 해당 스크립트가 Enable 상태일 때, 매 frame마다 실행되는 함수.

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


[LastUpdate]

 + Update가 끝나고나서 실행되는 함수.

 + Update에서 꼭 처리되고나서 실행이 되어야 하는 함수가 있다면, 이 부분에서 작성하시면 됩니다.

 + 대표적으로 3인칭 카메라 이동에 사용되는데, 카메라로 캐릭터를 추적하기 위해서는 이전에 캐릭터가 완전히 다 움직여야 하기 때문입니다.


[OnDestroy]

 + Object가 Destroy될 때, 실행되는 함수

 + 만약 Collider 처리 중, Destroy하게되면, Collider Exit도 실행이 된다. 왜냐하면 Destroy가 되서 더 이상 Collider 처리 범주를 벗어났다고 생각하기 때문!

ex) 슈팅게임에서 화면 전체를 덮는 Collider를 두고 그 범위를 벗어나면 Collider Exit에서 PushPool해주려고했으나, 중간에 Destroy하게되면 Collider Exit가 실행되어 이미 파괴된 null object를 Push한다.




[Unity 공식 문서 Flow chart]



+ Recent posts