개발툴/Unity

<이벤트 함수>

가든_ 2023. 7. 11. 23:11

이벤트 함수

유니티의 스크립트는 이벤트 함수 호출을 통해 컨트롤을 스크립트에 넘긴다. 그리고 함수 호출이 완료되면 컨트롤이 다시 Unity로 반환된다.

1. 정기 업데이트 이벤트

  • 게임 프로그래밍의 핵심은 각 프레임이 렌더링되기 전에 게임에서 오브젝트으 포지션, 상태 및 동작을 변경하는 것

Update

  • Update() 함수는 프레임이 렌더링 되기 전, 애니메이션이 계산되기 전 호출됨
  • 지나간 시간을 알고 싶을때 Time.deltaTime 사용

FixedUpdate

  • FixedUpdate() 함수는 물리 업데이트 직전에 호출됨
  • 물리 업데이트와 프레임 업데이트는 동일한 빈도로 실행되지 않기 때문에, Update() 대신     FixedUpdate() 함수에 물리 코드 작성을 통해 더 정확한 결과를 얻을 수 있음

LateUpdate

  • LateUpdate() 함수는 씬의 모든 오브젝트가 Update()와 LateUpdate()를 호출하고, 모든 애니메이션이 계산된 후에 변경 사항을 추가적으로 적용할때 유용하게 사용됨
  •  ex) 카메라가 타겟 오브젝트를 따라가야할때, 캐릭터의 머리가 타겟을 따라가야할때
    • 타겟 오브젝트가 모두 이동한 후에 움직어야 되므로 사용

2. 초기화 이벤트

Start

  • Start() : 첫 프레임이나 오브젝트의 물리 업데이트 전에 호출됨
  • 스크립트가 켜져있을때만 호출됨 -> 필요할 때까지 초기화 코드 실행의 연장 가능

Awake

  • Awake() : 씬이 로드될 때 씬의 각 오브젝트에 대해 호출됨
  • 다른 오브젝트에 메세지를 보내거나, GameObject.FindWithTag()를 안전하게 사용 가능
  • 모든 Awake()는 첫 Start()가 호출되기 전에 완료됨
    •  Start() 함수는 Awake() 단계에 이미 수행된 다른 초기화를 이용할 수 있다.

3. GUI 이벤트

  • 씬의 메인 액션 위에서 GUI 컨트롤을 렌더링하고 클릭에 반응하는 시스템
  • 노멀 프레임 업데이트와 다르게 처리되므로 주기적으로 호출되는 OnGUI() 함수에 넣어야 한다.
  • 게임 오브젝트가 Ignore Raycast 레이어에 속해있으면 호출되지 않음
  • 코루틴 사용가능
  • 게임 오브젝트 위에 발생하는 마우스 이벤트 탐지 가능
  •  OnMouseEnter(), OnMouseOver(), OnMouseExit(), OnMouseDown(), OnMouseUp(), OnMouseDrag()

4. 물리 이벤트

  • 물리 엔진의 오브젝트 스크립트에 있는 물리 이벤트 함수를 호출하여 오브젝트 충돌을 보고함
  •  충돌이 일어나기 위해서는 두 오브젝트 모두 Collider를 가지고 있어야 하고, 둘 중 하나는 RigidBody를가져야 한다. 그리고 Rigidbody를 가진 오브젝트가 움직여서 충돌할 경우만 이벤트 발생
  • OnCollisionEnter(), OnCollisionStay(), OnCollisionExit()
    • Collision : 접촉에 대한 반환 값
      • relativeVelocity : 두 오브젝트의 상대 속도
      • rigidbody : 자신과 접촉한 rigidbody
      • collider : 자신과 접촉한 collider
      • transform : 자신과 접촉한 오브젝트의 Transform
      • gameobject : 자신과 접촉한 오브젝트
      • contacts : 물리 엔진에서 연산한 접촉 포인트 정보, ContactPoint 배열
  • OnTriggerEnter(), OnTriggerStay(), OnTriggerExit()