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

Unreal's UFUNCTION 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 UFUNCTION 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

UFUNCTION(

BlueprintCallable

)
Position:

Main

Type:

flag

The function can be executed in a Blueprint or Level Blueprint graph.

Unreal Documentation
UFUNCTION(

BlueprintImplementableEvent

)
Position:

Main

Type:

flag

The function can be implemented in a Blueprint or Level Blueprint graph.

Unreal Documentation
UFUNCTION(

BlueprintNativeEvent

)
Position:

Main

Type:

flag

This function is designed to be overridden by a Blueprint, but also has a default native implementation. Declares an additional function named the same as the main function, but with _Implementation added to the end, which is where code should be written. The autogenerated code will call the _Implementation method if no Blueprint override is found.

Unreal Documentation
UFUNCTION(meta=(

ForceAsFunction

))
Position:

Meta

Type:

flag

Version:

>= 5.1

Allows users to change a BlueprintImplementableEvent with no return value from an event into a function.

UFUNCTION(

BlueprintPure

)
Position:

Main

Type:

flag (Technically a flag but can be used with false to disable)

A BlueprintPure function is shown as a node with no execution pin. By default functions marked const will be exposed as pure functions. To make a const function not a pure function, use BlueprintPure=false.

Pure functions do not cache their results, so be careful when doing any non-trivial amount of work a blueprint pure function. It is good practice to avoid outputting array properties in blueprint pure functions.

The function does not affect the owning object in any way and can be executed in a Blueprint or Level Blueprint graph.

Unreal Documentation
UFUNCTION(BlueprintPure)
int32 BlueprintPureFunction();

UFUNCTION(BlueprintCallable)
int32 BlueprintCallableFunction();

UFUNCTION(BlueprintCallable)
int32 BlueprintCallableConstFunction() const;

UFUNCTION(BlueprintPure=false)
int32 BlueprintPureFalseFunction() const;

UFUNCTION(meta=(

ArrayParm

="abc"))
Position:

Meta

Type:

string

This only seems to be used in KismetArrayLibrary.h where it's used with CustomThunk-marked functions. Note that this is "ArrayParm" and not "ArrayParam".

Indicates that a BlueprintCallable function should use a Call Array Function node and that the listed parameters should be treated as wild card array properties.

Unreal Documentation
UFUNCTION(meta=(

ArrayTypeDependentParams

="abc"))
Position:

Meta

Type:

string

When ArrayParm is used, this specifier indicates one parameter which will determine the types of all parameters in the ArrayParm list.

Unreal Documentation
UFUNCTION(meta=(

AutoCreateRefTerm

="abc"))
Position:

Meta

Type:

string (Comma-separated list)

Without AutoCreateRefTerm, a reference paramter requires that the user provide it with a value, which can be annoying for parameters that have a sensible default. When a blueprint is compiled where those parameters are not supplied with a value, an error like this will be shown "The current value of the 'Color' pin is invalid: 'Color' in action 'Some Color Without Ref' must have an input wired into it ("by ref" params expect a valid input to operate on)."

Note that it's possible to set multiple ref parameters by using a comma-separated list.

The listed parameters, although passed by reference, will have an automatically created default if their pins are left disconnected. This is a convenience feature for Blueprints, often used on array pins.

Unreal Documentation
UFUNCTION(BlueprintCallable)
void SomeColorWithoutRef(const FLinearColor& Color) {}
UFUNCTION(BlueprintCallable, meta=(AutoCreateRefTerm="Color"))
void SomeColorWithRef(const FLinearColor& Color) {}

UFUNCTION(meta=(

BlueprintAutocast

))
Position:

Meta

Type:

flag

In Blueprints when you a drag a connection from pin of one type to another, Unreal can automatically cast from the incoming type to the other. BlueprintAutocast is the way to make your own Blueprint helper functions to do that cast action. BlueprintAutocast requires the function to be static, public, BlueprintPure, have at least 1 input, and have a return output. Only the first input will be considered for auto conversion, but you can have multiple.

