본문 바로가기

Unity/Knowledge

MonoBehaviour와 Unity 생명주기

1-1. Time.timeScale을 0으로 하면 Update와 FixedUpdate는 모두 호출이 되지 않을까요? 그 이유는 무엇일까요?

Time.timsScale을 0으로 설정하면 게임의 시간을 멈춘 것으로 간주된다.
Update 메서드는 프레임마다 호출되므로 Time.timeScale의 영향을 받기 때문에 호출되지 않는다.
FixedUpdate 메서드 또한 고정된 시간 간격으로 호출되므로 Time.timeScale의 영향을 받기 때문에 호출되지 않는다.


1-2. Update의 호출주기에 영향을 주는 것은 무엇일까요?

프레임 레이트 - Update는 각 프레임마다 호출되기 때문에, 프레임 레이트(FPS)에 직접적으로 의존한다. 높은 프레임
                          레이트에서는 더 자주 호출되고, 낮은 프레임 레이트에서는 덜 호출된다.

Time.timeScale - Time.timeScale이 변경되면 시간의 흐름이 빨라지거나 느려지며 Update 호출 간의 실제 시간 간격도
                            이에 따라 변화하게 된다.


1-3. FixedUpdate의 호출주기에 영향을 주는 것은 무엇일까요?  

Fixed Timestep - Unity의 설정에서 Fixed Timestep 값을 조정할 수 있으며, 이 값은 FixedUpdate가 호출되는 간격을 결정
                            한다. 기본값은 0.02초 (즉, 50Hz)이다.

Time.timeScale - Time.timeScale이 변경되면 FixedUpdate의 호출 간격도 이에 비례하여 변경된다.
                            예를 들어, Time.timeScale이 0.5이면 FixedUpdate의 호출 간격이 두 배로 길어진다.


1-4. Awake와 Start, OnEnable의 호출 순서는 어떻게 될까요?

  • Awake
    스크립트 인스턴스가 로드될 때 처음 호출된다.
    이 메서드는 게임 오브젝트가 활성화되지 않더라도 호출된다. 모든 초기화 작업을 여기서 수행한다.

  • OnEnable
    스크립트가 활성화될 때마다 호출된다.
    게임 오브젝트가 활성화될 때마다 호출되며, Awake 이후에 호출된다.

  • Start 
    스크립트가 처음 활성화될 때 한 번만 호출된다.
    Awake와 OnEnable 이후에 호출되며, 보통 초기 설정이나 준비 작업을 여기서 수행한다.


2-1. Unity 생명주기(Unity Life Cycle)에 대해서 설명해주세요.

Unity 생명주기는 게임 오브젝트와 스크립트가 어떻게 초기화되고, 업데이트되고, 종료되는지 설명하는 일련의 단계이다. 이 생명주기는 개발자가 게임의 다양한 상태와 이벤트를 처리하기 위해 메서드를 사용하도록 하며, 단계는 다음과 같다.

  • Initialization (초기화)
    • Awake 스크립트 인스턴스가 로드될 때 호출
    • OnEnable 게임 오브젝트가 활성화될 때 호출
    • Start 스크립트가 처음 활성화될 때 한 번만 호출
  • Physics (물리)
    • FixedUpdate 고정된 시간 간격으로 호출되며, 물리 연산 및 물리 기반 업데이트에 사용
  • Game Logic (게임 로직)
    • Update 매 프레임마다 호출되며, 게임 로직, 입력 처리, 기타 업데이트 작업에 사용
    • LateUpdate 모든 Update 메서드가 호출된 후 매 프레임마다 호출됩니다. 다른 스크립트의 Update 메서드가 완료된 후에 수행되어야 하는 작업에 사용
  • Rendering (렌더링)
    • OnPreCull, OnBecameVisible, OnBecameInvisible, OnRenderObject 렌더링 주기 동안 특정 시점에 호출
  • End of Frame (프레임 종료)
    • OnGUI GUI 요소를 그리기 위해 매 프레임마다 호출
  • Deactivation and Destruction (비활성화 및 파괴)
    • OnDisable 게임 오브젝트가 비활성화될 때 호출
    • OnDestroy 게임 오브젝트가 파괴될 때 호출



2-2. Time.deltaTime이란 무엇이며, 사용하는 이유에 대해 설명해주세요.

Time.deltaTime은 이전 프레임과 현재 프레임 사이의 경과 시간을 나타낸다.

  • 프레임 독립적인 움직임 
    다양한 프레임 레이트에서도 일관된 게임 오브젝트의 움직임을 보장한다. 예를 들어, 오브젝트를 일정한 속도로 이동시키려면, 이동 거리에 Time.deltaTime을 곱하여 프레임 레이트와 무관하게 동일한 속도로 이동할 수 있다.

  • 정확한 타이밍
    애니메이션, 타이머, 기타 시간 기반 로직에서 정확한 타이밍을 유지하는 데 사용된다.

 

 

 

'Unity > Knowledge' 카테고리의 다른 글

내가 자주 사용하는 LayerMask  (0) 2024.06.20
생동감 있는 몬스터 만들어 보기  (0) 2024.06.19
그래픽스 - 셰이더  (0) 2024.06.18
3D 카메라 타입 별 상호 작용  (1) 2024.06.04
인벤토리 토글 해체 분석기  (0) 2024.05.30