이벤트 함수
유니티의 스크립트는 이벤트 함수 호출을 통해 컨트롤을 스크립트에 넘긴다. 그리고 함수 호출이 완료되면 컨트롤이 다시 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()