Used only by static BlueprintPure functions from a Blueprint function library. A cast node will be automatically added for the return type and the type of the first parameter of the function.

Unreal Documentation
public:
  UFUNCTION(BlueprintPure, meta=(BlueprintAutocast))
  static EAnimal IntToAnimal(int32 Input);

UFUNCTION(meta=(

BlueprintInternalUseOnly

=true))
Position:

Meta

Type:

bool

This function is an internal implementation detail, used to implement another function or node. It is never directly exposed in a Blueprint graph.

Unreal Documentation
UFUNCTION(meta=(

BlueprintProtected

))
Position:

Meta

Type:

flag

This function can only be called on the owning Object in a Blueprint. It cannot be called on another instance.

Unreal Documentation
UFUNCTION(meta=(

CallableWithoutWorldContext

))
Position:

Meta

Type:

flag

Used for BlueprintCallable functions that have a WorldContext pin to indicate that the function can be called even if its Class does not implement the GetWorld function.

Unreal Documentation
UFUNCTION(meta=(

CommutativeAssociativeBinaryOperator

))
Position:

Meta

Type:

flag

Indicates that a BlueprintCallable function should use the Commutative Associative Binary node. This node lacks pin names, but features an Add Pin button that creates additional input pins.

Unreal Documentation
UFUNCTION(

SealedEvent

)
Position:

Main

Type:

flag

This function cannot be overridden in subclasses. The SealedEvent keyword can only be used for events. For non-event functions, declare them as static or final to seal them.

Unreal Documentation
UFUNCTION(meta=(

CustomStructureParam

="abc"))
Position:

Meta

Type:

string

The listed parameters are all treated as wildcards. This specifier requires the UFUNCTION-level specifier, CustomThunk, which will require the user to provide a custom exec function. In this function, the parameter types can be checked and the appropriate function calls can be made based on those parameter types. The base UFUNCTION should never be called, and should assert or log an error if it is. To declare a custom exec function, use the syntax DECLARE_FUNCTION(execMyFunctionName) where MyFunctionName is the name of the original function.

Unreal Documentation
UFUNCTION(meta=(

DefaultToSelf

))
Position:

Meta

Type:

flag

For BlueprintCallable functions, this indicates that the Object property's named default value should be the self context of the node.

Unreal Documentation
UFUNCTION(meta=(

DeprecatedFunction

))
Position:

Meta

Type:

flag

Any Blueprint references to this function will cause compilation warnings telling the user that the function is deprecated. You can add to the deprecation warning message (for example, to provide instructions on replacing the deprecated function) using the DeprecationMessage metadata specifier.

Unreal Documentation
UFUNCTION(meta=(

DeprecationMessage

="abc"))
Position:

Meta

Type:

string

If the function is deprecated, this message will be added to the standard deprecation warning when trying to compile a Blueprint that uses it.

Unreal Documentation
UFUNCTION(meta=(

DeterminesOutputType

="abc"))
Position:

Meta

Type:

string

The return type of the function will dynamically change to match the input that is connected to the named parameter pin. The parameter should be a templated type like TSubClassOf<X> or TSoftObjectPtr<X>, where the function's original return type is X* or a container with X* as the value type, such as TArray<X*>.

Unreal Documentation
UFUNCTION(BlueprintCallable, Category="Utilities", meta=(WorldContext="WorldContextObject", DeterminesOutputType="ActorClass", DynamicOutputParam="OutActors"))
static void GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, TArray<AActor*>& OutActors);
UFUNCTION(meta=(

ExpandEnumAsExecs

="abc"))
Position:

Meta

Type:

string (name of enum parameter)

For BlueprintCallable functions, this indicates that one input execution pin should be created for each entry in the enum used by the parameter. The parameter must be of an enumerated type that has the UENUM tag.

