๋ฐ˜์‘ํ˜•

๐ŸŒ€ Unity MonoBehaviour ์ƒ๋ช…์ฃผ๊ธฐ (Lifecycle) ์ •๋ฆฌ

Unity๋Š” MonoBehaviour ๊ธฐ๋ฐ˜์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ผ์ •ํ•œ ์ˆœ์„œ๋กœ ํ˜ธ์ถœํ•˜๋ฉฐ, ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ํ๋ฆ„์ด๋‹ค.

 

๐Ÿ”น 1. ์ดˆ๊ธฐํ™” (Initialization)

์ด๋ฒคํŠธ ํ•จ์ˆ˜์„ค๋ช…
Awake() ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋œ ์งํ›„ ํ˜ธ์ถœ. ์Šคํฌ๋ฆฝํŠธ ๊ฐ„ ์ฐธ์กฐ ์—ฐ๊ฒฐ์— ์ž์ฃผ ์‚ฌ์šฉ. Start()๋ณด๋‹ค ๋จผ์ € ํ˜ธ์ถœ๋จ.
OnEnable() ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ผœ์ง€๊ฑฐ๋‚˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ํ˜ธ์ถœ๋จ.
Reset() ์—๋””ํ„ฐ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ž๋™ ํ˜ธ์ถœ๋จ. ๊ธฐ๋ณธ๊ฐ’ ์ดˆ๊ธฐํ™” ๋ชฉ์ .
Start() ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์ผ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„ ์ „์— ๋‹จ ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋จ.

 

- Awake: ์ด ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ Start ํ•จ์ˆ˜ ์ „์— ํ˜ธ์ถœ๋˜๋ฉฐ ํ”„๋ฆฌํŒน์ด ์ธ์Šคํ„ด์Šคํ™” ๋œ ์งํ›„์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ ๋น„ํ™œ์„ฑ ์ƒํƒœ์ธ ๊ฒฝ์šฐ Awake ํ•จ์ˆ˜๋Š” ํ™œ์„ฑํ™”๋  ๋•Œ๊นŒ์ง€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


- OnEnable: (์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ์—๋งŒ): ์˜ค๋ธŒ์ ํŠธ ํ™œ์„ฑํ™” ์งํ›„ ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ๋ฒจ์ด ๋กœ๋“œ๋˜๊ฑฐ๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•œ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋  ๋•Œ์™€ ๊ฐ™์ด MonoBehaviour๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

- Start: ์Šคํฌ๋ฆฝํŠธ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ์—๋งŒ ์ฒซ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„ ์—…๋ฐ์ดํŠธ ์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 2. ๋ฌผ๋ฆฌ ์—…๋ฐ์ดํŠธ (Physics)

์ด๋ฒคํŠธ ํ•จ์ˆ˜์„ค๋ช…
FixedUpdate() ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฌผ๋ฆฌ ์—…๋ฐ์ดํŠธ. Rigidbody ๋ฌผ๋ฆฌ ๊ณ„์‚ฐ ์‹œ ์—ฌ๊ธฐ์— ๊ตฌํ˜„.
OnTriggerEnter/Stay/Exit() ํŠธ๋ฆฌ๊ฑฐ ์ถฉ๋Œ ๊ฐ์ง€ ์ด๋ฒคํŠธ
OnCollisionEnter/Stay/Exit() ์ผ๋ฐ˜ ์ถฉ๋Œ ๊ฐ์ง€ ์ด๋ฒคํŠธ

 

Unity - Update(), FixedUpdate(), LateUpdate()

