IT/공부 정리

[Unity] 유니티복습 생명주기

rinix_x 2024. 6. 19. 17:55

 

유니티를 다시 시작하고자 해서

유니티를 복습하고 정리한 글 내용입니다.

 

<------- 생명주기 ------->

모든 상호작용과 반응은 순차적이고 구조화된 방식으로 이루어지는데, 생명주기를 바탕으로 이뤄진다.

이 생명주기에는 여러 이벤트 메서드가 존재하고, 게임 오브젝트의 동작을 제어할 수 있다.

 

아래 이미지는 유니티 생명 주기의 흐름도이다.

public class example : MonoBehaviour
{
	//생성자란 클래스가 인스터스화 될 때 초기에 제일 먼저 불리는 함수같은 역할. 유니티에선 생성자 X
    //자기 자신의 데이터를 초기화하는 용도
    void Awake() {}
    
    //컴포넌트가 켜졌을 때 호출된다. 당연히 생성시에 컴포넌트가 켜져있으면 함수 호출
    void OnEnable() {}
    
    //오브젝트가 Loop 매번 틱 마다 도는데 처음 Update함수가 불리기 직전에 불리는 함수
    void Start() {}
    
    //실제 time setting에 의해 셋팅된 값마다 불린다.
    void FixedUpdate() {}
    
    //매 틱마다 연산 수행
    void Update() {}
    
    //Update보단 느리지만 늦은 업데이트 하고 싶을 때 사용
    void LateUpdate() {}
    
    //컴포넌트 꺼졌을 때 호출
    void OnDisble() {}
    
    //컴포넌트 파괴
    void OnDestroy() {}
}

 

가볍게 말하면 위과 같이 작동하는데, 좀 더 자세히 설명하도록 하겠습니당...


1.1) Awake()

Awake()는 게임 오브젝트가 비활성 상태에서도 호출된다. 씬(Scene)이 로드 될 때마다 모든 오브젝트에 대해 한 번만 호출.

그렇기에 컴포넌트에 의존하지 않는 초기화 작업을 수행하는 것이 좋다.

 

Awake를 통한 추천 작업

  • 게임 오브젝트의 변수 초기화
  • 컴포넌트 가져오기 및 초기화
  • 게임 매니저나 싱글톤과 같은 다른 게임오브젝트에 대한 참조 설정


1.2) OnEnable()

OnEnable()는 게임 오브젝트가 비활성화되거나 스크립트가 비활성화된 후에 다시 활성화될 때마다 호출되기에, 재활성화시 필요한 작업을 수행하는데 적합하다.

 

OnEnable를 통한 추천 작업

  • 이벤트 등록
  • 이벤트 리스너 설정
  • Coroutine시작

게임 오브젝트가 비활성화되거나 스크립트가 비활성화 제어 방법은 gameObject.SetActive(true), gameObject.SetActive(false)를 사용하면 된다.

 



1.3) Start()

Start()는 게임 오브젝트나 컴포넌트를 초기화하는데 사용. Awake와 달리 활성화 된 게임 오브젝트에서 한 번만 호출된다.

 

Start를 통한 추천 작업

  • 초기화된 다른 스크립트나 컴포넌트에 의존하는 초기화 작업


2.1) FixedUpdate()

FixedUpdate()는 매 물리 프레임마다 호출, 주로 물리적인 연산(ex, Rigidbody)에 사용된다. Unity의 물리 시스템은 일정한 시간 간격에 따라 업데이트 되며, 이 함수가 그것에 맞춰 호출된다. Update와 달리 프레임 레이트에 영향을 받지 않기 때문에, 물리 시뮬레이션과 같이 일정한 업데이트 주기가 필요한 작업에 이상적이다. 

 

FixedUpdate를 통한 추천 작업

  • 일정한 업데이트 주기가 필요한 작업
  • Rigidbody컴포넌트에 힘을 가는 작업

 

2.2) OnTrigger___()

OnTrigger는 Collider컴포넌트가 트리거 모드로 설정되어 있을 때 호출된다. 상호작용을 처리하는데 사용된다. 물리적인 힘이 작용하지 않는다. 매개변수로는 Collider혹은 Collider2D타입의 객체를 받는다.

 

OnTrigger를 통한 추천 작업

  • 상호작용

 

2.2.1) OnTriggerEnter(Collider other)

OnTriggerEnter()는 다른 Collider가 처음 겹치기 시작할 때 한번 호출된다. 

 

OnTriggerEnter를 통한 추천 작업

  • 트리거에 진입하는 객체 감지
  • 트리거에 진입하는 순간의 특정 동작 실행

 

2.2.2) OnTriggerStay(Collider other)