Unreal Documentation
UENUM()
enum class EAnimalType : uint8
{
  Cat,
  Dog,
  Rooster
};

UFUNCTION(BlueprintCallable, meta=(ExpandEnumAsExecs="Animal"))
static void SwitchAnimalByName(FString Name, EAnimalType& Animal);

UFUNCTION(meta=(

ExpandBoolAsExecs

="abc"))
Position:

Meta

Type:

string (name of bool parameter)

Note that "ReturnValue" is a special string used to refer to the return value of the function.

For BlueprintCallable functions, this indicates that one input execution pin should be created for each entry in the enum used by the parameter. The parameter must be of an enumerated type that has the UENUM tag.

Unreal Documentation
UFUNCTION(BlueprintCallable, meta=(ExpandBoolAsExecs="ReturnValue"))
static bool IsAboveFreezing(float Temperature);
UFUNCTION(BlueprintCallable, meta=(ExpandBoolAsExecs="bFreezing"))
static void IsAboveFreezing(float Temperature, bool& bFreezing);
UFUNCTION(meta=(

DynamicOutputParam

="abc"))
Position:

Meta

Type:

string (Parameter name)

UFUNCTION(BlueprintCallable, Category="Utilities", meta=(WorldContext="WorldContextObject", DeterminesOutputType="ActorClass", DynamicOutputParam="OutActors"))
static void GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, TArray<AActor*>& OutActors);
UFUNCTION(meta=(

AllowPrivateAccess

=true))
Position:

Meta

Type:

bool

UFUNCTION(meta=(

(ParameterName=DefaultValue)

="abc"))
Position:

Meta

Type:

string

Not sure how to describe this one. Technically it doesn't have a name. Use it to give a parameter a default value, and override any existing C++ default value. See the examples and screenshots for how it affects what is displayed in-editor.

UFUNCTION(BlueprintCallable, meta=(Number="99"))
void DefaultParamInMeta(int32 Number);

UFUNCTION(BlueprintCallable)
void DefaultParamInCPP(int32 Number = 99);

UFUNCTION(BlueprintCallable, meta=(Number="1"))
void DefaultParamInBoth(int32 Number = 99);
UFUNCTION(BlueprintCallable, meta=(ComponentClass="ActorComponent"))
void DefaultTSubclassValue(TSubclassOf<UActorComponent> ComponentClass);
UFUNCTION(BlueprintCallable, meta=(RectColor="(R=0,G=1,B=0,A=1)"))
void DefaultStructValue(FLinearColor RectColor);

Editor

UFUNCTION(

CallInEditor

)
Position:

Main

Type:

flag

Causes a UFUNCTION with no parameters and no return value to be shown in the details panel of object instances.

Could be useful for adding helper functions to change the values on the selected instance. For example increasing the level of an enemy by changing their stats, or filling out default values using C++.

To reiterate, only works with functions that have no parameters, and return void. BlueprintCallable is not required. Only works on instances of the class. So Actors placed in a level or data assets, not on Blueprint classes.

This works as a flag in the main position, or as a boolean in the meta position. I would stick to the Main position just because there are more examples of this in the Unreal codebase.

This function can be called in the editor on selected instances via a button in the Details panel.

Unreal Documentation
UFUNCTION(Category="Helper Functions", CallInEditor)
void AutofillData();
UFUNCTION(Category="Helper Functions", CallInEditor)
void ReticulateSplines();
UFUNCTION(Category="Helper Functions", CallInEditor)
void IncreaseLevel();
// This works
UFUNCTION(CallInEditor)
void MainPosition();
// This also works, but I wouldn't use it
UFUNCTION(meta=(CallInEditor=true))
void MetaPosition();

C++

UFUNCTION(

CustomThunk

)
Position:

Main

Type:

flag

I'm still not very familiar with this but check out KismetArrayLibrary.h for an implementation that uses it.

