728x90
반응형
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으로 초기화 해주었다.
728x90
반응형