Why isn't my camera bobbing?

Following up on my previous question, I decided to create my camera shake for head bobbing motion in code because the solution to that problem was to make CameraBob a UBlueprint variable and completely forgot that the function I’m calling to play the shake requires a UCameraShake variable passed in. Now I’ve hit another brick wall.

Even though my code compiles and all pointers are valid, the camera doesn’t shake and I can’t figure out why. Here’s all the relevant code.

AAdNoctvmPlayerCharacter.h

UPROPERTY()
class UCameraShake* CameraBob;

AAdNoctvmPlayerCharacter.cpp

AAdNoctvmPlayerCharacter::AAdNoctvmPlayerCharacter(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
	// ...
	
	CameraBob = ConstructObject<UCameraShake>(UCameraShake::StaticClass(), this);
	CameraBob->OscillationDuration = 1.f;
	CameraBob->LocOscillation.Z.Amplitude = 2.f;
	CameraBob->LocOscillation.Z.Frequency = 20.f;
}

void AAdNoctvmPlayerCharacter::PerformCameraBob(float Value)
{
	AAdNoctvmPlayerController* PC = Cast<AAdNoctvmPlayerController>(Controller);
	
	if (PC && Value != 0.0f)
	{
		if (CameraBob)
		{
			PC->ClientPlayCameraShake(CameraBob->GetClass(), Value);
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Yellow, TEXT("Camera should be bobbing"));
		}
	}
}

void AAdNoctvmPlayerCharacter::MoveForward(float Value)
{
	if (Value != 0.0f)
	{
		// ...

		PerformCameraBob(Value);
	}
}

Try running it without the code below. We need to see where it’s falling short. If the Debug Message appears and it still doesn’t bob then let us know.

if(CameraBob)

I was trying to imply that I still get the debug message by saying all the pointers are valid, but just to be sure, I commented out that if statement and I still get the debug message, but it still doesn’t bob.

By the way, I tried setting bSingleInstance to 0 (false) but it’s still not working. I hope the solution isn’t right under my nose because I’m absolutely clueless, here.

So I did a test and tried using a camera animation made in Matinee and in C++, changed CameraBob to a UCameraAnim variable, did all the usual constructor stuff for referencing assets in code, and called ClientPlayCameraAnim() instead of ClientPlayCameraShake() and it works!