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...
래그돌(Ragdoll) 시스템
소개
3.1 버전부터 Godot는 래그돌 물리를 지원합니다. 래그돌은 현실적 절차 애니메이션을 만들기 위해 물리 시뮬레이션에 의존합니다. 이것은 많은 게임에서 죽음 애니메이션으로 쓰입니다.
이번 튜토리얼에서는 래그돌을 설치하기 위해 Platformer3D 데모를 사용합니다.
참고
GitHub 또는 Asset Library 를 사용해서 Platformer3D 데모를 다운로드할 수 있습니다.
이 문서 외에 여러가지 Godot 데모 프로젝트들도 살펴보면 좋습니다.
래그돌 설정하기
물리적 본 만들기
엔진의 다른 많은 기능과 마찬가지로 래그돌을 설정하는 데 사용되는 두 가지 노드가 있습니다.
A PhysicalBoneSimulator3D 노드. 이 노드는 모든 물리적 뼈의 상위이며 시뮬레이션 제어를 담당합니다.
하나 이상의 PhysicalBone3D 자식 노드. 각 노드는 봉제 인형의 단일 뼈를 나타냅니다.
Godot에서 플랫포머 데모를 열고 Robi 씬을 엽니다. Skeleton 노드를 선택하세요. 상단 바 메뉴에 스켈레톤 버튼이 나타납니다.
노드에서 시그널 연결하기
버튼을 클릭하고 Create physical skeleton 옵션을 선택하세요. Godot가 PhysicalBone 노드와 스켈레톤의 각 뼈에 대한 콜리전 모양과 핀 접합부를 생성하여 서로 연결합니다.
물리적 뼈대를 생성한 후 플레이어 씬의 씬 트리
생성된 뼈들 중 일부는 필요하지 않습니다. 예: MASTER 뼈. 그래서 우리는 그 뼈들을 제거함으로서 스켈레톤을 정리합니다.
스켈레톤 정리하기
엔진이 시뮬레이션해야 하는 각 PhysicalBone3D에 대해 성능 비용이 발생합니다. 모든 유틸리티 뼈뿐만 아니라 시뮬레이션에서 차이를 만들기에는 너무 작은 모든 뼈를 제거하고 싶을 것입니다.
예를 들어, 휴머노이드를 사용하는 경우 각 손가락에 물리적 뼈가 필요하지 않습니다. 대신 손 전체에 하나의 뼈대를 사용하거나 손바닥에 하나, 엄지손가락에 하나, 나머지 네 손가락에 마지막 하나를 사용할 수 있습니다.
PhysicalBone3D 노드: MASTER, waist, neck, ``headtracker``를 제거합니다. 이를 통해 최적화된 골격이 제공되고 래그돌을 더 쉽게 제어할 수 있습니다.
관절 및 제약 조건 조정
충돌 모양을 조정하고 나면 래그돌이 거의 준비되었습니다. 이제 더 나은 시뮬레이션을 얻으려면 핀 조인트를 조정해야 합니다. PhysicalBone3D 노드에는 기본적으로 구속되지 않은 핀 조인트가 할당되어 있습니다. 핀 조인트를 변경하려면 PhysicalBone3D 노드를 선택하고 인스펙터의 섹션에서 제약 조건 유형을 변경하세요. 여기에서 제약 조건의 방향과 제한을 변경할 수 있습니다.
관절에는 3D 편집기에도 표시되는 기즈모가 있으므로 해당 제약 조건이 실제로 작동하는 모습을 볼 수 있습니다.
PhysicalBone3D 노드를 선택한 후 검사기에서 관절 조정
팁
관절 및 충돌 모양을 편집할 때 더 나은 보기를 얻으려면 다음을 수행할 수 있습니다.
현재 작업 중이 아닌 PhysicalBone3D 노드를 숨기면 조정 중인 항목에 집중할 수 있습니다.
씬 트리 도크에서 옆에 있는 눈 아이콘을 클릭하여 캐릭터의 MeshInstance3D를 숨깁니다.
Skeleton3D 장치를 숨기면 골격을 나타내는 주황색 삼각형이 뷰포트를 어지럽히지 않고 나머지는 표시되도록 합니다. 그렇게 하려면 눈 아이콘이 닫힐 때까지 3D 편집기 뷰포트 상단에서 :menu:`보기 > Gizmos > Skeleton3D`를 클릭하세요.
3D 편집기 뷰포트 상단에 있는 지구본 아이콘을 클릭하여 미리보기 환경을 비활성화합니다.
프로젝트 설정에서 기본 클리어 컬러 프로젝트 설정을 순수 검정색으로 설정합니다. 이는 미리보기 환경이 비활성화된 경우에만 유효합니다.
3D 편집기 뷰포트의 왼쪽 상단에 있는 버튼을 사용하여 디버그 그리기 모드를 변경합니다. 및 옵션은 원래 메시를 통해 볼 수 있으므로 충돌 모양을 조정할 때 특히 유용합니다.
3D 편집기 뷰포트의 오른쪽 상단에 있는 // 버튼을 클릭하여 직교 카메라를 사용하세요.
6 가지 패턴 유형이 있습니다:
없음: 어떠한 제약도 수행하지 않습니다.
콘조인트: 볼 앤 소켓. 어깨, 엉덩이, 목에 유용합니다.
HingeJoint: 각도 제한을 제공합니다. 문 경첩처럼 생각하세요. 팔꿈치와 무릎에 유용합니다.
PinJoint: 두 몸체를 연결한 상태로 유지합니다*(기본값)*. 뼈가 "구겨지는" 현상이 발생하므로 대신 대부분의 캐릭터에 다른 관절 유형을 사용하는 것이 좋습니다.
SliderJoint: 특정 축에서 다른 뼈를 따라 하나의 뼈를 슬라이드합니다.
6DOFJoint: 가장 강력한 조인트로 선형 및 각도 제약 조건을 모두 제공하지만 구성이 가장 복잡합니다.
확실하지 않은 경우 대부분의 사용 사례를 다루는 HingeJoint 및 ConeJoint로 시작하세요.
콜리전 모양
다음 작업은 충돌 모양과 물리적 뼈의 크기를 조정하여 각 뼈가 시뮬레이션해야 하는 신체 부위와 일치하도록 하는 것입니다.
관절을 회전하면 충돌 모양도 회전하므로 관절과 제약 조건을 조정한 후에 충돌 모양을 조정하는 것이 좋습니다. 충돌 모양을 두 번 조정하지 않으려면 관절을 먼저 조정하는 것이 좋습니다.
PhysicalBone3D 노드의 하위 항목으로 여러 충돌 모양을 가질 수 있습니다. 이는 딱딱한 팔다리의 특히 복잡한 모양을 나타내는 데 유용할 수 있습니다.
팁
봉제 인형을 조정하는 동안 애니메이션 재생을 일시 중지하려면 AnimationTree 노드를 선택하고 인스펙터에서 Active 속성을 비활성화합니다. 게임 플레이 중 애니메이션 재생을 제어하므로 작업이 끝나면 다시 활성화하는 것을 잊지 마세요.
편집기에서 코드 실행하기
최종 결과물입니다:
관절 및 충돌 모양을 조정한 후의 결과(플레이어 메시는 가시성을 위해 숨겨짐)
래그돌 설정하기
이제 Ragdoll을 사용할 준비가 되었습니다. 시뮬레이션을 시작하고 봉제 인형 애니메이션을 재생하려면 PhysicalBoneSimulator3D.physical_bones_start_simulation() 메서드를 호출해야 합니다. 씬에 있는 모든 PhysicalBone3D 노드의 상위인 PhysicalBoneSimulator3D 노드에 스크립트를 연결한 다음 스크립트의 _ready 방법:
func _ready():
physical_bones_start_simulation()
public override void _Ready()
{
PhysicalBonesStartSimulation();
}
시뮬레이션을 중지하려면 PhysicalBoneSimulator3D.physical_bones_stop_simulation() 메서드를 호출하세요.
시뮬레이션을 몇 개의 뼈대로만 제한할 수도 있습니다. 이는 세계와 상호 작용할 수 있는 봉제 인형 팔다리 또는 부착물과 같은 효과를 만드는 데 유용할 수 있습니다. 그렇게 하려면 뼈대 이름(PhysicalBone3D 노드 이름이 아님)을 매개변수로 전달하세요. 뼈 이름을 보려면 PhysicalBone3D 노드를 선택한 후 인스펙터에서 Bone Name 속성을 확인하세요.
팁
이 튜토리얼에 표시된 대로 자동으로 생성된 물리적 골격을 사용하는 경우 골격 이름은 노드 이름에도 포함됩니다. 예를 들어 ``Physical Bone l-arm``에서 ``l-arm``는 뼈대 이름입니다.
func _ready():
physical_bones_start_simulation(["l-arm", "r-arm"])
public override void _Ready()
{
PhysicalBonesStartSimulation(["l-arm", "r-arm"]);
}
존재하지 않는 뼈대 이름은 오류나 경고를 인쇄하지 않습니다. 시뮬레이션을 시작할 때 아무 일도 일어나지 않으면(또는 특정 뼈만 아닌 몸 전체가 래그돌인 경우) 제공된 뼈 목록을 다시 확인하세요.
어떻게 작동하는 지의 예제입니다:
팁
부분적인 봉제 인형 시뮬레이션이 전체 애니메이션에 얼마나 강력하게 영향을 미치는지 제어하려면 모든 PhysicalBone3D 노드의 상위 요소인 PhysicalBoneSimulator3D 노드에서 영향 속성을 조정할 수 있습니다. 기본적으로 ``1.0``로 설정되어 있습니다. 이는 봉제 인형 시뮬레이션이 애니메이션의 나머지 부분을 완전히 재정의한다는 의미입니다.
콜리전 레이어와 마스크
CharacterBody3D의 캡슐이 물리 시뮬레이션을 방해하지 않도록 충돌 레이어와 마스크를 올바르게 설정했는지 확인하십시오. 플레이어가 계속해서 코인을 수집할 수 있도록 코인 씬의 충돌 레이어와 마스크도 조정해야 합니다.
레이어와 마스크는 각 노드에 대해 검사기에서 이러한 값으로 조정되어야 합니다.
``stage/grid_map.scn``의 3D 플랫폼 데모에서 GridMap을 찾을 수 있습니다. 동전의 Area3D 노드(레이어와 마스크를 조정해야 함)는 ``coin/coin.tscn``에서 찾을 수 있습니다.
팁
모든 PhysicalBone3D 노드를 빠르게 선택하려면 씬 트리 도크 상단에 있는 검색 표시줄에 ``t:PhysicalBone3D``를 입력하세요. 이렇게 하면 씬 트리가 PhysicalBone3D 노드만 표시되도록 필터링되며, 첫 번째 항목과 마지막 항목에서 :kbd:`Shift + 마우스 왼쪽 버튼`을 사용하여 한 번에 모두 선택할 수 있습니다.
그렇지 않으면 플레이어가 자체(비활성) 봉제 인형과 충돌하므로 충돌이 잘못 작동합니다. 이로 인해 플레이어가 격렬하게 튕기거나 갇힐 수 있습니다.
RigidBody3D와 마찬가지로 PhysicalBone3D는 physical_bones_add_collision_Exception() 메서드. 이는 레이어와 마스크에 의존하지 않고 특정 객체와의 충돌을 방지하는 데 사용할 수 있습니다.
더 보기
자세한 정보는 콜리전 레이어와 마스크를 읽으세요.