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.

백그라운드 불러오기

일반적으로 게임은 리소스를 비동기적으로 로드해야 합니다. 게임의 기본 씬을 전환할 때(예: 새 레벨로 이동) 진행 중임을 나타내는 로딩 화면을 표시하거나 게임 플레이 중에 추가 리소스를 로드할 수 있습니다.

표준 로드 방법(ResourceLoader.load 또는 GDScript의 더 간단한 load)은 스레드를 차단하여 리소스가 로드되는 동안 게임이 응답하지 않는 것처럼 보이게 만듭니다.

이를 해결하는 한 가지 방법은 ``ResourceLoader``를 사용하여 백그라운드 스레드에서 리소스를 비동기적으로 로드하는 것입니다.

ResourceLoader 사용하기

일반적으로 :ref:`ResourceLoader.load_threaded_request <class_ResourceLoader_method_load_threaded_request>`을 사용하여 경로에 대한 리소스를 로드하라는 요청을 대기열에 추가하면 백그라운드의 스레드에 로드됩니다.

:ref:`ResourceLoader.load_threaded_get_status <class_ResourceLoader_method_load_threaded_get_status>`로 상태를 확인할 수 있습니다. 진행 상황은 백분율을 포함하는 하나의 요소 배열을 반환하는 Progress를 통해 배열 변수를 전달하여 얻을 수 있습니다.

마지막으로 :ref:`ResourceLoader.load_threaded_get <class_ResourceLoader_method_load_threaded_get>`을 호출하여 로드된 리소스를 검색합니다.

``load_threaded_get()``를 호출하면 리소스가 백그라운드에서 로드를 완료하고 즉시 반환되거나 ``load()``처럼 이 시점에서 로드가 차단됩니다. 이것이 차단되지 않도록 하려면 로드 요청과 리소스 검색 사이에 충분한 시간이 있는지 확인하거나 상태를 수동으로 확인해야 합니다.

예제

이 예에서는 백그라운드에서 씬을 로드하는 방법을 보여줍니다. 버튼을 누르면 적을 생성하는 버튼이 생깁니다. 적은 ``Enemy.tscn``가 될 것이며 ``_ready``에 로드하고 누르면 인스턴스화됩니다. 경로는 ``res://Enemy.tscn``에 있는 ``"Enemy.tscn"``가 됩니다.

먼저 리소스 로드 요청을 시작하고 버튼을 연결합니다.

const ENEMY_SCENE_PATH : String = "Enemy.tscn"

func _ready():
    ResourceLoader.load_threaded_request(ENEMY_SCENE_PATH)
    self.pressed.connect(_on_button_pressed)

이제 버튼을 누르면 ``_on_button_pressed``가 호출됩니다. 이 방법은 적을 생성하는 데 사용됩니다.

func _on_button_pressed(): # Button was pressed.
    # Obtain the resource now that we need it.
    var enemy_scene = ResourceLoader.load_threaded_get(ENEMY_SCENE_PATH)
    # Instantiate the enemy scene and add it to the current scene.
    var enemy = enemy_scene.instantiate()
    add_child(enemy)