Unity의 핵심 기능 중 하나는 개발자가 게임 내 특정 작업이나 조건에 대한 응답으로 트리거할 수 있는 이벤트를 생성할 수 있는 이벤트 시스템입니다. 이러한 이벤트는 특정 이벤트에 대한 응답으로 엔진이 자동으로 호출하는 특수 메서드인 Unity 이벤트 함수에 의해 처리됩니다.
Unity 이벤트 함수는 Unity의 MonoBehaviour 클래스에 포함된 미리 정의된 메서드입니다. 이러한 메서드는 객체가 생성되거나 소멸될 때, 충돌이 발생할 때 또는 버튼이 눌릴 때와 같은 특정 이벤트에 대한 응답으로 엔진에 의해 자동으로 호출됩니다. 다양한 유형의 Unity 이벤트 함수가 있으며 각 함수는 특정 이벤트 또는 일련의 이벤트에 의해 트리거됩니다.
이벤트 함수 실행 순서 : Awake > OnEnable > Start > FixedUpdate > Update > LateUpdate > OnGUI > OnDisable > OnDestroy
private void Awake()
객체 생성 시 가장 먼저 호출되는 이벤트 함수
객체의 속성과 초기화하는 데 사용
Start 함수 전에 호출
private void Start()
객체가 활성화 된 경우에만 실행되며 첫 번째 프레임 업데이트 전에 호출
코루틴 실행 가능
컴포넌트가 활성화 되어있는 상태에서만 실행
Awake 와 Start 차이점
Awake
Start
코루틴 실행 불가
코루틴 실행 가능
Start 전에 실행
Awake 이후 실행
컴포넌트가 비활성화인 상태에서 실행 O
컴포넌트가 비활성화 상태라면 실행 X
private void OnEnable()
Awake() 함수 다음에 Start() 함수 전에 호출
객체가 활성화 될 때마다 실행됨 ( SetActive false - true 할 때마다 계속 호출)
위와 같은 특성으로 OnEnable 함수에서 이벤트 리스너 등록하는것이 좋음
private void Ondisable()
객체가 비활성화 될 때마다 실행
이벤트 리스너 해제할 때 사용
코루틴 중지할 때 사용
객체 상태를 정리하여 리소스 확보할 때 사용
private void Update()
프레임당 한 번씩 호출
플레이어의 입력을 처리하거나 객체의 위치 또는 회전을 업데이트하는 데 사용
프레임은 환경에 따라 달라지므로 물리 처리나 시간 관련된 처리를 할 때는 위 함수에서 처리하는것이 좋지 않다
TimeScale에 의존하지 않기에 Time.timeScale이 0일 때도 실행됨
private void FixedUpdate()
고정된 시간 간격으로 호출되는 이벤트 함수
물리 계산이나 시간이 지남에 따라 처리해야 하는 작업에 사용
Time.fixedDeltaTime의 시간 간격으로 실행. 기본값은 0.02f
private void LateUpdate()
Update 함수가 호출된 후에 호출되는 함수
보통 카메라 이동 또는 객체 추적같은 작업에 사용
private void OnCollisionEnter()
두 객체간에 충돌이 발생할 때 호출
트리거가 체크되지 않은 일반 콜라이더를 가진 오브젝트와 충돌한 경우 실행
충돌체, 충돌 지점, 충돌 표면의 법선 벡터등 물리적인 정보를 가지고 있음
물리 정보를 제공하므로 충돌하는 두 객체중 하나는 Rigidbody 컴포넌트를 가지고 있어야 함 ( IsKinematic은 disable )
플레이어가 적이나 장애물과 충돌할 때 플레이어의 체력을 처리하는 데 자주 사용
private void OnTriggerEnter()
Is Trigger가 체크된 콜라이더와 충돌하는 경우 발생
물리적인 충돌은 일어나지 않지만 충돌을 감지해야 하는 경우 사용
OnTriggerEnter는 충돌하는 순간, OnTriggerExit 충돌이 끝나는 순간, OnTriggerStay 충돌중인 동안 실행
두 객체중 하나 이상은 Rigidbody 컴포넌트를 가지고 있어야 하며 두 객체 모두 Collider 컴포넌트를 가지고 있어야 함