이벤트 함수
Event functions are a set of built-in callbacks which you can implement on your MonoBehaviour-derived scripts to respond to core Engine events related to physics, rendering, input, scene loading, and object lifecycles.
읽는 시간 3분최근 업데이트: 한 달 전
이벤트 함수는 모든 MonoBehaviour 스크립트 컴포넌트가 수신할 가능성이 있는 사전 정의된 콜백 세트입니다. 콜백은 다음과 같은 다양한 Unity 에디터 및 엔진 이벤트에 의해 트리거됩니다.
- 정기적인 프레임 및 물리 업데이트
- 오브젝트 수명 주기 이벤트(예: 씬의 오브젝트 초기화 및 파괴)
- UI 이벤트
- 물리 이벤트
게임 오브젝트가 소스 이벤트에 반응하도록 파생 클래스에 적절한 메서드 서명을 구현합니다.
MonoBehaviour사용 가능한 콜백의 전체 리스트는 메시지 아래에 나열되어 있는 MonoBehaviour 스크립팅 API 레퍼런스 페이지를 참조하십시오. 이 섹션의 나머지는 이벤트 함수의 일부 주요 그룹에 대한 개요입니다.
정기 업데이트 이벤트
게임은 애니메이션 프레임이 즉석에서 생성되는 애니메이션과 유사합니다. 게임 프로그래밍의 핵심 개념은 각 프레임이 렌더링되기 직전에 오브젝트의 위치, 상태, 동작을 변경하는 것입니다. Update 함수는 Unity에서 이러한 종류의 코드가 주로 사용되는 곳입니다. 는 프레임이 렌더링되기 전에, 애니메이션이 계산되기 전에 호출됩니다.
Updatevoid Update() { float distance = speed * Time.deltaTime * Input.GetAxis("Horizontal"); transform.Translate(Vector3.right * distance);}
또한 물리 엔진은 프레임 렌더링과 유사한 방식으로 이산 시간 단계로 업데이트됩니다. 각 물리 업데이트 직전에 FixedUpdate라는 별도의 이벤트 함수가 호출됩니다. 물리 업데이트와 프레임 업데이트가 동일한 주파수로 발생하지 않기 때문에 물리 코드를 가 아닌 함수에 배치하면 물리 코드에서 더 정확한 결과를 얻을 수 있습니다.
UpdateFixedUpdatevoid FixedUpdate() { Vector3 force = transform.forward * driveForce * Input.GetAxis("Vertical"); rigidbody.AddForce(force);}
또한 씬의 모든 오브젝트에 및 함수가 호출된 시점에 추가 변경 사항을 적용하고 모든 애니메이션이 계산된 후에 변경하는 것이 유용할 때도 있습니다. 이러한 시나리오의 예시는 다음과 같습니다.
UpdateFixedUpdate- 카메라가 타겟 오브젝트에 대해 학습 상태를 유지해야 하는 경우입니다. 타겟 오브젝트가 이동한 후에 카메라의 방향을 조정해야 합니다.
- 스크립트 코드가 애니메이션 효과를 오버라이드해야 하는 경우입니다. 예를 들어 캐릭터의 머리가 씬의 타겟 오브젝트를 향하게 할 수 있습니다.
LateUpdate 함수는 이러한 상황에 사용할 수 있습니다.
void LateUpdate() { Camera.main.transform.LookAt(target.transform);}
초기화 이벤트
게임플레이 중에 발생하는 업데이트 전에 초기화 코드를 호출하는 것이 유용한 경우가 많습니다. Start 함수는 오브젝트의 첫 번째 프레임 또는 물리 업데이트 전에 호출됩니다. 씬이 로드되는 시점에 씬의 각 오브젝트에 대해 Awake 함수가 호출됩니다. 다양한 오브젝트의 및 함수가 임의 순서로 호출되더라도 의 모든 인스턴스는 첫 번째 가 호출되기 전에 완료됩니다. 즉, 함수의 코드는 단계에서 이전에 수행된 다른 초기화를 사용할 수 있습니다.
StartAwakeAwakeStartStartAwakeGUI 이벤트
Unity에는 씬의 메인 동작에 대한 GUI 컨트롤을 렌더링하고 이러한 컨트롤의 클릭에 응답하는 시스템이 있습니다. 이 코드는 일반 프레임 업데이트와 다소 다르게 처리되므로 주기적으로 호출되는 OnGUI 함수에 배치되어야 합니다.
void OnGUI() { GUI.Label(labelRect, "Game Over");}
게임 오브젝트가 씬에 나타나면서 게임 오브젝트 위에 발생하는 마우스 이벤트도 감지할 수 있습니다. 이를 사용하여 무기를 타게팅하거나 현재 마우스 포인터 아래에 있는 캐릭터에 대한 정보를 표시할 수 있습니다. 접두사 로 이름이 지정된 일련의 이벤트 함수(예: OnMouseOver, OnMouseDown)를 사용하면 스크립트가 마우스로 사용자 행동에 반응할 수 있습니다. 예를 들어, 포인터가 특정 오브젝트 위에 있을 때 마우스 버튼을 누르면 해당 오브젝트의 스크립트에 함수가 존재하는 경우 해당 함수가 호출됩니다.
OnMouseOnMouseDown물리 이벤트
물리 엔진은 해당 오브젝트의 스크립트에서 이벤트 함수를 호출하여 오브젝트에 대한 충돌을 보고합니다. 접촉이 이루어질 때, 유지될 때, 종료될 때 OnCollisionEnter, OnCollisionStay, OnCollisionExit 함수가 호출됩니다. 해당 OnTriggerEnter, OnTriggerStay, OnTriggerExit 함수는 오브젝트의 콜라이더가 트리거(즉, 물리적으로 반응하지 않고 단순히 무언가가 들어갈 때 감지하는 콜라이더)로 설정될 때 호출됩니다. 물리 업데이트 중에 두 개 이상의 접점이 감지되어 충돌 세부 정보(위치, 들어오는 오브젝트의 ID 등)를 제공하는 파라미터가 함수에 전달된 경우 이러한 함수를 여러 번 연속적으로 호출할 수 있습니다.
void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Arrow") { ApplyDamage(10); }}