See CustomThunkExample.h and CustomThunkExample.cpp.

The UnrealHeaderTool code generator will not produce a thunk for this function; it is up to the user to provide one with the DECLARE_FUNCTION or DEFINE_FUNCTION macros.

Unreal Documentation

Console

UFUNCTION(

Exec

)
Position:

Main

Type:

flag

Unreal has an in-game cheat console, accessed with the tilde key by default. It's great for adding debug commands and cheats. Any UFUNCTION marked with Exec can be executed there and provided with parameters.

The classes that are supported by Exec by default are:

  • UWorld
  • UPlayerInput
  • UGameInstance
  • APlayerController
  • APawn
  • AHUD
  • AGameModeBase
  • ACheatManager
  • AGameStateBase
  • APlayerCameraManager

The function can be executed from the in-game console. Exec commands only function when declared within certain Classes.

Unreal Documentation

Appearance

UFUNCTION(meta=(

AdvancedDisplay

)
Position:

Meta

Type:

string or integer

The comma-separated list of parameters will show up as advanced pins (requiring UI expansion).

Replace N with a number, and all parameters after the Nth will show up as advanced pins (requiring UI expansion). For example, 'AdvancedDisplay=2' will mark all but the first two parameters as advanced).

Unreal Documentation
UFUNCTION(meta=(

CompactNodeTitle

="abc"))
Position:

Meta

Type:

string

Indicates that a BlueprintCallable function should display in the compact display mode, and provides the name to display in that mode.

Unreal Documentation
UFUNCTION(BlueprintPure)
FString WithoutCompactTitle(bool InBool);

UFUNCTION(BlueprintPure, meta=(CompactNodeTitle = ":)"))
FString WithCompactTitle(bool InBool);

UFUNCTION(meta=(

DisplayName

="abc"))
Position:

Meta

Type:

string

The name of this node in a Blueprint will be replaced with the value provided here, instead of the code-generated name.

Unreal Documentation
UFUNCTION(meta=(

ReturnDisplayName

="abc"))
Position:

Meta

Type:

string

Change the label on the return value from the default "Return Value" to the specified string.

It's also possible to achieve the same thing by adding a UPARAM() outside of the main UFUNCTION() specifier. See the second example for how to do it.

UFUNCTION(BlueprintCallable, Category = "Doggy Daycare", meta=(ReturnDisplayName = "Success"))
bool TryPetDog(const FName Name);
// Does the same thing but looks gross
UFUNCTION(BlueprintCallable, Category = "Doggy Daycare")
UPARAM(meta=(DisplayName="Success"))
bool TryPetDog(const FName Name);
UFUNCTION(meta=(

HidePin

="abc"))
Position:

Meta

Type:

string

For BlueprintCallable functions, this indicates that the parameter pin should be hidden from the user's view. Only one pin per function can be hidden in this manner.

