UClass Annotations (Python)

@unreal.uclass(), @unreal.ufunction() and @unreal.uproperty()

Updated about 4 years ago

Description

By default, ordinary Python classes, functions and properties do not get exposed to Unreal's UObject reflection system, which means standard Python classes cannot fully override Unreal base classes, standard Python functions cannot subscribe to Unreal events or delegates, and standard Python properties cannot be accessed from C++ through UObject reflection.

The tags @unreal.uclass() @unreal.ufunction() and @unreal.uproperty() are required to correctly expose classes, functions and properties to Unreal's reflection system, and provide Unreal-specific metadata, much like the UCLASS(), UFUNCTION() and UPROPERTY() defines in C++.

Parameters

The @unreal annotations in Python require a somewhat different set of parameters compared to their C++ equivalents. These are some of the parameters to the @unreal.ufunction() annotation in Python:

  • ret=<type> - Specifies the return type of the function. Python functions with the ufunction() annotation must have only one return value. Required unless override=True.

  • params=[<type>,...] - Specifies the types of the arguments to the function. Required unless override=True.

  • override=True - Specifies that this function overrides a virtual UFunction in a parent UClass, and should inherit its type specifiers. With this parameter, ret and params are no longer needed.

  • meta=dict() - Dictionary containing standard annotation parameters as seen in UFUNCTION().

Sample

@unreal.uclass()
class MyExampleObject(unreal.Object):
    @unreal.ufunction(ret=bool,params=[str],meta=dict(Category="A"))
    def is_valid_name(self,in_name):
        return bool(in_name)

Additional Sources