유니티 - 이벤트 함수

krokrai·2026년 1월 14일

이벤트 함수

개요

  • 이벤트 함수란
  • 이벤트 함수 실행 순서
  • 이벤트 함수

이벤트 함수란

  • 이벤트 함수는 어떤 일이 일어났을 때 그에 따라 반응하는 함수입니다.
  • 예시로 OnDestory()의 경우 해당 Object(정확히는 Component)가 삭제(파괴)될 때 호출 되는 함수로 해당 Object가 파괴될 때 어떤 작업을 수행 시키고 싶다면 해당 작업을 함수 안에 기입합니다.
private void OnDestroy()
{
    Debug.Log(this.gameObject + "가 파괴되었습니다.");
}

Inspector

OnDestory

이벤트 함수 실행 순서

  • 자세한 흐름도는 유니트 공식자료에 기제되어 있습니다.
  • 대략적인 흐름은 (씬 진입) => (객체(object) 초기화) => (물리 처리) => (Input evnet) => (Game Logic) => (Scene -> Gizmo -> GUI Rendering) => (마지막 frame) => (pausing) => (해체) 순서입니다.
  • 이벤트 함수의 실행 순서를 알고 있어야 하는 이유는 Awake와 Start로 예시를 들 수 있습니다.
    • 실행 순서 상 Awake -> OnEnable -> Reset -> Start 순서가 됩니다.
    • Awake는 씬의 진입 시 무작위의 순서로 객체 당 1회 호출되며, 객체의 활성 상태의 관계 없이 호출 됩니다.
    • 그 후 순서대로 가게 되지만, 만약 어떤 객체를 참조 할려고 할때 start에 객체를 초기화 하는 함수나 Logic을 작성하게 된다면, 비활성화된 객체를 참조하게 된다면 문제가 발생합니다. 왜냐하면, start는 객체가 활성 상태가 된 후에 호출되기 때문입니다.
    • 즉, 해당 객체는 초기화 되지 않은 null에 가까운 객체를 참조 하는 것과 비슷하게 됩니다.
  • 이벤트 실행 순서는 게임의 설계를 할때 언제 호출 되는 지를 모를 경우, 원하는 방식대로 작동하지 않을 가능성이 높기 때문에 대략적인 순서 또는 자주 사용하는 이벤트 함수의 순서는 알고 있는 것이 좋습니다.
  • 후술할 이벤트 함수 외에도 많은 양의 이벤트 함수가 존재하며, 해당 이벤트 함수의 목적에 맞게 사용하는 것이 좋습니다.

이벤트 함수

Awake()

  • 객체가 생성(프리팹이 인스턴스화)된 후 호출되며, Obejct가 비활성 상태로 생성되었을 시 활성화 되기 전까지 호출 되지 않으며, 1회만 호출됩니다.

private void Awake()
{
	Debug.Log("객체의 Awake() 함수가 호출 되었습니다.");
}

OnEnable()

  • Awake() 이후 실행 되며, 객체가 활성 상태로 전환 될때 마다 1회 호출됩니다.
private void OnEnable()
{
	Debug.Log("객체가 활성 상태가 되어 OnEnable() 함수가 호출 되었습니다.");
}

Reset

  • Unity Editor 상에서만 호출 할 수 있는 함수로 해당 Component를 초기화하기 위해 호출합니다.
  • 해당 Component가 첫 연결될 때에도 호출됩니다.
    • Object를 생성될 때는 호출 되지 않습니다.

      Editor에서 Play 상태일때는 호출되지 않습니다.
      Reset

private void Reset()
{
    Debug.Log("Script의 Reset 함수를 호출하였습니다.");
}

Start

  • 해당 Awake() 이후 스크립트가 활성상태인 경우 1회만 호출되며, 첫 프레임 업데이트 전에 호출됩니다.
private void Start()
{
    Debug.Log("Start 함수가 호출되었습니다.");
}

FixedUpdate

  • 정해진 시간마다 호출되는 함수로 정해진 프레임 수가 아닌 정해진 시간을 기준으로 호출 되기 때문에 프레임 높은 환경에서는 호출 횟수가 낮을 수도 있으며, 프레임이 낮은 환경에서는 많이 호출 될 수 도 있습니다.
  • FixedUpdate는 모든 물리 계산은 FixedUpdate 이후에 계산 되기 때문에 물리(transform.addForce 등) 처리를 해야하는 경우 FixedUpdate에서 처리하는 것이 좋습니다.
private void FixedUpdate()
{
    Debug.Log("FiexedUpdatae 함수가 호출 되었습니다.");
}

Update

  • 매 프레임 마다 호출되며, 프레임 단위로 호출 또는 처리가 필요한 Logic 작성시 자주 사용됩니다.
private void Update()
{
	Debug.Log("Update가 호출되었습니다. ");
}

LateUpdate

  • 매 프레임의 마지막에 1회 호출되며, Update가 완전히 종료된 후에 호출됩니다.
private void LateUpdate()
{
	Debug.Log("Update가 끝난 후 LateUpdate가 호출 되었습니다. ");
}

OnDisable

  • 객체(객체의 경우 내부에 해당 Component가 있는 경우) 또는 해당 Component가 비활성화 된 경우 1회 호출됩니다.
private void OnDisable()
{
	Debug.Log("OnDisable이 호출 되었습니다.")
}

OnDestory

  • 객체가 삭제(파괴)된 경우 호출됩니다.
private void OnDestroy()
{
	Debug.Log("OnDestory가 호출되었습니다.")
}
profile
게임을 좋아하고 만들고 싶은 개발자 지망생입니다.

0개의 댓글