OnTriggerStay()는 트리거와 Collider가 계속 겹쳐있을 때 매 프레임마다 호출

 

OnTriggerStay를 통한 추천 작업

  • 트리거 내에 객체가 계속 있을 때 실행해야 하는 동작 처리


2.2.3) OnTriggerExit(Collider other)

OnTriggerExit()는 트리거와 Collider가 계속 겹쳐있다가 벗어날 때 한 번 호출

 

OnTriggerExit를 통한 추천 작업

  • 트리거 내에서 나가는 객체 감지
  • 트리거 떠나는 순간의 특정 동작 실행


2.3) OnCollision___()

OnCollision___()는 물리적 충돌을 처리하는데 사용. Collider 컴포넌트가 트리거 모드로 설정되어 있지 않을 때 호출. 매개변수로는 Collider혹은 Collider2D타입의 객체를 받는다. 

 

OnCollision를 통한 추천 작업

  • 물리적 충돌 처리

 

2.3.1) OnCollisionEnter(Collision collision)

OnCollisionEnter()는 두 Collider가 처음 충돌할 때 한 번 호출

 

OnCollisionEnter를 통한 추천 작업

  • 충돌 시작할 때 특정 동작 실행
  • 충돌 객체 감지


2.3.2) OnCollisionStay(Collision collision)

OnCollisionStay()는 계속 충돌하고 있을 때 매 프레임 마다 호출

 

OnCollisionStay를 통한 추천 작업

  • 두 객체가 계속 충돌하고 있을 때 실행해야하는 동작 처리


2.3.2) OnCollisionExit(Collision collision)

OnCollisionExit()는 더 이상 충돌하지 않게 될 때 한번 호출.

 

OnCollisionExit를 통한 추천 작업

  • 충돌이 끝나는 순간에 특정 동작 실행
  • 충돌 종료 감지


2.4) Update

Update()는 실행되는 동안 매프레임 마다 호출되며, 이 메서드 내에서 수행되는 작업은 가능한 한 가볍게 유지해야 한다. 그렇지 않으면 프레임 레이트에 부정적인 영향을 미칠 수 있다. 

또한 Update는 프레임 레이트에 따라 호출 간격이 변할 수 있다. 따라서 프레임 레이트에 종속적이지 않은 부드러운 움직임을 구현하려면 Time.deltaTime을 사용하여 간격을 보정해야 한다.

 

Update를 통한 추천 작업

  • 게임 로직
  • 상태의 업데이트
  • 사용자 입력의 처리


2.5) LateUpdate

LateUpdate()는 매프레임 마다 호출되지만, update가 모두 호출된 후에 호출된다. Update에서 발생한 변화에 따라 후처리하는데 사용

 

LateUpdate를 통한 추천 작업

  • 캐릭터 이동에 따른 카메라 움직임
  • 후처리


3.1) OnDisable()

OnDisable()는 해당 게임 오브젝트나 그에 연결된 스크립트가 비활성화될 때 호출. 게임 오브젝트나 스크립트가 비활성화로 전환될 때마다 호출되기에 비활성화 시 필요한 정리 작업을 수행하는 데 적합하다.

 

OnDisable를 통한 추천 작업

  • 이벤트 해제
  • 리스너 제거
  • 코루틴 정지

게임 오브젝트가 비활성화되거나 스크립트가 비활성화 제어 방법은 gameObject.SetActive(true), gameObject.SetActive(false)를 사용하면 된다.



3.2) OnDestroy()

OnDistroy()는 해당 게임 오브젝트나 스크립트가 Destroy에 의해 제거되기 직전에 호출. 필요한 정리 작업을 수행하는 데 사용된다. 게임오브젝트가 파괴되는 시점에 특정 행동을 실행하기 위해 사용할 수 도 있다.

 

OnDistroy를 통한 추천 작업

  • 리소스 해제
  • 연결 해제
  • 이벤트 핸들러의 제거


3.3) OnApplicationQuit()

OnApplicationQuit()는 유니티 애플리케이션이 종료될 때 호출된다. 애플리케이션 종료 전, 실행해야 할 코드를 정의하는데 사용

 

OnApplicationQuit를 통한 추천 작업

  • 게임 진행 상황 저장
  • 네트워크 연결 종료
  • 사용한 리소스 정리

♠ 참고

OnApplicationQuit가 호출되는 시점은 유니티에디터와 실제 빌드된 애플리케이션에서 다르게 작동 할 수 있다. 

특히 모바일 디바이스에서는 홈버튼을 눌러 애플리케이션을 백그라운드로 보내는 경우 호출되지 않을 수 있다.

이런 상황에서는 OnApplicationPause()를 함께 사용 해야 할 수 있다.

 

 

 

 

반응형