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.
Checking the stable version of the documentation...
유휴와 물리 처리
게임은 루프 안에서 실행됩니다. 각 프레임 마다, 게임 세계의 상태를 화면에 표시하기 전에 업데이트 해야 합니다. Godot는 Node 클래스에서 사용하기 위한 두 가지 가상 메서드를 제공합니다: Node._process() 및 Node._physics_process(). 스크립트에서 두 가지나 한 가지를 정의한다면, 엔진이 이를 자동으로 호출합니다.
사용 가능한 처리 유형은 두 가지가 있습니다:
유휴 처리는 모든 프레임마다 노드를 가능한 한 자주 업데이트하는 코드를 실행하게 해줍니다.
물리 처리는 기본적으로 1초 당 60회를 고정된 속도로 처리합니다. 이는 게임의 실제 프레임 속도와는 별개이며, 물리를 매끄럽게 진행하도록 유지합니다. 움직이는 몸이 환경에 충돌하는 것처럼, 물리 엔진과 관련된 모든 것에 대해 물리 처리를 사용해야 합니다.
스크립트에서 Node._process() 메서드를 정의하여 유휴 처리를 활성화 할 수 있습니다. Node.set_process()를 호출하여 이 기능을 끄고 켤 수 있습니다.
엔진은 프레임을 그릴 때 마다 이 메서드를 호출합니다:
func _process(delta):
# Do something...
pass
public override void _Process(double delta)
{
// Do something...
}
_process()가 호출되는 빈도는 응용 프로그램이 초 당 몇 프레임 (FPS)으로 실행되는지에 따라 다르다는 것을 명심해야 합니다. 이 비율은 시간과 기기에 따라 다를 수 있습니다.
이 함수의 delta 매개변수는 이전에 호출된 _process()에서 경과된 시간 (초) 입니다. 이 매개변수를 사용하여 프레임 속도와 독립적으로 계산합니다. 예를 들어, 속도 값에 delta를 항상 곱해줘서 움직이는 물체에 애니매이션 효과를 줄 수 있습니다.
물리 처리는 유사한 가상 함수인 _physics_process()를 사용합니다. 이 함수는 게임 세계와 충돌하는 캐릭터를 움직이는 것처럼 각 물리 단계 전에 수행해야 하는 계산에 사용됩니다. 위에서 언급했듯이 _physics_process()는 물리 상호작용을 안정적으로 유지하기 위해 가능한 한 고정된 시간 간격으로 실행됩니다. 프로젝트 설정 아래에 물리 -> 일반 -> 물리 FPS에서 물리 단계 간 간격을 변경할 수 있습니다. 기본적으로 초당 60회 실행되도록 설정되어 있습니다.
엔진은 매번 물리 단계 전에 이 메서드를 호출합니다:
func _physics_process(delta):
# Do something...
pass
public override void _PhysicsProcess(double delta)
{
// Do something...
}
그러나 _proceed() 함수는 물리 처리 단계와 동기화되지 않습니다. 프레임 비율은 일정하지 않고 하드웨어와 게임 최적화에 의존하기 때문이죠. 이 함수는 단일 스레드 게임의 동적 단계를 거친 후에 실행됩니다.
간단하게 _process() 함수가 작동하는 예시를 들면, Label 노드 하나로 된 씬을 만들고 다음 스크립트를 넣습니다:
extends Label
var time = 0
func _process(delta):
time += delta
text = str(time) # 'text' is a built-in Label property.
using Godot;
public partial class CustomLabel : Label
{
private double _time;
public override void _Process(double delta)
{
_time += delta;
Text = _time.ToString(); // 'Text' is a built-in Label property.
}
}
위 스크립트는 프레임당 증가하는 카운터를 보여줍니다.