Note: This page is still a work in progress. There are a lot of meta specifiers still to document!

Unreal's UPARAM Specifiers page lists all of the core specifiers and many of the metadata specifiers, but it is not an exhaustive list.

This page attempts to be an exhaustive list of all the UPARAM specifiers, giving explanations, sample code, screenshots and related links for each.

If you know of any not listed here, or see any mistakes, feel free to contact me.

Special thanks to Erekose Craft, Ben Fox, Aquanox, ATankNoMore for finding meta properties, giving feedback and giving great examples of usage.

The YAML files used to generate this documentation are available on GitHub. Feel free to submit pull requests or submit any incorrect or missing information there.

General Points

  • Tags are case insensitive, but I would recommend sticking to the case example here for readability.
  • Quotation marks are optional if the values does not have spaces. e.g. someBool=true is treated the same as someBool="true". Again, for readability I would recommend using quotation marks only around string-type properties.

Blueprint Logic

UPARAM(

DisplayName

="abc")
Position:

Main

Type:

string

Allows renaming parameters in UFUNCTION functions.

UFUNCTION(BlueprintCallable)
void MakeDog(
  UPARAM(DisplayName = "Years (dog years)") float Years,
  UPARAM(DisplayName = "Fur Color") FLinearColor Color);
UPARAM(

ref

)
Position:

Main

Type:

flag

If a UFUNCTION parameter is a non-const reference, it is displayed as an output pin by default. It's assumed that the struct will be filled.

I would think hard about what the purpose is of your function when choosing if you need to use UPARAM(). Looking at the example code below:

  • FillDogInfo takes an empty data structure that is provided to it, and fills it out. In Blueprints it is shown as an output pin.
  • UseAndFillDogInfo takes a reference to a data structure as input. That means it can change the values within the data structure. If you do not need to change the values of the data structure, then see UseDogInfo.
  • UseDogInfo takes a const reference data structure. It cannot change the values of the data.
// Fill an empty data structure
UFUNCTION(BlueprintCallable)
void FillDogInfo(FDogInfo& OutResult);

// Use existing data, add some more
UFUNCTION(BlueprintCallable)
void UseAndFillDogInfo(
    UPARAM(ref) FDogInfo& SearchParams);

// Just use existing data and don't change it
UFUNCTION(BlueprintCallable)
void UseDogInfo(const FDogInfo& SearchParams);

Pickers

UPARAM(meta=(

AllowAbstract

=true))
Position:

Meta

Type:

bool

Works exclusively with TSubclassOf. By default, TSubclassOf<T> will allow abstract choosing classes.

UFUNCTION(BlueprintCallable, Category = "Composure", meta = (DeterminesOutputType = "OutputType"))
UCompositingElementOutput* FindOutputPass(UPARAM(meta = (AllowAbstract = "false"))TSubclassOf<UCompositingElementOutput> OutputType, FName OptionalPassName = NAME_None);
UPARAM(meta=(

Categories

="abc"))
Position:

Meta

Type:

string (comma-separated list of gameplay tags)

Limits the Gameplay Tags that are selectable on the UFUNCTION. Works in the same way as the UPROPERTY Categories meta flag.

UFUNCTION(BlueprintCallable)
void SellItems(UPARAM(meta=(Categories="Inventory.Item"))FGameplayTag Itemtag, int32 Count);
UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = GameplayEffects)
virtual void UpdateActiveGameplayEffectSetByCallerMagnitude(FActiveGameplayEffectHandle ActiveHandle, UPARAM(meta=(Categories = "SetByCaller"))FGameplayTag SetByCallerTag, float NewValue);
UPARAM(meta=(

MustImplement

="abc"))
Position:

Meta

Type:

string (comma-separated list of interface script paths)

Limits the classes selectable in blueprint from TSoftClassPtr or TSubclassOf to only those that implement the named interfaces

UFUNCTION(unreliable, client, BlueprintCallable, Category="Game|Feedback")
void ClientSpawnGenericCameraLensEffect(UPARAM(meta=(MustImplement ="CameraLensEffectInterface")) TSubclassOf<class AActor>  LensEffectEmitterClass);