Unreal Documentation
UFUNCTION(meta=(

HideSelfPin

)
Position:

Meta

Type:

Hides the "self" pin, which indicates the object on which the function is being called. The "self" pin is automatically hidden on BlueprintPure functions that are compatible with the calling Blueprint's Class. Functions that use the HideSelfPin Meta Tag frequently also use the DefaultToSelf Specifier.

Unreal Documentation
UFUNCTION(meta=(

ShortToolTip

="abc"))
Position:

Meta

Type:

string

A short tooltip that is used in some contexts where the full tooltip might be overwhelming, such as the Parent Class Picker dialog.

Unreal Documentation
UFUNCTION(meta=(

ToolTip

="abc"))
Position:

Meta

Type:

string

Overrides the automatically generated tooltip from code comments.

Unreal Documentation

Debug

UFUNCTION(meta=(

DevelopmentOnly

))
Position:

Meta

Type:

flag

Functions marked as DevelopmentOnly will only run in Development mode. This is useful for functionality like debug output, which is expected not to exist in shipped products.

Unreal Documentation
UFUNCTION(meta=(

InternalUseParam

="abc"))
Position:

Meta

Type:

string

Similar to HidePin, this hides the named parameter's pin from the user's view, and can only be used for one parameter per function.

Unreal Documentation
UFUNCTION(meta=(

KeyWords

="abc"))
Position:

Meta

Type:

string (space-separated list)

Specifies a set of keywords that can be used when searching for this function, such as when placing a node to call the function in a Blueprint Graph.

Unreal Documentation

General

UFUNCTION(meta=(

Latent

)
Position:

Meta

Type:

Related:

Indicates a latent action. Latent actions have one parameter of type FLatentActionInfo, and this parameter is named by the LatentInfo specifier.

Unreal Documentation
UFUNCTION(meta=(

LatentInfo

="abc"))
Position:

Meta

Type:

string

Related:

For Latent BlueprintCallable functions indicates which parameter is the LatentInfo parameter.

Unreal Documentation
UFUNCTION(meta=(

NativeBreakFunc

)
Position:

Meta

Type:

For BlueprintCallable functions, indicates that the function should be displayed the same way as a standard Break Struct node.

Unreal Documentation
UFUNCTION(meta=(

NotBlueprintThreadSafe

)
Position:

Meta

Type:

Only valid in Blueprint function libraries. This function will be treated as an exception to the owning Class's general BlueprintThreadSafe metadata.

Unreal Documentation
UFUNCTION(meta=(

UnsafeDuringActorConstruction

)
Position:

Meta

Type:

This function is not safe to call during Actor construction.

Unreal Documentation
UFUNCTION(meta=(

WorldContext

="abc"))
Position:

Meta

Type:

string

Used by BlueprintCallable functions to indicate which parameter determines the World in which the operation takes place.

Unreal Documentation

Materials

UFUNCTION(meta=(

MaterialParameterCollectionFunction

)
Position:

Meta

Type:

For BlueprintCallable functions, indicates that the material override node should be used.

Unreal Documentation

Network

UFUNCTION(

Server

Position:

Main

Type:

Incompatible with:

The function is only executed on the server. Declares an additional function named the same as the main function, but with _Implementation added to the end, which is where code should be written. The autogenerated code will call the _Implementation method when necessary.

Unreal Documentation
UFUNCTION(

Client

)
Position:

Main

Type:

flag

Incompatible with:

The function is only executed on the client that owns the Object on which the function is called. Declares an additional function named the same as the main function, but with _Implementation added to the end. The autogenerated code will call the _Implementation method when necessary.

Unreal Documentation
UFUNCTION(

NetMulticast

Position:

Main

Type:

The function is executed both locally on the server, and replicated to all clients, regardless of the Actor's NetOwner.

Unreal Documentation
UFUNCTION(

BlueprintAuthorityOnly

)
Position:

Main

Type:

flag

This function will only execute from Blueprint code if running on a machine with network authority (a server, dedicated server, or single-player game).

Unreal Documentation
UFUNCTION(

WithValidation

Position:

Main

Type:

Declares an additional function named the same as the main function, but with _Validate added to the end. This function takes the same parameters, and returns a bool to indicate whether or not the call to the main function should proceed.

Unreal Documentation
UFUNCTION(

BlueprintCosmetic

)
Position:

Main

Type:

flag

This function is cosmetic and will not run on dedicated servers.

Unreal Documentation
UFUNCTION(

Reliable

Position:

Main

Type:

Requires:
Opposite:

The function is replicated over the network, and is guaranteed to arrive regardless of bandwidth or network errors. Only valid when used in conjunction with Client or Server.

Unreal Documentation
UFUNCTION(

Unreliable

Position:

Main

Type:

Requires:
Opposite:

The function is replicated over the network but can fail due to bandwidth limitations or network errors. Only valid when used in conjunction with Client or Server.

Unreal Documentation
UFUNCTION(

ServiceRequest

Position:

Main

Type:

Related:

This function is an RPC (Remote Procedure Call) service request. This implies NetMulticast and Reliable.

Unreal Documentation
UFUNCTION(

ServiceResponse

Position:

Main

Type:

Related:

This function is an RPC service response. This implies NetMulticast and Reliable.

Unreal Documentation

Data Tables

UFUNCTION(meta=(

DataTablePin

="abc"))
Position:

Meta

Type:

string

Metadata to identify an DataTable Pin. Depending on which DataTable is selected, we display different RowName options

Unreal Documentation

Blueprint

UFUNCTION(meta=(

SetParam

="abc"))
Position:

Meta

Type:

string (Groups are separated by commas, params are separated by pipe.)

Requires:

Using SetParam allows you to make "templated" Blueprint functions for Set containers that work for any datatype. It requires a CustomThunk-generated function definition for it to work. For an example check BlueprintSetLibrary.

In the Blueprint function declaration you write int32 but with these metadata specifiers and CustomThunk you can make it work for any datatype.

// An arbitrary function that takes a set of any type and does something with it
UFUNCTION(BlueprintCallable, CustomThunk, meta=(SetParam="SetToCheck|Value"))
static void CheckSet(const TSet<int32>& SetToCheck, int32 Value);

UFUNCTION(meta=(

MapParam

="abc"))
Position:

Meta

Type:

string (Groups are separated by commas, params are separated by pipe.)

Requires:

Using MapParam allows you to make "templated" Blueprint functions for Map containers that work for any datatype. It requires a CustomThunk-generated function definition for it to work. For an example check BlueprintMapLibrary.

To add other parameters that match the types of the key and value of the Map, check MapKeyParam and MapValueParam.

In the Blueprint function declaration you write int32 but with these metadata specifiers and CustomThunk you can make it work for any datatype.

Metadata that flags TMap function parameters that will have their type determined at blueprint compile time

Unreal Documentation
// An arbitrary function that takes a map of any type and does something with it
UFUNCTION(BlueprintCallable, CustomThunk, meta=(MapParam="SomeMap"))
static void CheckMap(TMap<int32, int32>& SomeMap);
UFUNCTION(meta=(

MapKeyParam

="abc"))
Position:

Meta

Type:

string (Groups are separated by commas, params are separated by pipe.)

Requires:

Allows you to specify a parameter which must match the type of the Key in the matching MapParam. Can be used with MapValueParam to add parameters that must match both Key and Value types. If your function needs multiple TMap inputs, I think it's possible to specify which one the MapParam corresponds to by using commas to make groups. In the Blueprint function declaration you write int32 but with these metadata specifiers and CustomThunk you can make it work for any datatype.

Metadata that flags TMap function parameters that will have their key type determined at blueprint compile time

Unreal Documentation
UFUNCTION(BlueprintCallable, CustomThunk, meta=(MapParam="MapToCheck", MapKeyParam="KeyBlah"))
static void CheckMap(TMap<int32, int32>& MapToCheck, const int32& KeyBlah);
UFUNCTION(meta=(

MapValueParam

="abc"))
Position:

Meta

Type:

string (Groups are separated by commas, params are separated by pipe.)

Requires:

Allows you to specify a parameter which must match the type of the Value in the matching MapParam. Can be used with MapKeyParam to add parameters that must match both Key and Value types. If your function needs multiple TMap inputs, I think it's possible to specify which one the MapParam corresponds to by using commas to make groups. In the Blueprint function declaration you write int32 but with these metadata specifiers and CustomThunk you can make it work for any datatype.

Metadata that flags TMap function parameter that will have their value type determined at blueprint compile time

Unreal Documentation
UFUNCTION(BlueprintCallable, CustomThunk, meta=(MapParam="MapToCheck", MapValueParam="ValueBlah"))
static void CheckMap(TMap<int32, int32>& MapToCheck, const int32& ValueBlah);