IK
언리얼에서 IK 적용하기
먼저 발 Bone에 발보다 더 밑으로 내려간 연장선을 만들어 줍니다.
FHitResult hitResult;
UKismetSystemLibrary::LineTraceSingle
(
GetWorld(),
start, end,
UEngineTypes::ConvertToTraceType(ECC_Visibility),
true,
ignoreActors,
DrawDebugType,
hitResult,
true,
FLinearColor::Green,
FLinearColor::Red
);
연장선이 땅과 충돌된 위치에서 연장선의 끝부분까지의 길이를 구합니다.
float length = (hitResult.ImpactPoint - hitResult.TraceEnd).Size();
연장선에서 length를 빼서 땅에서 발이 떨어진 길이를 구합니다.
발이 땅속에 조금 들어가기 때문에 보정값을 줍니다.
OutDistance = OffsetDistance + length - TraceDistance;
그다음 TickComponent에서 발이 땅에 닿은 높이 Offset을 구해줍니다. 0에 가까운 값
float offset = FMath::Min(leftDistance, rightDistance);
그리고 UKismetMathLibrary::FInterpTo를 사용해
원래 발 위치에서 아까 구한 OutDistance 높이까지 보간시켜줍니다.
오른발이 내려가도록 오른발에 -를 붙여줍니다.
Data.LeftDistance.X = UKismetMathLibrary::FInterpTo(Data.LeftDistance.X, (leftDistance - offset), DeltaTime, InterpSpeed);
Data.RightDistance.X = UKismetMathLibrary::FInterpTo(Data.RightDistance.X, -(rightDistance - offset), DeltaTime, InterpSpeed);