유니티(Unity) 자주 사용하는 이벤트 함수 종류(초기화, 업데이트, 충돌, 기타)
스크립트의 수명 주기(life cycle) 동안 사전에 정해진 순서로 실행되는 이벤트 함수 모음
이벤트 함수 설명 및 실행 순서(Execution Order of Event Functions)
https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html
https://docs.unity3d.com/kr/2022.3/Manual/ExecutionOrder.html
초기화 및 시작 관련 함수
Awake()
활성화된 스크립트 인스턴스(enabled script instance)가 로드될 때 호출됩니다. 어플리케이션이 시작되기전에 Awake를 사용하여 초기화 작업을 수행할수있습니다. 항상 모든 Start 함수보다 먼저 호출됩니다(스크립트 초기화 순서를 지정할 수 있음)
씬이 시작할 때 오브젝트마다 한 번 호출
프리팹이 인스턴스화 된 직후에 호출
게임 오브젝트가 비활성 상태인 경우 활성화될 때까지 호출되지 않음
OnEnable()
객체가 활성화(enabled and active)될때 호출(오브젝트 활성화 직후)
객체가 활성화된 상태로 재생 모드(play mode)에 들어갈 때마다 호출
(객체가 비활성화되었다가 다시 활성화되면 다시 OnEnable()이 호출)
게임 오브젝트가 활성화되면 해당 오브젝트가 포함하는 컴포넌트들이 OnEnable()을 호출
컴포넌트를 활성화하면 OnEnable()이 호출(컴포넌트의 enabled 속성이 true로 설정될 때)
Start()
첫 번째 프레임이 업데이트되기 전에 호출(스크립트 인스턴스가 활성화된 경우)
Awake 함수 호출 및 초기화 이후의 초기 설정을 수행할수있습니다.
void Start() {
cameraController.target = player.transform;
}
오브젝트 비활성화 및 파괴 관련 함수
OnDisable()
객체가 비활성화(disabled, inactive)될 때 호출(정리 코드에 사용할 수 있음)
게임 오브젝트가 비활성화되면 해당 오브젝트가 포함하는 모든 컴포넌트가 비활성화하고 컴포넌트의 OnDisable() 함수가 호출
컴포넌트를 비활성화하면 OnDisable()이 호출(컴포넌트의 enabled 속성이 false로 설정될 때)
OnDestroy()
게임 오브젝트가 파괴될 때 호출. 객체가 제거되기 전에 호출
오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 호출
업데이트 관련 함수
Update()
프레임당 한 번 호출. 게임 로직, 이동(또는 회전), 애니메이션 처리등에 사용(프레임 업데이트를 위한 주요 작업 함수)
void Update() {
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(horizontal, 0, vertical) * moveSpeed * Time.deltaTime;
transform.Translate(movement);
}
LateUpdate()
Update가 끝나고 프레임당 한 번 호출(Update 에서 수행된 모든 계산은 LateUpdate 가 시작할 때 완료)
주로 카메라나 후처리 로직에 사용. 예를들어 3인칭 카메라를 사용하는 경우 Update에서 캐릭터의 움직임(이동 및 회전)을 처리하고나서 LateUpdate에서 카메라 이동과 회전을 처리
void LateUpdate() {
transform.position = player.position + offset;
}
FixedUpdate()
고정된 업데이트 함수로 일정한 시간 간격마다 호출(프레임 속도와 관계없이 신뢰할 수있는 타이머에서 호출)
프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며(Update보다 더 자주 호출될수있음) 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있음. 물리 연산에 사용(모든 물리 계산 및 업데이트는 FixedUpdate후에 즉시 발생)
void FixedUpdate() {
rigidbody.AddForce(Vector3.up * jumpForce);
}
충돌 및 트리거 관련 함수
OnCollisionEnter()
다른 콜라이더와 충돌이 시작될 때 호출. 충돌이 발생하는 순간에 한번 호출
플레이어 충돌에서 사용 예시
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.CompareTag("Enemy")) {
playerHealth -= 10;
}
}
OnCollisionStay()
두 콜라이더가 충돌 상태를 유지하는 동안 매 프레임마다 호출
void OnCollisionStay(Collision collision) {
if (collision.gameObject.CompareTag("Enemy")) {
playerHealth -= 1 * Time.deltaTime;
}
}
OnCollisionExit()
콜라이더가 충돌을 끝낼 때 호출
OnTriggerEnter()
트리거 콜라이더에 진입할때 호출. 충돌이 아닌 오브젝트가 트리거에 들어갈 때 호출
아이템 획득 사용예시
void OnTriggerEnter(Collider other) {
if (other.CompareTag("Pickup")) {
Destroy(other.gameObject);
score += 10;
}
}
OnTriggerStay()
트리거 콜라이더 영역에 오브젝트가 있는 동안 매 프레임마다 호출
OnTriggerExit()
트리거 콜라이더 영역에서나올 때 호출
마우스 클릭 감지 함수
OnMouseDown()
오브젝트에 마우스 클릭이 감지되면 호출. 오브젝트는 콜라이더(Collider)를 포함해야함
void OnMouseDown()
{
Debug.Log(gameObject.name + "이 클릭되었습니다.");
}
OnMouseUp()
OnMouseEnter()
OnMouseExit()
기타
OnApplicationQuit()
어플리케이션이 종료되기 전에 모든 게임 객체에서 호출
에디터의 경우 플레이모드(play mode)를 중지할 때 호출, 웹 플레이어의 경우 웹 뷰가 닫힐 때 호출
OnApplicationPause(bool pauseStatus)
어플리케이션이 일시 중지되거나 다시 시작될 때 호출
'유니티게임개발 > 기초공부' 카테고리의 다른 글
유니티(Unity) OnTriggerEnter 함수(콜라이더, isTrigger, 리지드바디) (0) | 2023.01.21 |
---|---|
유니티에서 콜라이더 충돌 레이어 관리하기(collision matrix) (0) | 2023.01.21 |
유니티에서 리지드바디(Rigidbody)의 Sleep, WakeUp, Sleep Threshold (0) | 2023.01.19 |
유니티 프로젝트 폴더에서 에셋 검색 필터링 사용하기 (0) | 2023.01.16 |
유니티 Monodevelop 옵션 설정 (0) | 2023.01.12 |