Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

게임 및 프로세스 모드 일시 중지

소개

대부분의 게임에서는 어느 시점에서 휴식을 취하거나 옵션을 변경하는 등 다른 작업을 수행하기 위해 게임을 중단하는 것이 바람직합니다. 일시 중지할 수 있는 것과 불가능한 것에 대한 세밀한 제어를 구현하는 것은 많은 작업이므로 일시 중지를 위한 간단한 프레임워크가 Godot에서 제공됩니다.

일시중지 작동 방식

게임을 일시 중지하려면 일시 중지 상태를 설정해야 합니다. 이는 SceneTree.paused 속성에 ``true``를 할당하여 수행됩니다.

get_tree().paused = true

이렇게 하면 두 가지 문제가 발생합니다. 먼저 모든 노드에 대해 2D 및 3D 물리가 중지됩니다. 둘째, 특정 노드의 동작은 프로세스 모드에 따라 중지되거나 시작됩니다.

참고

set_active 메서드를 사용하면 게임이 일시 중지된 동안 물리 서버를 활성화할 수 있습니다.

처리 순서

Godot의 각 노드에는 처리 시기를 정의하는 "프로세스 모드"가 있습니다. 검사기의 노드의 노드 속성에서 찾아서 변경할 수 있습니다.

../../_images/pausemode.webp

코드를 사용하여 속성을 변경할 수도 있습니다.

func _ready():
    process_mode = Node.PROCESS_MODE_PAUSABLE

각 모드에서 노드에 지시하는 작업은 다음과 같습니다.

  • 상속: 부모, 조부모 등의 상태에 따라 처리합니다. 상속되지 않은 상태를 가진 첫 번째 부모입니다.

  • 일시 중지 가능: 게임이 일시 중지되지 않은 경우에만 노드(및 상속 모드의 해당 자식 노드)를 처리합니다.

  • WhenPaused: 게임이 일시 중지된 경우에만* 노드(및 상속 모드의 해당 자식 노드)를 처리합니다.

  • 항상: 무슨 일이 있어도 노드(및 상속 모드의 해당 자식 노드)를 처리합니다. 일시중지 여부에 관계없이 이 노드가 처리됩니다.

  • 비활성화됨: 노드(및 상속 모드의 자식 노드)가 전혀 처리되지 않습니다.

기본적으로 모든 노드에는 이 속성이 "상속" 상태로 있습니다. 부모가 "상속"으로 설정된 경우 조부모가 확인되는 등의 작업이 수행됩니다. 상위 항목에서 상태를 찾을 수 없는 경우 SceneTree의 일시 중지 상태가 사용됩니다. 즉, 기본적으로 게임이 일시 중지되면 모든 노드가 일시 중지됩니다. 노드가 처리를 중지하면 여러 가지 일이 발생합니다.

_process, _physics_process, _input_input_event 함수는 호출되지 않습니다. 그러나 해당 기능의 스크립트가 현재 처리되지 않는 노드에 연결되어 있어도 시그널는 여전히 작동하고 연결된 기능이 실행되도록 합니다.

애니메이션 노드는 현재 애니메이션을 일시 중지하고 오디오 노드는 현재 오디오 스트림을 일시 중지하며 입자는 일시 중지됩니다. 게임이 더 이상 일시 중지되지 않으면 자동으로 재개됩니다.

게임이 일시 중지된 동안 노드가 처리 중이더라도 기본적으로 물리학은 작동하지 **않습니다**는 점에 유의하는 것이 중요합니다. 앞서 언급했듯이 이는 물리 서버가 꺼져 있기 때문입니다. set_active 메서드를 사용하면 게임이 일시 중지된 동안 물리 서버를 활성화할 수 있습니다.

씬 일시정지

게임을 일시 중지하는 데 사용할 버튼을 만드는 것부터 시작하세요.

만들기 닫기 버튼이 포함된 메뉴인 경우 메뉴 루트 노드의 **Process Mode**를 **When Paused**로 설정한 다음 메뉴를 숨깁니다. 프로세스 모드는 루트 노드에서 **일시 중지 시**로 설정되어 있으므로 모든 자식 노드 및 하위 항목은 해당 프로세스 모드를 상속합니다. 이렇게 하면 게임이 일시 중지되면 메뉴의 모든 노드가 처리되기 시작합니다.

메뉴의 루트 노드에 스크립트를 연결하고, 이전에 만든 일시정지 버튼을 스크립트의 새 메서드에 연결하고, 해당 메서드 내에서 게임을 일시정지하고 일시정지 메뉴를 표시합니다.

func _on_pause_button_pressed():
    get_tree().paused = true
    show()

마지막으로 메뉴의 닫기 버튼을 스크립트의 새 메서드에 연결합니다. 해당 메서드 내에서 게임 일시 중지를 해제하고 일시 중지 메뉴를 숨깁니다.

func _on_close_button_pressed():
    hide()
    get_tree().paused = false

현재 씬 탭에는 Sprite 노드만 있어야 합니다.