Why is it `FTViewTarget` instead of `FViewTarget`? Naming convention question

Hi everyone,

I’ve been digging into PlayerCameraManager.h and the built-in camera blending code for my custom third-person camera system, and one naming detail really confused me.

We all know Unreal’s rule:

  • F prefix for plain USTRUCT value structs
  • T prefix is reserved for template types like TArray, TObjectPtr, etc.

But there is this struct:

USTRUCT(BlueprintType)
struct FTViewTarget
{
    GENERATED_USTRUCT_BODY()
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TViewTarget)
    TObjectPtr<class AActor> Target;
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TViewTarget)
    struct FMinimalViewInfo POV;
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TViewTarget)
    TObjectPtr<class APlayerState> PlayerState;
    // ... rest of the definition
};

It’s a regular non-template struct, so logically I expected it to be named FViewTarget, following the same pattern as FViewTargetTransitionParams right nearby in the same header.

Instead it’s FTViewTarget. The category metadata is even TViewTarget.

I understand the leading F means it’s an F-struct. But what is the purpose of that capital T after the F here? Is it:

  • Some old legacy shorthand from early UE4 days?
  • An abbreviation for Target?
  • Just an accidental historical naming inconsistency, with no special meaning?

I want to make sure I understand this correctly before I follow or avoid this pattern in my own camera state structs.

Thanks a lot for any insight from anyone who knows the history or the original intention here!

The F is the normal struct prefix. The T is not a template marker, and it is not short for Target.

Before the UE4 coding standard, plain structs used a T prefix, same as TArray already did. The camera type was TViewTarget. When structs moved to the F prefix, this one was not renamed to FViewTarget. F was added in front of the old name, which is why it is FTViewTarget, and why the UPROPERTY category next to those fields is still TViewTarget. FViewTargetTransitionParams sits in the same header with a clean F name because it was added later, under the new convention.

So FTViewTarget is an ordinary non-template USTRUCT. Nothing about the extra T should be copied. For your own camera data, use FViewTarget or FMyViewTarget.