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 게임에 어떻게 통합하나요? 주의사항이 있나요?
우리는 시스템을 가능한 한 사용하기 쉽게 만들려고 노력했으며 기존의 많은 게임은 약간의 변경만으로 작동할 것입니다. 즉, 특별한 치료가 필요한 몇 가지 상황이 있으며 이에 대해 설명하겠습니다.
애니메이션 제어하기
첫 번째 단계는 :ref:`Project Settings > Physics > Common > Physics Interpolation<class_ProjectSettings_property_physics/common/physics_interpolation>`에서 물리 보간을 활성화하는 것입니다. 이제 게임을 실행할 수 있습니다.
특히 60TPS 또는 그 배수로 물리학을 실행하는 경우 크게 달라 보이는 것은 없습니다. 그러나 그 뒤에서는 훨씬 더 많은 일이 일어나고 있습니다.
(거의) 모든 게임 로직을 _process에서 _physics_process로 이동합니다.
물리 보간에 대한 가장 기본적인 요구 사항(이미 수행 중일 수 있음)은 _process``(렌더링된 프레임에서 실행) 대신 ``_physics_process``(물리 틱에서 실행) 내 개체에서 이동하고 게임 로직을 수행해야 한다는 것입니다. 이는 스크립트가 일반적으로 입력 및 AI에 대한 응답을 포함하여 ``_physics_process 내에서 대부분의 처리를 수행해야 함을 의미합니다.
물리 틱 내에서만 객체의 변환을 설정하면 자동 보간이 물리 틱 간 변환을 처리할 수 있으며 게임이 실행되는 시스템에 관계없이 동일하게 실행되도록 보장할 수 있습니다. 보너스로 게임이 높은 FPS에서 렌더링되는 경우 AI 로직(예를 들어)이 더 이상 렌더링된 모든 프레임에서 실행되지 않기 때문에 CPU 사용량도 줄어듭니다.
참고
물리 틱 *외부*에 보간된 개체의 변환을 설정하려고 하면 보간된 위치에 대한 계산이 부정확해지고 지터가 발생합니다. 이 지터는 귀하의 컴퓨터에서는 보이지 않을 수 있지만 일부 플레이어에서는 *발생*합니다. For this reason, setting the transform of interpolated objects should be avoided outside of the physics tick. Godot는 이 경우가 감지되면 편집기에서 경고를 생성하려고 시도합니다.
팁
이것은 *유연한 규칙*일 뿐입니다. 물리 틱 외부로 객체를 순간 이동시키고 싶은 경우가 있습니다(예: 레벨을 시작하거나 객체를 다시 생성할 때). 그러나 일반적으로 물리 틱에서 변환을 적용해야 합니다.
물리 틱 중에 모든 간접적인 움직임이 발생하는지 확인하세요.
Godot에서는 노드가 자신의 스크립트에서 직접 이동할 수 있을 뿐만 아니라 트위닝, 애니메이션, 탐색과 같은 자동 방법으로도 이동할 수 있다는 점을 고려하세요. 이러한 모든 방법에는 각 프레임("유휴")이 아닌 물리 틱에서 작동하도록 타이밍이 설정되어 있어야 합니다. **이 방법을 사용하여 객체를 이동하는 경우**(이러한 방법은 보간되지 않은 속성을 제어하는 데에도 사용할 수 있습니다).
참고
또한 노드는 스스로 이동하는 것뿐만 아니라 :ref:`SceneTree<class_SceneTree>`에서 상위 노드를 이동하여 이동할 수도 있다는 점을 고려하세요. 따라서 부모의 움직임은 물리 틱 중에만 발생해야 합니다.
물리 틱 속도 선택
물리 보간을 사용하면 렌더링이 물리에서 분리되므로 게임에 적합한 값을 선택할 수 있습니다. 더 이상 사용자 모니터 새로 고침 빈도의 배수인 값으로 제한되지 않습니다(목표 FPS에 도달한 경우 끊김 없는 게임 플레이를 위해).
대략적인 지침은 다음과 같습니다.
낮은 틱 레이트 (10-30) |
중간 틱 레이트 (30-60) |
높은 틱 레이트 (60+) |
|---|---|---|
성능 |
복잡한 장면에서 좋은 물리적 동작 |
빠른 물리학에 좋음 |
입력에 약간의 지연 추가 |
2D 게임 시작하기 |
레이싱 게임에 적합 |
간단한 물리학적 행동 |
참고
개발하면서 언제든지 틱 속도를 변경할 수 있으며, 이는 프로젝트 설정을 변경하는 것만큼 간단합니다.
물체를 순간이동할 때 ``reset_physics_interpolation()``를 호출하세요.
대부분의 경우 보간은 두 물리 틱 사이에서 원하는 것입니다. 그러나 원하는 것이 아닐 수 있는 상황이 있습니다. 이는 처음에 개체를 배치하거나 새 위치로 이동하는 경우입니다. 여기서는 객체가 있던 위치(예: 원점)와 초기 위치 사이의 부드러운 모션을 원하지 않고 즉각적인 이동을 원합니다.
이에 대한 해결책은 Node.reset_physics_interpolation 함수를 호출하는 것입니다. 이 함수가 내부적으로 수행하는 작업은 내부적으로 저장된 객체의 *이전 변환*을 *현재 변환*과 동일하게 설정하는 것입니다. 이렇게 하면 두 개의 동일한 변환 사이를 보간할 때 움직임이 발생하지 않습니다.
이를 호출하는 것을 잊어버리더라도 대부분의 상황(특히 높은 틱율)에서는 일반적으로 문제가 되지 않습니다. 이는 게임의 다듬기 단계에 쉽게 맡길 수 있는 부분입니다. 일어날 수 있는 최악의 상황은 프레임을 이동할 때 줄무늬 동작이 나타나는 것입니다. 필요할 때 알 수 있습니다!
실제로 ``reset_physics_interpolation()``를 사용하는 방법에는 두 가지가 있습니다.
스탠딩 스타트(예: 플레이어)
늘이기 변형(Stretch transform)
애니메이션 제어하기
이전 변환과 현재 변환은 동일하므로 초기 이동이 없습니다.
이동 시작(예: 총알)
늘이기 변형(Stretch transform)
애니메이션 제어하기
모션의 첫 번째 틱 이후 예상되는 변환을 즉시 설정합니다.
이전 변환은 시작 위치가 되며 현재 변환은 시뮬레이션 틱이 이미 발생한 것처럼 작동합니다. 이렇게 하면 틱 지연이 가만히 있는 대신 즉시 개체가 움직이기 시작합니다.
중요
위에 표시된 대로 변환을 설정하고 ``reset_physics_interpolation()``를 올바른 순서로 호출했는지 확인하세요. 그렇지 않으면 원치 않는 "줄무늬"가 표시됩니다.
프로젝트 준비하기
60TPS에서 물리를 실행하려는 경우에도 보간을 철저하게 테스트하고 가장 부드러운 게임플레이를 얻으려면 물리 틱 속도를 일시적으로 10TPS와 같은 낮은 값으로 설정하는 것이 좋습니다.
게임플레이가 완벽하게 작동하지 않을 수도 있지만 이를 통해 Node.reset_physics_interpolation. 이러한 문제를 해결한 후에는 물리 틱 속도를 원하는 설정으로 다시 설정할 수 있습니다.
낮은 틱 속도로 테스트할 때의 또 다른 큰 장점은 물리 틱에 동기화되어 해결해야 할 결함을 생성하는 다른 게임 시스템을 종종 확인할 수 있다는 것입니다. 일반적인 예로는 ``_process()``에서 설정하고 수동으로 보간할 수 있는 애니메이션 블렌드 값 설정이 포함됩니다.
참고
2D에서 옵션으로 표시되는 가시적 충돌 모양의 위치는 **물리적 보간**을 고려합니다.
대조적으로, 3D에서는 눈에 보이는 충돌 모양의 위치가 물리 보간을 고려하지 않습니다. 이는 눈에 보이는 충돌 모양이 덜 부드럽게 움직이는 것처럼 보일 수 있으며 개체가 움직일 때 개체의 시각적 표현보다 약간 앞에 나타날 수 있음을 의미합니다. 이것은 버그가 아니지만 3D에서 물리 보간이 구현되는 방식의 결과입니다.