About Radial Force Component

Hi! The thing is that MovementComponents often control its UpdatedComponent movement. In fact, the logic of Radial Force Component is like this:

PrimitiveComponent->AddRadialForce(Origin, Radius, ForceStrength, Falloff);

// see if this is a target for a movement component
AActor* ComponentOwner = PrimitiveComponent->GetOwner();
if(ComponentOwner)
{
	TInlineComponentArray<UMovementComponent*> MovementComponents;
	ComponentOwner->GetComponents<UMovementComponent>(MovementComponents);
	for(const auto& MovementComponent : MovementComponents)
	{
		if(MovementComponent->UpdatedComponent == PrimitiveComponent)
		{
			MovementComponent->AddRadialForce(Origin, Radius, ForceStrength, Falloff);
			break;
		}
	}
}

You can see, that it do two things:

  • call PrimitiveComponent->AddRadialForce(Origin, Radius, ForceStrength, Falloff) on affected Primitive component
  • call MovementComponent->AddRadialForce(Origin, Radius, ForceStrength, Falloff) on MovementComponent that controls this Primitive component;