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