[Unity] 이벤트 함수

Kim Yuhyeon·2023년 4월 18일
0

게임개발

목록 보기
85/135
post-custom-banner

참고

[Unity Introduction] #10 유니티 이벤트 함수 (Unity Event Functions) - 고박사의 유니티 노트

유니티 이벤트 함수


개발자의 편의를 위해 미리 정의해둔 이벤트 함수가 존재
사전에 정의된 순서, 특정 조건을 만족할 때 자동으로 호출됨.

Unity - 이벤트 함수의 실행 순서

이벤트 함수 종류

호출되는 상황에 따라 분류가 나뉜다.

  • 씬이 처음 시작될 때
  • 에디터에서
  • 첫 번째 프레임 업데이트 전
  • 프레임 사이
  • 업데이트
  • 애니메이션 업데이트 루프
  • 렌더링
  • 코루틴
  • 오브젝트를 파괴할 때
  • 종료할 때

스크립트(클래스) 구성, 이벤트 함수 호출

MonoBehaviour Class

유니티에서 제공하는 클래스로
스크립트에 작성된 클래스를 게임오브젝트의 컴포넌트로 적용하고,
컴포넌트화 되었을 때 사용할 수 있는 여러 기능을 담고 있는 클래스

스크립트(클래스) 구성

  • 데이터 저장을 위한 변수
  • 이벤트 함수
  • 사용자 정의 함수

이벤트 함수 호출

초기화를 위한 이벤트 함수

  • Awake() : 씬이 시작될 때 1회 호출

  • Start() : 첫 번째 Update() 호출 직전 1회 호출

  • OnEnable() : 컴포넌트가 활성화될 때 마다 1회 호출

  • 호출 순서 : Awake -> OnEnable -> Start

Awake()

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

  • 현재 씬이 실행된 직후 1회 호출된다.

  • Awake() 메소드는 게임 오브젝트가 활성화 되어 있을 때 호출된다.

    • 컴포넌트(Awake() 메소드가 포함되어 있는)가 비활성화 되어 있어도 호출된다.

    • 게임 오브젝트가 비활성화 되어 있을 경우 게임 오브젝트가 활성화 되었을 떄 호출된다.

Start()

  • Awake() 메소드와 마찬가지고 초기화를 목적으로 만들어진 이벤트 메소드

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

    • 호출 순서 : Awake() -> Start()
  • Start() 메소드는 게임오브젝트, 컴포넌트가 활성화 되었을 때만 호출된다.

  • 코루틴 형태로 호출 가능
    private IEnumerator Start() { ... }

OnEnable()

  • 컴포넌트가 비활성화되었다가 다시 활성화 될 떄 마다 1회 호출된다.
    • 최초 호출 순서 : Awake() -> OnEnable() -> Start()
  • OnEnable() 메소드는 게임 오브젝트, 컴포넌트가 활성화 되었을 때만 호출된다.

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

  • Update() : 씬이 시작된 후 매 프레임 호출
  • LateUpdate() : 현재 씬의 모든 Update() 메소드 실행 직후 호출
  • FixedUpdate() : 1초에 정해진 횟수만큼 호출 (default : 1초 50회)

Update()

  • 현재 씬이 실행된 후 매 프레임마다 호출되는 이벤트 함수
  • Update() 메소드는 게임 오브젝트, 컴포넌트가 활성화 되었을 때만 호출된다.

LateUpdate()

  • 현재 프레임에서 모든 게임 오브젝트의 Update()가 호출된 후 호출
  • LateUpdate() 메소드는 게임 오브젝트, 컴포넌트가 활성화 되었을 때만 호출된다.

[Tip]
LateUpdate()의 경우
플레이어 캐릭터, 카메라와 같이 서로 다른 오브젝트가 존재할 때
플레이어 캐릭터를 쫓아다니는 카메라를 구현한다면?

플레이어 캐릭터가 Update()를 이용해 움직이고 난 후
카메라는 LateUpdate()에서 플레이어의 위치를 바탕으로 이동을 한다.

FixedUpdate()

  • 프레임의 영향을 받지 않고 정해진 횟수만큼 호출
  • 기본 값 : 0.02 (1초에 50회 호출)
    • Edit > Project Settings > Time > Fixed Timestep
      에서 호출 주기 설정 가능
  • FixedUpdate() 메소드는 게임 오브젝트, 컴포넌트가 활성화 되었을 때만 호출된다.

Update(), LateUpdate() 는 FPS의 영향을 받아 호출 횟수가 다르게 설정된다.
FixedUpdate()는 매 초마다 동일한 횟수만큼 호출된다.
Update(), LateUpdate()는 호출 횟수가 같고, FixedUpdate()는 다른 것을 확인할 수 있다.

해체를 위한 이벤트 함수

  • OnDestroy() : 게임 오브젝트가 파괴될 때 1회 호출
  • OnApplicationQuit() : 게임이 종료될 때 1회 호출
  • OnDisable() : 컴포넌트가 비활성화 될 때마다 1회 호출

OnDestroy()

  • 게임오브젝트가 파괴될 떄 1회 호출된다.

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

  • OnDestroy() 메소드는 게임 오브젝트가 활성화 되어 있을 때 호출된다.

    • 컴포넌트가 비활성화 되어 있어도 호출된다.

    • 게임 오브젝트가 비활성화 되어 있는 경우, 활성화 되었을 때 호출된다.

OnApplicationQuit()

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

    • 게임 오브젝트가 비활성화 되어 있는 경우, 활성화 되었을 때 호출된다.

[Tip]
씬이 종료될 때 모든 오브젝트 메모리를 삭제하기 때문에 OnDestroy()가 호출된다.

OnDisable()

  • 컴포넌트가 비활성화 될 때마다 1회 호출된다.
  • OnDisable() 메소드는 게임 오브젝트, 컴포넌트가 활성화 되었을 때만 호출된다.

기즈모를 위한 이벤트 함수

OnDrawGizmos()

  • 유니티 에디터의 씬 뷰에만 출력되는 선, 도형

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

  • OnDrawGizmos() 메소드는 게임 오브젝트가 활성화 되어 있을 때 호출된다.

    • 컴포넌트가 비활성화 되어 있어도 호출된다.

    • 게임 오브젝트가 비활성화 되어 있는 경우, 활성화 되었을 때 호출된다.

Gizmos() 클래스는 OnDrawGizmos() 메소드 내부에서만 제대로 작동

[Tip]
개발자 확인용으로 Scene View에만 보이고 Game View에는 보이지 않는다.

Game View 오른쪽 상단의 Gizmos를 활성화하면 보인다.

post-custom-banner

0개의 댓글