[Unity] Awake, OnEnable, Start, Update ...

JisuDeVelog·2024년 4월 2일
post-thumbnail

유니티는 사용자가 호출하지 않아도 호출되는 함수들이 있습니다.
그 함수들의 호출주기를 유니티 생명주기(LifeCycle)라고 부릅니다.
함수들의 호출시기는 사용자가 정할 수 없으므로 생명주기에 대해
이해하는 것은 유니티를 다루는데 필수입니다.

그중에서도 가장 많이 쓰이는 Awake, OnEnable, Start, Update 등에 대해 알아보겠습니다!

실행순서


Awake-> OnEnable -> Start -> Update

정의


Awake()

  • 스크립트가 활성화/비활성화 상관없이 오브젝트활성화 될 때 실행
  • 1번만 호출됩니다.
  • 코루틴화 할 수 없습니다.

Start()

  • 오브젝트와 스크립트가 둘다 활성화 될 때 실행
  • 1번만 호출됩니다.
  • 코루틴화 할 수 있습니다.

Update()

  • 오브젝트와 스크립트가 둘다 활성화 될 때 호출
  • 매 프레임마다 호출됩니다.
  • 매 프레임마다 변경 되어야할 부분이 있을 때 사용합니다.
  • 프레임마다 호출되기 때문에 간격이 다를 수 있습니다.

FixedUpdate()

  • Update함수와 거의 비슷하지만 호출 주기가 규칙적 입니다.
  • 주로 물리연산과 관련된 작업(Rigidbody ...)등에 사용하는 것을 권장합니다.

LateUpdate()

  • 모든 Update함수가 호출된 후, 마지막으로 호출
  • 주로 오브젝트를 따라가게 설정한 카메라 등에 사용하는 것을 권장합니다.

OnEnable()

  • 오브젝트와 스크립트가 둘다 활성화 될 때마다 매번 호출

OnDisable()

  • 오브젝트와 스크립트 둘중 하나라도 비활성화 될 때마다 매번 호출

💡Awake, OnEnable 실행 타이밍?


위에서 언급했듯 Awake-> OnEnable -> Start -> Update 순으로 실행되는 것은 맞습니다.

A스크립트와 B스크립트가 있을 때 실행되는 순서는

  • A,B Awake 실행 -> A,B OnEnable 실행 -> A,B Start 실행 -> A,B Update 실행 ...

될 것 같지만 실제로 실행 결과는

  • A Awake 실행 -> A OnEnable 실행 -> B Awake 실행 -> B OnEnable 실행 -> A,B Start 실행 -> A,B Update 실행 ...

위와같이 실행 됩니다.

그 이유는 어떤 스크립트에서 Awake가 실행 될 때 OnEnable도 같이 실행됩니다.
헷갈릴 수 있는 부분이라 기록으로 남겨놓습니다.

profile
읽기편한 포스트를 추구하는 개발자 입니다. 🧑‍💻               게시한 글들에 대해 관심을 갖고 읽어주셔서 감사합니다 :) 😸               블로그에 대한 피드백은 언제나 환영합니다! 🚀

0개의 댓글