유니티 버전 - 2022.3.48f1
목차
- 들어가며
- Legend
- 생명 주기
- 마치며
들어가며
Unity에서 게임 오브젝트의 행동과 상호작용을 제어하는 핵심 요소 중 하나가 바로 이벤트 함수입니다, 이러한 함수들은 특정한 타이밍에 Unity 엔진에 의해 자동으로 호출되며, 게임이 시작할 때부터 종료할 때까지 여러 가지 상태 변화에 대응합니다
이벤트 함수들의 실행 순서와 각 함수의 역할에 대해 알아보겠습니다. 게임 로직을 더 효율적으로 관리하고 싶다면, Unity의 이벤트 함수가 어떻게 작동하는지 이해하는 것이 중요합니다
Legend
먼저 유니티에서 제공하는 메뉴얼입니다, 이것을 바탕으로 설명하겠습니다
먼저 들어가서 가장 먼저보이는 Legend입니다, 여기서 우리는 User callback이 써있는 도형의 모양만 개발 주기에서 신경써주면 됩니다, 나머지는 엔진 내부에서 자동으로 호출 및 처리 합니다
생명 주기
먼저 전체 생명 주기입니다, Unity 메뉴얼에서 가져왔습니다
Awake
Start함수 호출 전, 게임 오브젝트가 인스턴스화 될 된 직후 호출됩니다, 게임이 시작했을때 비활성화 상태라면 활성화되기 전까지 Awake는 호출되지않습니다
OnEnable
오브젝트가 활성화된 직후 호출됩니다, 오브젝트를 비활성화 후 활성화 시킬 때마다 실행됩니다, 여기서 활성화란 스크립트에서 SetActive(true)로 설정되는 경우 혹은 컴포넌트가 활성화(enabled = true)되는 경우를 의미합니다
Reset
에디터 모드에서만 호출되는 함수로, 스크립트의 기본값을 초기화할 때 사용합니다, 해당 스크립트가 오브젝트에 컴포넌트로 추가될 때 기본값으로 설정되기를 원하는 데이터를 정의해 줍니다(협업시 초기 설정의 편리성)
현재 health와 speed는 값이 없는 상태입니다
스크립트를 드래그 하거나 컴포넌트 추가를 이용하여 오브젝트에 추가하여줍니다
인스펙터를 확인한 결과 void Reset()의 값이 적용됨과 동시에 디버그를 확인할 수 있었습니다
스크립트 컴포넌트의 Reset을 이용해도 동일한 결과를 얻을 수있습니다
Transform에서 에디터의 이미 정의된 Reset을 이용하여 0,0,0으로 만드는 것과 비슷한 것이라고 생각해도 무방합니다
Start
인스턴스가 활성화된 경우에만 첫 번째 프레임 Update 전에 호출됩니다
FixedUpdate
물리 연산과 관련된 처리를 할때 사용합니다, 일정한 기준으로 호출되며 호출 주기를 설정할수도 있습니다
모든 물리 계산 및 업데이트는 FixedUpdate후 즉시 발생합니다, FixedUpdate를 이용하여 움직임을 적용할 때 Time.deltaTime을 곱할 필요가 없습니다
OnTriggerXXX
Enter, Stay, Exit이 이때 처리됩니다, Collider 컴포넌트의 Is Trigger 옵션이 체크되어있을 경우에만 동작합니다
OnCollisionXXX
Enter, Stay, Exit이 이때 처리됩니다, Collider 컴포넌트의 Is Trigger 옵션이 체크되어있지 않을때만 동작합니다
트리거가 아닌 일반적인 충돌을 감지하는데 적합합니다
yield WaitForFixedUpdate
코루틴 사용시 특정 작업을 물리 업데이트가 완료된 후 실행되도록 합니다
private IEnumerator MyCoroutine()
{
// 실행될 코드
// 물리 업데이트가 완료될 때까지 대기
yield return new WaitForFixedUpdate();
// 물리 업데이트 후 실행될 코드
}
OnMouseXXX
Enter, Over, Down, Exit등 마우스가 오브젝트의 콜라이더와 상호작용시, 마우스 이벤트가 발생할 때 호출됩니다
Update
프레임당 한 번 호출됩니다, 일반적인 게임 로직을 담당하는 곳입니다
LateUpdate
Update가 끝난 후 프레임당 한번 호출됩니다, Update에서 이미 처리된 결과 값이나 로직을 이용하여 추가적인 작업을 처리해야할때 사용됩니다
OnDrawGizmos
에디터에서 기즈모를 그려줍니다, 주로 시각적 디버깅과 오브젝트의 상태를 표현하는 데 사용됩니다
yield WaitForEndOfFrame
코루틴 사용시 현재 프레임의 모든 렌더링 작업이 완료된 후에 다음 코드를 실행하도록 대기합니다, 모든 UI업데이트와 카메라 렌더링이 끝난 후에 코드를 실행할 수 있게 합니다
OnApplicationPause
애플리케이션의 상태를 관리하기 위해 사용되는 메서드로, 일시 정지 및 재개 시 호출됩니다, 게임이 일시정지되거나 다시 활성화 될때 특정 작업을 수행하도록 할 수 있습니다, Alt + Tab을 이용해서 다른 프로그램으로 전환하는 경우 같이 게임이 포커스를 잃을때 자동으로 실행됩니다
이를 이용하여 게이머가 마우스로 바탕화면을 클릭하거나 실수로 다른 창을 눌렀을때 자동으로 OnApplicationPause(true)가 실행되어 게임이 일시 정지되도록 할 수 있습니다, 다시 게임으로 돌아오면 자동으로 OnApplicationPause(false)가 실행됩니다
void OnApplicationPause(bool pauseStatus)
{
if (pauseStatus)
{
// 게임이 일시 중지될 때 처리할 작업
// 예: 현재 상태 저장 및 일시 정지 메뉴 표시
}
else
{
// 게임이 다시 활성화될 때 처리할 작업
// 예: 저장된 상태 복원
}
}
OnApplicationQuit
애플리케이션(게임) 종료 전 모든 게임 오브젝트에 존재하는 OnApplicationQuit가 호출됩니다
OnDisable
오브젝트가 비활성화될때 호출됩니다, 오브젝트를 비활성화시킬 때마다 실행됩니다, 여기서 비활성화란 스크립트에서 SetActive(false)로 설정되는 경우 혹은 컴포넌트가 비활성화(enabled = false)되는 경우를 의미합니다
OnDestroy
오브젝트가 Destroy 혹은 씬 종료에 의하여 파괴될경우, 오브젝트의 마지막 프레임의 모든 프레임 업데이트를 마친 후 호출됩니다, 이를 이용하여 오브젝트가 파괴될 때 수행해야 할 작업을 정의해 줄 수 있습니다
마치며
지금까지 유니티의 생명 주기에 대하여 알아보았습니다, 위에 기재한 유니티에서 제공하는 Documentation을 참고하여 이벤트 함수의 실행 순서에 대하여 더 알아보면 좋을 것 같습니다
이상입니다
'코드 및 공부 > 기타' 카테고리의 다른 글
Debug (1) | 2024.11.05 |
---|---|
콘솔 창(Console) (4) | 2024.11.04 |
Unity - Scripting API를 참고하는 법 (1) | 2024.10.14 |
TagManager.preset을 이용한 태그 및 레이어 관리 (0) | 2024.10.11 |
c# - 프로퍼티 (0) | 2024.09.27 |