Unreal Engine Ragdoll Physics
1. 래그돌(Ragdoll) 이란?
래그돌 물리(Ragdoll Physics)는 캐릭터가 힘없이 날라가는 모습이 "봉제인형(Ragdoll)"처럼 연출되서 유래된 이름이며, 게임에서 캐릭터의 사망 연출을 할때 사용이 많이 된다.
2. 래그돌 적용
- 캐릭터에 Skeletal Mesh 에 Physics Asset이 있는지 확인
- Mesh의 CollisionProfile 설정
SetSimulatePhysics(true);
함수 호출
void ARagdollTestCharacter::DoRagdoll()
{
//기본으로 제공해주는 Ragdoll용 CollisionProfile로 설정
GetMesh()->SetCollisionProfileName(TEXT("Ragdoll"));
GetMesh()->SetSimulatePhysics(true);
}
단순 적용만 한다면 여기까지하면 되지만 좀더 깊게 들어가 보자.
3. 충격 가하기
사망연출을 할 때 일반적으로 마지막 공격을 받고 공격 받은 방향대로 날라가기를 원한다. 래그돌을 날리기 위해선 캐릭터에게 충격을 가해야한다. 일반적인 직선 충격을 주는 AddImpulseToAllBodiesBelow
함수로 구현해 보았다.
void ARagdollTestCharacter::DoRagdollImpulse()
{
//충돌 방향 설정 (바라보는 방향 뒤로)
FVector ImpulseDirection = GetActorRotation().Vector() * -1.0f;
ImpulseDirection.Normalize();
//충돌 세기
float ImpulseStrength = 5000.0f;
FVector FinalImpulse = ImpulseDirection * ImpulseStrength;
GetMesh()->SetPhysicsLinearVelocity(FVector::ZeroVector);
GetMesh()->AddImpulseToAllBodiesBelow(FinalImpulse, NAME_None);
}
렉돌에 충격을 가하다보면 기존 애니메이션의 속도가 더해져서 인지 가끔 날라가는 속도가 비정상적으로 빠르게 연출되는 경우가 있다. 이를 보완 하기 위해 충격을 주기전 메시의 현재속도를 0으로 초기화 해주었다.
반응형