Updating Capsule Component Location on Tick While Ragdolling

Hi, I’m currently working on implementing an ability similar to mass effect’s singularity where I use a radial force component with negative force in order to pull Pawns in and apply a status effect. Currently I have an actor named singularity with a pull component and a sphere component which enables ragdolling on all overlapping pawns. Then I override the tick function to enable the capsule components for every pawn to move alongside the ragdoll on each tick. My current issue is that my Tick function implementation is not updating the capsule position. Here’s my tick function.

Here’s my header code snippet for public functions


	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void EndSingularity();
	void OnActorOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
	void OnActorEndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);

	virtual void BeginPlay() override;

	virtual void Tick(float DeltaTime) override;

This is my Tick cpp implementation

//Not ticking for some reason
void ASSingularity::Tick(float DeltaTime)
	DrawDebugSphere(GetWorld(), GetActorLocation(), 20, 32, FColor::Green, false, 2.0f);

		TArray<AActor*> Victims;
		SphereComp->GetOverlappingActors(Victims, ASAICharacter::StaticClass());

		for (AActor* Victim : Victims)
			if (Victim != GetInstigator())
				ASAICharacter* TargetPawn = Cast<ASAICharacter>(Victim);

				USkeletalMeshComponent* MeshComp = TargetPawn->GetMesh();
				FVector Location = MeshComp->GetSocketLocation("pelvis");
				FRotator Rotation = MeshComp->GetComponentRotation();

				UCapsuleComponent* TargetCapsule = TargetPawn->GetCapsuleComponent();
				TargetCapsule->SetWorldLocation(Location, true);
				TargetCapsule->SetWorldRotation(Rotation, true);

				DrawDebugSphere(GetWorld(), TargetCapsule->GetComponentLocation(), 20, 32, FColor::Blue, false, 2.0f);


My bUpdatePosition variable is set to true in my constructor and set to false when I call the function to set all alive pawns back their AnimBp’s and set the capsule component to the final mesh location. Thank you for looking at this.

Did you add this to your constructor?

PrimaryActorTick.bCanEverTick = true;

Hahaha I just checked, and I totally overlooked it! That line completely fixed my issue. Thank you LogierJan!