이벤트 함수의 실행 순

2022. 7. 7. 15:52Unity

유니티 메뉴얼 : https://docs.unity3d.com/kr/2021.3/Manual/index.html

 

Unity User Manual 2021.3 (LTS) - Unity 매뉴얼

Unity 에디터를 사용하여 2D 및 3D 게임, 앱 및 경험을 만들 수 있습니다. unity3d.com에서 에디터를 다운로드합니다.

docs.unity3d.com

참고 : https://ansohxxn.github.io/unitydocs/eventmethod/#%EC%9D%B4%EB%B2%A4%ED%8A%B8-%ED%95%A8%EC%88%98-%EC%8B%A4%ED%96%89-%EC%88%9C%EC%84%9C

 

● 컴포넌트 초기화 부분

 

스크립트가 붙은 해당 오브젝트가 처음으로 생성 되는 그 순간 and 오브젝트 활성화 상태일 때 최초로 1회 실행된다.

   ■  유니티가 Start 메세지를 브도르캐스팅 하여 뿌려 온 컴포넌트를 각자 구현된 Start 내용대로 초기화 시킨다.

   ■  유니티는 게임 시작할때 Start 메세지를 뿌린다.

Awake() 후 + Update() 전에 1회 동작하는 이벤트 함수다.

● 오브젝트가 최초 생성될  때 실행 순서

   Awake() --> OnEnable() --> Start()

 

함수 (Function) 스크립트(컴포넌트) 오브젝트
Awake 상관없음 활성화되있을때만/ 비활일떄는 실행안됨
OnEnable 활성화 되있을때마다 실행 활성화 되어 있을때
Start 활성화 되어있고 게임 시작시 한번 실행 활성화 되어 있을때

Start() 와 Awake() 와 OnEnable()의 차이점

■  둘다 오브젝트가 생성될 때 (스크립트가 최초로 실행될 떄) 최초 1회 실행된다는 점에서 같다.

■ 그러나

    ■ Awake() 

         ■ 코루틴 실행이 안된다. Start()보다 먼저  실행된다.

         ■ 스크립트 (컴포넌트)가 비활성화인 상태에서도 실행된다. 꺼져있었어도 실행 됨. 단 오브젝트가 활성화가 되있어야함

                ■ 오브젝트는 SetActive(true) 해야 하고 & 스크립트 this.enabled = false; 인 상태에선 호출된다는 얘기 !

                ■ 오브젝트 자체가 비활이면 Awake()도 실행 안된다.

    ■ Start()

         ■ 코루틴 실행이 가능하다.

         ■ 스크립트(컴포넌트)가 활성화 되어있는 상태에서만 실행된다.

 

    ■ OnEnable()

         ■ 해당 스크립트(컴포넌트)혹은 스크립트가 붙어있는 오브젝트가 활성화 될 때마다 자동으로 실행된다.

    ■ OnDisable()

         ■ 해당 스크립트(컴포넌트) 혹은 스크립트가 붙어있는 오브젝트가 비활성화 될 때마다 자동으로 실행된다.

    ■ OnDestroy()

         ■ 오브젝트를 없애주는 함수

 

■ OnEnable() 와의 차이점

         ■ OnEnable() 

                ■ 오브젝트가 '활성화'될 때마다 실행된다. (꺼졌다가 켜졌을 때 OR 오브젝트가 최초 생성될 때) Start()보다 먼저 실행된다 .

         ■ Start()

                 ■ 오브젝트가 최초 생성될 때 1회 실행

  • 이말은 즉, Awake는 오브젝트가 활성화되자마자 실행되고, 뒤이어 OnEnable과 Start는 스크립트(컴포넌트)가 활성화 되야 실행된다는 얘기다.

Void Update()

  • 1초에 수십번씩 자신의 상태를 갱신하고 주기적으로 계속 실행
  • 스스로 매 프레임마다 실행 됨.
  • 프레임 속도는 환경마다 다르기 떄문에 물리 처리를 update() 함수에서 해주면 환경 처리 오차가 발생할수 있어 비추천

void FixedUpdate()

디폴트로 0.02초(초당 50회)마다 실행된다.

  • Update()처럼 매번 반복 실행되나 프레임에 기반하지 않고 어떤 고정적이고 동일한 시간에 기반하여 실행된다.
  • FixedUpdate() 는 환경에 상관없이 무조건 실행 횟수를 지킨다. 정해진 수만큼 무조건 실행시킬 수 있다.물리 처리는 FixedUpdate() 안에서 해주는게 좋다. update와 달리 환경에 영향을 안받기 때문이다.
  • Time.fixedDeltaTime 의 시간 간격으로 실행이 된다 . 디폴트 == Time.fixedDeltaTime 값은 0.02f 다.

Updated와 FixedUpdate 차이점

 

Update는 매 프레임마다 반복이되고 FixedUpdate는 일정간격으로 업데이트를 해준다. FixedUpdate는 50번 간격이다.

 

void LateUpdate() <- 카메라가 캐릭터 따라가게할때 많이쓴다

유니티 함수로, 매 프레임마다 실행되지만 Update()함수 보다 늦게 실행된다.

Update() 함수 실행이 다 끝난 후에, Update()함수의 종료 시점에 맞춰서 LateUpdate() 가 실행된다.

 

따라서 반드시 플레이어의 위치와 회전값을 업데이트 하는 일은 📜PlayerController.cs 에서 먼저 이루어지고 난 후에 업데이트 된 플레이어의 위치와 회전 값을 가지고 카메라의 위치와 회전 값을 업데이트 해야 한다.