[유니티 기초]_4. 메시지와 이벤트 함수

0

유니티 엔진

목록 보기
4/21

메시지와 브로드캐스팅

메시지

메시지는 게임이 실행되면 하이얼아키 뷰의 게임 오브젝트들의
모든 컴포넌트들에게 전달되는 전달사항입니다.

모든 컴포넌트들은 Monobehaviour를 상속받고 있기 때문에 메시지를 감지할 수 있습니다.

브로드 캐스팅

브로드 캐스팅은 메시지를 뿌리는 방식을 뜻합니다.

  • 모든 컴포넌트들에게 메시지를 뿌리는 방식 => Broadcasting

예를 들어
유니티에서 Start 메시지를 하이얼아키 뷰의 모든 오브젝트들에게 뿌리면 스크립트 컴포넌트들이
자신이 Start 함수를 가지고 있는지 검사하고
Start 함수가 있다면 ‘내 얘기다!’ 하고 반응하여 메시지에 적힌 내용대로 실행합니다.

이런 메시지는 Start 함수를 가지고 있지 않은 다른 컴포넌트들에게도 전달되고,
그중에 Start 함수를 가진 컴포넌트들만 반응하는거죠.

  • 메시지를 보내는 쪽(엔진)은 누가 받는지 신경 쓰지 않고, 받는 쪽(이벤트 함수)은 누가 보냈는지 신경 쓰지 않는다.
  • 메시지에 명시된 기능을 가지고 있으면 실행하고 없으면 무시한다.

이런 브로드캐스팅 기능은 유니티 이벤트 함수가 동작하는 원리입니다.

이벤트 함수

유니티에는 개발자의 편의를 위해 미리 정의해둔 이벤트 함수가 존재합니다.

위 그림처럼 사정에 정의된 순서대로 매 프레임 마다 또는 특정 조건을 만족 할 때마다 자동으로 호출됩니다.
이벤트 함수는 호출되는 상황에 따라 다음과 같이 분류가 나뉘게됩니다.

초기화를 위한 이벤트 함수

호출 순서 : Awake() 👉 OnEnable() 👉 Start()

Awake()

  • 데이터를 초기화하는 목적으로 만들어진 이벤트 함수입니다.

  • 현재 씬에서 게임오브젝트가 활성화 되어 있을 때 1회 호출됩니다.

  • Awake() 메소드는 게임 오브젝트가 활성화 되어있다면,
    컴포넌트가 활성화 되어있지 않아도 호출됩니다.

OnEnable()

  • 데이터를 초기화하는 목적으로 만들어진 이벤트 함수입니다.

  • 컴포넌트가 활성화 될 때마다 1회씩 호출합니다.

    • 게임 최초 실행시 컴포넌트가 활성화 되어있다면, 따로 비활성화 후 활성화 하지않아도 실행됩니다.
  • OnEnable() 메소드는 게임 오브젝트와 컴포넌트가 모두 활성화 되었을때 호출됩니다.

Start()

  • 데이터를 초기화하는 목적으로 만들어진 이벤트 함수입니다.

  • 첫번째 프레임 업데이트가 실행 되기 직전에 1회 호출됩니다.

  • Start() 메소드는 게임 오브젝트와 컴포넌트가 모두 활성화 되었을때 호출됩니다.

업데이트를 위한 이벤트 함수

호출 순서 : FixedUpdate() 👉 Update() 👉 LateUpdate()

FixedUpdate()

  • 프레임의 영향을 받지 않고 정해진 횟수만큼 호출합니다.

  • 기본값은 0.02로 1초에 50번 호출합니다.

    • [Edit - Project Setting - Time]의 "Fixed Timestep"에서 호출 주기를 변경할 수 있습니다.
  • FixedUpdate() 메소드는 게임 오브젝트와 컴포넌트가 모두 활성화 되었을때 호출됩니다.

FixedUpdate()는 프레임에 영향을 받으면 안되는 로직을 구현할때 사용합니다.
예) 플레이어의 이동속도는 컴퓨터 성능에 영향을 받지않고 일정하게 움직여야함.

Update()

  • 현재 씬이 실행된 후 매 프레임마다 호출되는 이벤트 함수

  • Update() 메소드는 게임 오브젝트와 컴포넌트가 모두 활성화 되었을때 호출됩니다.

LateUpdate()

  • 현재 프레임에서 모든 게임 오브젝트의 Update()가 호출된 후 호출됩니다.

  • LateUpdate() 메소드는 게임 오브젝트와 컴포넌트가 모두 활성화 되었을때 호출됩니다.

LateUpdate()는 플레이어, 카메라 같이 서로 다른 오브젝트가 있을때
플레이어의 로직을 Update()에 구현하고, 카메라 로직을 LateUpdate()에 구현하여
카메라 방향은 타겟 오브젝트가 이동한 후에 조정해야 하기 때문에
카메라가 플레이어를 쫒아다니게 구현한다면 좋은 선택입니다.

해제를 위한 이벤트 함수

호출 순서 : OnApplicationQuit() 👉 OnDisable() 👉 OnDestroy()

OnApplicationQuit()

  • 게임이 종료될때 1회 호출됩니다.
    • 유니티 Editor에서는 플레이 모드를 중지할 때 호출됩니다.
  • OnApplicationQuit() 메소드는 게임 오브젝트가 활성화 되어있다면,
    컴포넌트가 활성화 되어있지 않아도 호출됩니다.

OnDisable()

  • 컴포넌트가 비활성화 될 때마다 1회씩 호출합니다.

    • 게임 최초 실행시 컴포넌트가 비활성화 되어있다면, 활성화 후 다시 비활성화 될때 실행됩니다.
  • 씬이 변경되거나 게임이 종료될 때도 오브젝트가 파괴되기 때문에 호출됩니다.

  • OnDisable() 메소드는 게임 오브젝트와 컴포넌트가 모두 활성화 되었을때 호출됩니다.

OnDestroy()

  • 게임 오브젝트가 파괴될 때 1회 호출됩니다.

  • 씬이 변경되거나 게임이 종료될 때도 오브젝트가 파괴되기 때문에 호출됩니다.

  • OnDestroy() 메소드는 게임 오브젝트가 활성화 되어있다면,
    컴포넌트가 활성화 되어있지 않아도 호출됩니다.

기즈모를 위한 이벤트 함수

OnDrawGizmos()

  • 유니티 Editor의 Scene View에만 출력되는 선,도형입니다.

  • 게임 제작 시 광선, 충돌 범위와 같이 눈에 보이지 않는 것을 확인할 때 사용되는 이벤트 함수입니다.

  • OnDrawGizmos()는 메소드는 게임 오브젝트가 활성화 되어있다면,
    컴포넌트가 활성화 되어있지 않아도 호출됩니다.

참고한 동영상
https://www.youtube.com/watch?v=Rp-47p88WHg

0개의 댓글