Xaklse
(Xaklse)
October 18, 2020, 6:53pm
8
Hi Xaklse
I had to make a local change to get smooth movement on the player for our project. Using a (quite big) spherical world seems to make the delta between old-new gravity directions too big to get a smooth transition .
Therefor I had to disable the return statement in ninjacharacter.cpp (which sets the control rotation).
Also added a rotator lerp in the movementcomponent (that still has the return statement a few lines prior).
Do you think this will have a huge impact on performance eventually? If so, what would you recommend to smoothen out the (rotational)movement? Using camera lag smoothens it out a little, but not entirely (and we rather don’t have much lag on the camera)
NinjaCharacter.cpp line 223:
if ((LastAxisZ | NewAxisZ) >= THRESH_NORMALS_ARE_PARALLEL)
{
//return;
}
NinjaCharacterMovementComponent.cpp line 5380:
// Abort if angle between new and old capsule 'up' axes almost equals to 0 degrees
if ((DesiredCapsuleUp | CurrentCapsuleUp) >= THRESH_NORMALS_ARE_PARALLEL)
{
return;
}
//// Take desired Z rotation axis of capsule, try to keep current X rotation axis of capsule
const FRotator NewRotation = FNinjaMath::MakeFromZQuat(DesiredCapsuleUp,
UpdatedComponent->GetComponentQuat()).Rotator();
**const FRotator CurrentRotation = FNinjaMath::MakeFromZQuat(CurrentCapsuleUp,
UpdatedComponent->GetComponentQuat()).Rotator();**
if (!bRotateAroundCenter)
{
float PawnRadius, PawnHalfHeight;
CharacterOwner->GetCapsuleComponent()->GetScaledCapsuleSize(PawnRadius, PawnHalfHeight);
// Rotate capsule around the origin of the bottom sphere
const float SphereHeight = PawnHalfHeight - PawnRadius;
const FVector Delta = CurrentCapsuleUp * (SphereHeight * -1.0f) + DesiredCapsuleUp * SphereHeight;
**FRotator RotationLerp = UKismetMathLibrary::RInterpTo(CurrentRotation, NewRotation, GetWorld()->GetDeltaSeconds(), 4.0f);**
// Not using MoveUpdatedComponent to bypass constraints
UpdatedComponent->MoveComponent(Delta, **RotationLerp**, true);
}
nonetheless, nice work on the update!! Especially the new debug options are really useful!
Huge performance impact? It depends on how much processing time you can spend on character movement, which is rather heavy. How many ninja characters do you have in your game?
It’s better to avoid smoothing the invisible capsule orientation and smooth the visible stuff (skeletal & camera); or make the capsule smooth with more complex logic that involves recalculation of floor-normal/capsule-axis, avoiding time-based logic.
What’s the size of the planet sphere you have? (To test with)