โœ… Unity์˜ 3๊ฐ€์ง€ ์ฃผ์š” ๋ฃจํ”„ ํ•จ์ˆ˜ํ•จ์ˆ˜ ์ด๋ฆ„์‹คํ–‰ ์ฃผ๊ธฐ์šฉ๋„ํŠน์ง•Update()๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค์‚ฌ์šฉ์ž ์ž…๋ ฅ, ์ผ๋ฐ˜ ๋กœ์งํ”„๋ ˆ์ž„ ์†๋„์— ๋”ฐ๋ผ ์‹คํ–‰ ๋นˆ๋„ ๋‹ฌ๋ผ์ง (๊ฐ€๋ณ€)FixedUpdate()๊ณ ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ๋งˆ๋‹ค๋ฌผ๋ฆฌ ์—ฐ์‚ฐ (Rigidb

dev-jen.tistory.com

- FixedUpdate: FixedUpdate ๋Š” ์ข…์ข… Update ๋ณด๋‹ค ๋” ์ž์ฃผ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„ ์†๋„๊ฐ€ ๋‚ฎ์€ ๊ฒฝ์šฐ ํ”„๋ ˆ์ž„๋‹น ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋ ˆ์ž„ ์†๋„๊ฐ€ ๋†’์€ ๊ฒฝ์šฐ ํ”„๋ ˆ์ž„ ์‚ฌ์ด์— ํ˜ธ์ถœ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฌผ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ ์—…๋ฐ์ดํŠธ๋Š” FixedUpdate ํ›„ ์ฆ‰์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. FixedUpdate ์˜ ์›€์ง์ž„ ๊ณ„์‚ฐ์„ ์ ์šฉํ•  ๋•Œ Time.deltaTime ๋งŒํผ ๊ฐ’์„ ๊ณฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. FixedUpdate ๊ฐ€ ํ”„๋ ˆ์ž„ ์†๋„์™€ ๊ด€๊ณ„์—†์ด ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ํƒ€์ด๋จธ์—์„œ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

- Update: Update ๋Š” ํ”„๋ ˆ์ž„๋‹น ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์ฃผ์š” ์ž‘์—… ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

- LateUpdate: LateUpdate ๋Š” Update ๊ฐ€ ๋๋‚œ ํ›„ ํ”„๋ ˆ์ž„๋‹น ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. Update ์—์„œ ์ˆ˜ํ–‰๋œ ๋ชจ๋“  ๊ณ„์‚ฐ์€ LateUpdate ๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. LateUpdate ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ์˜ 3์ธ์นญ ์นด๋ฉ”๋ผ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ๋ฅผ ์›€์ง์ด๊ณ  Update ๋กœ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๊ฒŒ ํ•˜๋Š” ๊ฒฝ์šฐ LateUpdate ์—์„œ ๋ชจ๋“  ์นด๋ฉ”๋ผ ์›€์ง์ž„๊ณผ ๋กœํ…Œ์ด์…˜ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์นด๋ฉ”๋ผ๊ฐ€ ํฌ์ง€์…˜์„ ์ถ”์ ํ•˜๊ธฐ ์ „์— ์บ๋ฆญํ„ฐ๊ฐ€ ์™„์ „ํžˆ ์›€์ง์˜€๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


๐Ÿ”น 3. ์ž…๋ ฅ ๋ฐ ๊ฒŒ์ž„ ๋กœ์ง (Input & Game Logic)

์ด๋ฒคํŠธ ํ•จ์ˆ˜์„ค๋ช…
Update() ํ”„๋ ˆ์ž„๋งˆ๋‹ค ํ•œ ๋ฒˆ ํ˜ธ์ถœ. ๊ฒŒ์ž„ ๋กœ์ง์˜ ์ค‘์‹ฌ ํ•จ์ˆ˜
LateUpdate() Update()๊ฐ€ ๋๋‚œ ์งํ›„ ํ˜ธ์ถœ. ์ฃผ๋กœ ์นด๋ฉ”๋ผ ์ถ”์  ์ฒ˜๋ฆฌ ๋“ฑ์— ์‚ฌ์šฉ
OnMouseDown/Up/Drag() ๋งˆ์šฐ์Šค ๊ด€๋ จ ์ด๋ฒคํŠธ ๊ฐ์ง€

๐Ÿ”น 4. ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ด€๋ จ (Animation)

์ด๋ฒคํŠธ ํ•จ์ˆ˜์„ค๋ช…
OnAnimatorMove() ๋ฃจํŠธ ๋ชจ์…˜ ์ œ์–ด์šฉ ํ•จ์ˆ˜
OnAnimatorIK() IK(์—ญ์šด๋™ํ•™) ์ฒ˜๋ฆฌ์šฉ ํ•จ์ˆ˜
StateMachineBehaviour ์ฝœ๋ฐฑ๋“ค OnStateEnter, OnStateExit, OnStateUpdate, OnStateIK, OnStateMove ๋“ฑ
๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค State Machine Update, ProcessGraph, ProcessAnimation, WriteTransform, WriteProperties ๋“ฑ

๐Ÿ”น 5. ๋ Œ๋”๋ง ์ „/ํ›„ ์ฒ˜๋ฆฌ (Rendering)

์ด๋ฒคํŠธ ํ•จ์ˆ˜์„ค๋ช…
OnPreCull() ์นด๋ฉ”๋ผ๊ฐ€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ปฌ๋งํ•˜๊ธฐ ์ „ ํ˜ธ์ถœ
OnBecameVisible/Invisible() ์นด๋ฉ”๋ผ ์‹œ์•ผ์— ๋“ค์–ด์˜ค๊ฑฐ๋‚˜ ๋‚˜๊ฐˆ ๋•Œ ํ˜ธ์ถœ
OnWillRenderObject() ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์นด๋ฉ”๋ผ์— ์˜ํ•ด ๋ Œ๋”๋ง๋  ๋•Œ ํ˜ธ์ถœ
OnPreRender() / OnPostRender() ์นด๋ฉ”๋ผ ๋ Œ๋”๋ง ์ „/ํ›„ ํ˜ธ์ถœ
OnRenderImage() ํฌ์ŠคํŠธ ํ”„๋กœ์„ธ์‹ฑ์— ์‚ฌ์šฉ
OnRenderObject() GL์ด๋‚˜ Graphics API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ๋•Œ
OnDrawGizmos() ์—๋””ํ„ฐ์—์„œ Gizmo๋ฅผ ๊ทธ๋ฆด ๋•Œ
OnGUI() GUI๋ฅผ ๊ทธ๋ฆด ๋•Œ. ํ”„๋ ˆ์ž„๋‹น ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋จ

๐Ÿ”น 6. ์ฝ”๋ฃจํ‹ด (Coroutine)

์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
yield return null ๋‹ค์Œ ํ”„๋ ˆ์ž„๊นŒ์ง€ ๋Œ€๊ธฐ
yield return new WaitForSeconds(x) x์ดˆ๊ฐ„ ๋Œ€๊ธฐ
yield return new WaitForFixedUpdate() ๋‹ค์Œ FixedUpdate ์ดํ›„ ์‹คํ–‰
yield return StartCoroutine() ๋‹ค๋ฅธ ์ฝ”๋ฃจํ‹ด์„ ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ

๐Ÿ”น 7. ์ข…๋ฃŒ ๋ฐ ๋น„ํ™œ์„ฑํ™” (Decommissioning)

์ด๋ฒคํŠธ ํ•จ์ˆ˜ ์„ค๋ช…
OnApplicationPause() ์•ฑ์ด ์ผ์‹œ์ •์ง€ ๋  ๋•Œ ํ˜ธ์ถœ
OnApplicationQuit() ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœ
OnDisable() ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋  ๋•Œ ํ˜ธ์ถœ
OnDestroy() ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ ์”ฌ์ด ์ข…๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœ๋จ

โœ… ์š”์•ฝ: ์ฃผ์š” ์ˆœ์„œ ํ๋ฆ„

  1. Awake → OnEnable → Start
  2. FixedUpdate → Update → LateUpdate
  3. (ํ•„์š” ์‹œ) Trigger/Collision → Animator ๊ด€๋ จ → Rendering → Coroutine ์žฌ๊ฐœ
  4. OnDisable → OnDestroy → OnApplicationQuit

 

 

์›๋ž˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ..๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด์˜ ํ•จ์ˆ˜๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์•˜๋‹ค..ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด๋ณด๋ฉด์„œ ๋А๊ผˆ์ง€๋งŒ ์•„์ง๋„ ๊ณต๋ถ€ํ• ๊ฒŒ ์‚ฐ๋”๋ฏธ ์ธ๊ฑฐ๊ฐ™๋‹คใ…Žใ…Ž..

๋ฐ˜์‘ํ˜•