├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ └── documentation-error.md ├── .gitignore ├── Example ├── Config │ ├── DefaultBaconEgg.ini │ ├── DefaultCheesecake.ini │ ├── DefaultEditor.ini │ ├── DefaultEngine.ini │ ├── DefaultGame.ini │ └── DefaultInput.ini ├── Content │ ├── UClass │ │ ├── BP_AdvancedClassDisplay.uasset │ │ ├── BP_AutoCollapseCategories.uasset │ │ ├── BP_AutoExpandCategories.uasset │ │ └── BP_GlobalUserConfig.uasset │ └── UProperty │ │ ├── BP_EditInlineNewExample.uasset │ │ ├── BP_InstancedStructExample.uasset │ │ ├── Struct_Animal.uasset │ │ └── Struct_Dog.uasset ├── Example.uproject └── Source │ ├── Example.Target.cs │ ├── Example │ ├── Example.Build.cs │ ├── Example.cpp │ ├── Example.h │ ├── UClass │ │ ├── AdvancedClassDisplay.h │ │ ├── AutoCollapseCategories.h │ │ ├── AutoExpandCategories.cpp │ │ ├── AutoExpandCategories.h │ │ ├── ConfigDoNotCheckDefaults.h │ │ ├── Const.cpp │ │ ├── Const.h │ │ ├── EditInlineNew.h │ │ ├── GlobalUserConfigExample.h │ │ ├── NotPlaceable.h │ │ ├── PerObjectConfig.h │ │ └── Placeable.h │ ├── UFunction │ │ ├── AutoCreateRefTermExample.h │ │ ├── BlueprintAutocastExample.h │ │ ├── CustomThunkExample.cpp │ │ └── CustomThunkExample.h │ └── UProperty │ │ ├── ConfigExample.cpp │ │ ├── ConfigExample.h │ │ ├── DataTableImportOptional.h │ │ ├── GlobalConfigExample.h │ │ ├── InstancedExample.h │ │ ├── InstancedStructExample.h │ │ ├── MyGameSettings.cpp │ │ ├── MyGameSettings.h │ │ ├── MyGameSettingsAdvanced.cpp │ │ └── MyGameSettingsAdvanced.h │ └── ExampleEditor.Target.cs ├── LICENSE ├── README.md ├── images ├── uclass │ ├── classgroup.jpg │ └── classgroup.webp ├── ufunction │ ├── autocreaterefterm.jpg │ ├── autocreaterefterm.webp │ ├── blueprintautocast-drag.png │ ├── blueprintautocast-drag.webp │ ├── blueprintautocast.png │ ├── blueprintautocast.webp │ ├── blueprintpure.jpg │ ├── blueprintpure.webp │ ├── callineditor.jpg │ ├── callineditor.webp │ ├── compactnodetitle.jpg │ ├── compactnodetitle.webp │ ├── defaultstructvalue.jpg │ ├── defaultstructvalue.webp │ ├── defaulttsubclassofvalue.jpg │ ├── defaulttsubclassofvalue.webp │ ├── defaultvalues.jpg │ ├── defaultvalues.webp │ ├── expandenumsasexecs.jpg │ ├── expandenumsasexecs.webp │ ├── parametername.jpg │ ├── parametername.webp │ ├── setparam.png │ └── setparam.webp ├── uparam │ ├── spawn-generic-camera-lens-effect.png │ ├── spawn-generic-camera-lens-effect.webp │ ├── uparam-ref.jpg │ └── uparam-ref.webp ├── uproperty │ ├── Delta.gif │ ├── advanceddisplay.gif │ ├── advanceddisplay.webp │ ├── allowpreserveratio.jpg │ ├── allowpreserveratio.webp │ ├── arraysizeenum.jpg │ ├── arraysizeenum.webp │ ├── basestruct.webp │ ├── bitmask.jpg │ ├── bitmask.webp │ ├── blueprintvisibility.jpg │ ├── blueprintvisibility.webp │ ├── category-blueprint-graph.jpg │ ├── category-blueprint-graph.webp │ ├── category.jpg │ ├── category.webp │ ├── datatableimportoptional.webp │ ├── deprecatedproperty-complex.jpg │ ├── deprecatedproperty-complex.webp │ ├── deprecatedproperty-simple.jpg │ ├── deprecatedproperty-simple.webp │ ├── displayafter.jpg │ ├── displayafter.webp │ ├── displayname-blueprint-graph.jpg │ ├── displayname-blueprint-graph.webp │ ├── displayname.jpg │ ├── displayname.webp │ ├── displaypriority.jpg │ ├── displaypriority.webp │ ├── editfixedorder.jpg │ ├── editfixedorder.webp │ ├── editfixedsize.jpg │ ├── editfixedsize.webp │ ├── excludebasestruct.webp │ ├── exposeonspawn.jpg │ ├── exposeonspawn.webp │ ├── force-inline-row.png │ ├── force-inline-row.webp │ ├── function-reference.webp │ ├── getkeyoptions.webp │ ├── getoptions.jpg │ ├── getoptions.webp │ ├── hidealphachannel-colorpicker.jpg │ ├── hidealphachannel-colorpicker.webp │ ├── hidealphachannel.jpg │ ├── hidealphachannel.webp │ ├── inline-edit-condition-toggle.gif │ ├── makeeditwidget-property.jpg │ ├── makeeditwidget-property.webp │ ├── makeeditwidget-world.jpg │ ├── makeeditwidget-world.webp │ ├── multiline.jpg │ ├── multiline.webp │ ├── noclear.jpg │ ├── noclear.webp │ ├── noresettodefault.jpg │ ├── noresettodefault.webp │ ├── passwordfield.jpg │ ├── passwordfield.webp │ ├── show-only-inner-properties.jpg │ ├── show-only-inner-properties.webp │ ├── titleproperty-format.jpg │ ├── titleproperty-format.webp │ ├── titleproperty.png │ ├── titleproperty.webp │ ├── units-conversion.gif │ ├── units.jpg │ ├── units.webp │ ├── visibility-defaults-selected.png │ ├── visibility-defaults-selected.webp │ ├── visibility-instance-selected.jpg │ └── visibility-instance-selected.webp └── ustruct │ ├── disablesplitpin.jpg │ ├── disablesplitpin.webp │ ├── hasnativebreak.jpg │ ├── hasnativebreak.webp │ ├── hasnativemake.jpg │ └── hasnativemake.webp ├── tests ├── scraper.py └── validator.py └── yaml ├── args.yml ├── uclass.yml ├── uenum.yml ├── ufunction.yml ├── uinterface.yml ├── umeta.yml ├── uparam.yml ├── uproperty.yml └── ustruct.yml /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation-error.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation error 3 | about: What is missing or what is incorrect 4 | title: "" 5 | labels: documentation 6 | assignees: benui-dev 7 | --- 8 | 9 | (Describe what is missing from the documentation, or what is incorrect) 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vsconfig 3 | 4 | # Visual Studio 2015 user specific files 5 | .vs/ 6 | 7 | # Compiled Object files 8 | *.slo 9 | *.lo 10 | *.o 11 | *.obj 12 | 13 | # Precompiled Headers 14 | *.gch 15 | *.pch 16 | 17 | # Compiled Dynamic libraries 18 | *.so 19 | *.dylib 20 | *.dll 21 | 22 | # Fortran module files 23 | *.mod 24 | 25 | # Compiled Static libraries 26 | *.lai 27 | *.la 28 | *.a 29 | *.lib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.ipa 36 | 37 | # These project files can be generated by the engine 38 | *.xcodeproj 39 | *.xcworkspace 40 | *.sln 41 | *.suo 42 | *.opensdf 43 | *.sdf 44 | *.VC.db 45 | *.VC.opendb 46 | 47 | # Precompiled Assets 48 | SourceArt/**/*.png 49 | SourceArt/**/*.tga 50 | 51 | # Binary Files 52 | Example/Binaries/* 53 | Example/Plugins/*/Binaries/* 54 | 55 | # Builds 56 | Example/Build/* 57 | 58 | # Whitelist PakBlacklist-.txt files 59 | !Build/*/ 60 | Build/*/** 61 | !Build/*/PakBlacklist*.txt 62 | 63 | # Don't ignore icon files in Build 64 | !Build/**/*.ico 65 | 66 | # Built data for maps 67 | *_BuiltData.uasset 68 | 69 | # Configuration files generated by the Editor 70 | Example/Saved/* 71 | 72 | # Compiled source files for the engine to use 73 | Example/Intermediate/* 74 | Example/Plugins/*/Intermediate/* 75 | 76 | # Cache files for the editor to use 77 | Example/DerivedDataCache/* 78 | 79 | -------------------------------------------------------------------------------- /Example/Config/DefaultBaconEgg.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | [/Script/Example.BaconEggDefaultConfigExample] 4 | ConfigExample=1 5 | GlobalConfigExample=2 6 | ConfigHierarchyWithConfig=4 7 | ConfigHierarchyWithGlobalConfig=5 8 | 9 | -------------------------------------------------------------------------------- /Example/Config/DefaultCheesecake.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Config/DefaultCheesecake.ini -------------------------------------------------------------------------------- /Example/Config/DefaultEditor.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Config/DefaultEditor.ini -------------------------------------------------------------------------------- /Example/Config/DefaultEngine.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | [/Script/EngineSettings.GameMapsSettings] 4 | GameDefaultMap=/Engine/Maps/Templates/OpenWorld 5 | 6 | [/Script/WindowsTargetPlatform.WindowsTargetSettings] 7 | DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 8 | -D3D12TargetedShaderFormats=PCD3D_SM5 9 | +D3D12TargetedShaderFormats=PCD3D_SM6 10 | -D3D11TargetedShaderFormats=PCD3D_SM5 11 | +D3D11TargetedShaderFormats=PCD3D_SM5 12 | Compiler=Default 13 | AudioSampleRate=48000 14 | AudioCallbackBufferFrameSize=1024 15 | AudioNumBuffersToEnqueue=1 16 | AudioMaxChannels=0 17 | AudioNumSourceWorkers=4 18 | SpatializationPlugin= 19 | SourceDataOverridePlugin= 20 | ReverbPlugin= 21 | OcclusionPlugin= 22 | CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0) 23 | CacheSizeKB=65536 24 | MaxChunkSizeOverrideKB=0 25 | bResampleForDevice=False 26 | MaxSampleRate=48000.000000 27 | HighSampleRate=32000.000000 28 | MedSampleRate=24000.000000 29 | LowSampleRate=12000.000000 30 | MinSampleRate=8000.000000 31 | CompressionQualityModifier=1.000000 32 | AutoStreamingThreshold=0.000000 33 | SoundCueCookQualityIndex=-1 34 | 35 | [/Script/HardwareTargeting.HardwareTargetingSettings] 36 | TargetedHardwareClass=Desktop 37 | AppliedTargetedHardwareClass=Desktop 38 | DefaultGraphicsPerformance=Maximum 39 | AppliedDefaultGraphicsPerformance=Maximum 40 | 41 | [/Script/Engine.RendererSettings] 42 | r.GenerateMeshDistanceFields=True 43 | r.DynamicGlobalIlluminationMethod=1 44 | r.ReflectionMethod=1 45 | r.Shadow.Virtual.Enable=1 46 | r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True 47 | r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8 48 | r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8 49 | 50 | [/Script/WorldPartitionEditor.WorldPartitionEditorSettings] 51 | CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet' 52 | 53 | [/Script/Engine.UserInterfaceSettings] 54 | bAuthorizeAutomaticWidgetVariableCreation=False 55 | FontDPIPreset=Standard 56 | FontDPI=72 57 | 58 | [/Script/Engine.Engine] 59 | +ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/Example") 60 | +ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/Example") 61 | 62 | [/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] 63 | bEnablePlugin=True 64 | bAllowNetworkConnection=True 65 | SecurityToken=BCCA494547EC11580A553A8E0BFAD937 66 | bIncludeInShipping=False 67 | bAllowExternalStartInShipping=False 68 | bCompileAFSProject=False 69 | bUseCompression=False 70 | bLogFiles=False 71 | bReportStats=False 72 | ConnectionType=USBOnly 73 | bUseManualIPAddress=False 74 | ManualIPAddress= 75 | 76 | -------------------------------------------------------------------------------- /Example/Config/DefaultGame.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GeneralProjectSettings] 2 | ProjectID=4319E6F346EF7B232CC7B2AB8ED372A3 3 | 4 | [/Script/Example.GameConfigExample] 5 | ConfigHierarchyEditable=5 6 | 7 | [/Script/Example.GameDefaultConfigExample] 8 | ConfigExample=1 9 | GlobalConfigExample=2 10 | ConfigHierarchyWithConfig=4 11 | ConfigHierarchyWithGlobalConfig=5 12 | 13 | [/Script/Example.MyConfigExample] 14 | ConfigHierarchyWithConfig=3 15 | ConfigHierarchyWithGlobalConfig=4 16 | 17 | -------------------------------------------------------------------------------- /Example/Config/DefaultInput.ini: -------------------------------------------------------------------------------- 1 | [/Script/Engine.InputSettings] 2 | -AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 3 | -AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 4 | -AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 5 | -AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 6 | -AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) 7 | -AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) 8 | -AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) 9 | +AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 10 | +AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 11 | +AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 12 | +AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 13 | +AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) 14 | +AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) 15 | +AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) 16 | +AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 17 | +AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 18 | +AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 19 | +AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 20 | +AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 21 | +AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 22 | +AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 23 | +AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 24 | +AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 25 | +AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 26 | +AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 27 | +AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 28 | +AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 29 | +AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 30 | +AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 31 | +AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 32 | +AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 33 | +AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 34 | +AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 35 | +AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 36 | +AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 37 | +AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 38 | +AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 39 | +AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 40 | +AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 41 | +AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 42 | +AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 43 | +AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 44 | +AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 45 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 46 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 47 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 48 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 49 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 50 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 51 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 52 | +AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 53 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 54 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 55 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 56 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 57 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 58 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 59 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 60 | +AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 61 | bAltEnterTogglesFullscreen=True 62 | bF11TogglesFullscreen=True 63 | bUseMouseForTouch=False 64 | bEnableMouseSmoothing=True 65 | bEnableFOVScaling=True 66 | bCaptureMouseOnLaunch=True 67 | bEnableLegacyInputScales=True 68 | bEnableMotionControls=True 69 | bFilterInputByPlatformUser=False 70 | bShouldFlushPressedKeysOnViewportFocusLost=True 71 | bAlwaysShowTouchInterface=False 72 | bShowConsoleOnFourFingerTap=True 73 | bEnableGestureRecognizer=False 74 | bUseAutocorrect=False 75 | DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown 76 | DefaultViewportMouseLockMode=LockOnCapture 77 | FOVScale=0.011110 78 | DoubleClickTime=0.200000 79 | DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput 80 | DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent 81 | DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks 82 | -ConsoleKeys=Tilde 83 | +ConsoleKeys=Tilde 84 | +ConsoleKeys=Caret 85 | 86 | -------------------------------------------------------------------------------- /Example/Content/UClass/BP_AdvancedClassDisplay.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UClass/BP_AdvancedClassDisplay.uasset -------------------------------------------------------------------------------- /Example/Content/UClass/BP_AutoCollapseCategories.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UClass/BP_AutoCollapseCategories.uasset -------------------------------------------------------------------------------- /Example/Content/UClass/BP_AutoExpandCategories.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UClass/BP_AutoExpandCategories.uasset -------------------------------------------------------------------------------- /Example/Content/UClass/BP_GlobalUserConfig.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UClass/BP_GlobalUserConfig.uasset -------------------------------------------------------------------------------- /Example/Content/UProperty/BP_EditInlineNewExample.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UProperty/BP_EditInlineNewExample.uasset -------------------------------------------------------------------------------- /Example/Content/UProperty/BP_InstancedStructExample.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UProperty/BP_InstancedStructExample.uasset -------------------------------------------------------------------------------- /Example/Content/UProperty/Struct_Animal.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UProperty/Struct_Animal.uasset -------------------------------------------------------------------------------- /Example/Content/UProperty/Struct_Dog.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/Example/Content/UProperty/Struct_Dog.uasset -------------------------------------------------------------------------------- /Example/Example.uproject: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "EngineAssociation": "5.5", 4 | "Category": "", 5 | "Description": "", 6 | "Modules": [ 7 | { 8 | "Name": "Example", 9 | "Type": "Runtime", 10 | "LoadingPhase": "Default" 11 | } 12 | ], 13 | "Plugins": [ 14 | { 15 | "Name": "ModelingToolsEditorMode", 16 | "Enabled": true, 17 | "TargetAllowList": [ 18 | "Editor" 19 | ] 20 | }, 21 | { 22 | "Name": "StructUtils", 23 | "Enabled": true, 24 | "TargetAllowList": [ 25 | "Editor" 26 | ] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /Example/Source/Example.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class ExampleTarget : TargetRules 7 | { 8 | public ExampleTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Game; 11 | DefaultBuildSettings = BuildSettingsVersion.V4; 12 | IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_3; 13 | ExtraModuleNames.Add("Example"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Example/Source/Example/Example.Build.cs: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | 5 | public class Example : ModuleRules 6 | { 7 | public Example(ReadOnlyTargetRules Target) : base(Target) 8 | { 9 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] 12 | { 13 | "Core", 14 | "CoreUObject", 15 | "Engine", 16 | "InputCore", 17 | "StructUtils", 18 | "DeveloperSettings" 19 | }); 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Source/Example/Example.cpp: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "Example.h" 4 | #include "Modules/ModuleManager.h" 5 | 6 | IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, Example, "Example" ); 7 | -------------------------------------------------------------------------------- /Example/Source/Example/Example.h: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | 7 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/AdvancedClassDisplay.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "AdvancedClassDisplay.generated.h" 5 | 6 | UCLASS(AdvancedClassDisplay, Blueprintable) 7 | class UAdvancedClassDisplayExample : public UObject 8 | { 9 | public: 10 | GENERATED_BODY() 11 | 12 | UPROPERTY(EditAnywhere) 13 | int32 SomeNumber = 1; 14 | 15 | UPROPERTY(EditAnywhere) 16 | FString SomeText = "Hello World!"; 17 | }; 18 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/AutoCollapseCategories.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "AutoCollapseCategories.generated.h" 5 | 6 | UCLASS(AutoCollapseCategories="Example", Blueprintable) 7 | class UAutoCollapseCategoriesExample : public UObject 8 | { 9 | public: 10 | GENERATED_BODY() 11 | 12 | UPROPERTY(EditAnywhere, Category="Not Example") 13 | int32 SomeNumber = 1; 14 | 15 | UPROPERTY(EditAnywhere, Category="Not Example") 16 | FString SomeText = "Hello World!"; 17 | 18 | UPROPERTY(EditAnywhere, Category="Example") 19 | FString TextWithinExample = "Hello World!"; 20 | }; 21 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/AutoExpandCategories.cpp: -------------------------------------------------------------------------------- 1 | #include "AutoExpandCategories.h" 2 | 3 | AExampleE::AExampleE() 4 | { 5 | PrimaryActorTick.bCanEverTick = false; 6 | 7 | ExampleComponent = CreateDefaultSubobject(TEXT("ExampleComponent")); 8 | } 9 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/AutoExpandCategories.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "GameFramework/Actor.h" 5 | #include "AutoExpandCategories.generated.h" 6 | 7 | UCLASS(meta=(AutoExpandCategories="Example"), Blueprintable) 8 | class UAutoExpandCategoriesExample : public UObject 9 | { 10 | public: 11 | GENERATED_BODY() 12 | 13 | UPROPERTY(EditAnywhere, Category="Not Example") 14 | int32 SomeNumber = 1; 15 | 16 | UPROPERTY(EditAnywhere, Category="Not Example") 17 | FString SomeText = "Hello World!"; 18 | 19 | UPROPERTY(EditAnywhere, Category="Example") 20 | FString TextWithinExample = "Hello World!"; 21 | }; 22 | 23 | USTRUCT() 24 | struct FExampleStruct 25 | { 26 | GENERATED_BODY() 27 | 28 | UPROPERTY(EditAnywhere, Category="Colors") 29 | FColor Color; 30 | 31 | UPROPERTY(EditAnywhere, Category="Beans") 32 | FColor Beans; 33 | }; 34 | 35 | UCLASS(AutoExpandCategories="World Partition", AutoCollapseCategories="Replication,Rendering") 36 | class AAutoExpandCategoriesActorExample : public AActor 37 | { 38 | public: 39 | GENERATED_BODY() 40 | 41 | UPROPERTY(EditAnywhere, Category="Some Struct") 42 | FExampleStruct ExampleStruct; 43 | 44 | UPROPERTY(EditAnywhere, Category="Hello Struct") 45 | FExampleStruct AnotherStruct; 46 | 47 | UPROPERTY(EditAnywhere, Category="Not Example") 48 | int32 SomeNumber = 1; 49 | 50 | UPROPERTY(EditAnywhere, Category="Not Example") 51 | FString SomeText = "Hello World!"; 52 | 53 | UPROPERTY(EditAnywhere, Category="Example") 54 | FString TextWithinExample = "Hello World!"; 55 | }; 56 | 57 | UCLASS(meta=(AutoExpandCategories="World Partition", AutoCollapseCategories="Replication,Rendering")) 58 | class AAutoExpandCategoriesMetadataActorExample : public AActor 59 | { 60 | public: 61 | GENERATED_BODY() 62 | 63 | UPROPERTY(EditAnywhere, Category="Some Struct") 64 | FExampleStruct ExampleStruct; 65 | 66 | UPROPERTY(EditAnywhere, Category="Hello Struct") 67 | FExampleStruct AnotherStruct; 68 | 69 | UPROPERTY(EditAnywhere, Category="Not Example") 70 | int32 SomeNumber = 1; 71 | 72 | UPROPERTY(EditAnywhere, Category="Not Example") 73 | FString SomeText = "Hello World!"; 74 | 75 | UPROPERTY(EditAnywhere, Category="Example") 76 | FString TextWithinExample = "Hello World!"; 77 | }; 78 | 79 | /** Doesn't work */ 80 | UCLASS(meta=(AutoExpandCategories="World Partition", AutoCollapseCategories="Replication,Rendering")) 81 | class AExampleA : public AActor 82 | { 83 | public: 84 | GENERATED_BODY() 85 | 86 | UPROPERTY(EditAnywhere, Category="Example") 87 | FString TextWithinExample = "Hello World!"; 88 | }; 89 | 90 | UCLASS(AutoExpandCategories=(Example,Cooking), AutoCollapseCategories=(Rendering,Collision)) 91 | class AExampleB : public AActor 92 | { 93 | public: 94 | GENERATED_BODY() 95 | 96 | UPROPERTY(EditAnywhere, Category="Example") 97 | FString TextWithinExample = "Hello World!"; 98 | }; 99 | 100 | UCLASS(AutoExpandCategories="Example", AutoCollapseCategories=(Rendering)) 101 | class AExampleC : public AActor 102 | { 103 | public: 104 | GENERATED_BODY() 105 | 106 | UPROPERTY(EditAnywhere, Category="Example") 107 | FString TextWithinExample = "Hello World!"; 108 | }; 109 | 110 | UCLASS(AutoExpandCategories=(ChildActorComponent), HideCategories=(Rendering,Replication,Collision,HLOD,Physics,Networking,Input,Actor,Cooking,LevelInstance,Streaming,DataLayers)) 111 | class AExampleD : public AActor 112 | { 113 | public: 114 | GENERATED_BODY() 115 | 116 | UPROPERTY(EditAnywhere, Category="Example") 117 | UChildActorComponent* ChildActorComponent; 118 | }; 119 | 120 | UCLASS(AutoExpandCategories=(ExampleComponent), HideCategories=(Rendering,Replication,Collision,HLOD,Physics,Networking,Input,Actor,Cooking,LevelInstance,Streaming,DataLayers)) 121 | class AExampleE : public AActor 122 | { 123 | public: 124 | GENERATED_BODY() 125 | 126 | AExampleE(); 127 | 128 | UPROPERTY(EditAnywhere, Category="Example") 129 | UExampleComponent* ExampleComponent; 130 | }; 131 | 132 | 133 | UCLASS() 134 | class UExampleComponent : public UActorComponent 135 | { 136 | public: 137 | GENERATED_BODY() 138 | 139 | UPROPERTY(EditAnywhere, Category="Example Component Here") 140 | FColor Color; 141 | }; 142 | 143 | UCLASS(CollapseCategories) 144 | class AExampleF : public AActor 145 | { 146 | public: 147 | GENERATED_BODY() 148 | 149 | UPROPERTY(EditAnywhere, Category="Example") 150 | UExampleComponent* ExampleComponent; 151 | }; 152 | 153 | UCLASS(meta=(PrioritizeCategories="Cooking")) 154 | class AExampleG : public AActor 155 | { 156 | public: 157 | GENERATED_BODY() 158 | 159 | UPROPERTY(EditAnywhere, Category="Example") 160 | UExampleComponent* ExampleComponent; 161 | }; 162 | 163 | UCLASS(AutoExpandCategories="Example Cooking") 164 | class AExampleH : public AActor 165 | { 166 | public: 167 | GENERATED_BODY() 168 | 169 | UPROPERTY(EditAnywhere, Category="Example") 170 | FString TextWithinExample = "Hello World!"; 171 | }; 172 | 173 | UCLASS(EditInlineNew, BlueprintType) 174 | class UExampleInlineA : public UObject 175 | { 176 | public: 177 | GENERATED_BODY() 178 | 179 | UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Things") 180 | int32 SomeNumber = 1; 181 | 182 | UPROPERTY(EditAnywhere, Category="Stuff") 183 | FString SomeText = "Hello World!"; 184 | UPROPERTY(EditAnywhere, Category="Stuff") 185 | FColor SomeColor; 186 | }; 187 | 188 | UCLASS(Blueprintable, AutoExpandCategories=(Things), AutoCollapseCategories=(Stuff)) 189 | class UExampleInlineOuterA : public UObject 190 | { 191 | public: 192 | GENERATED_BODY() 193 | 194 | UPROPERTY(EditAnywhere, Instanced) 195 | TObjectPtr EditInlineNewExample; 196 | 197 | UPROPERTY(EditAnywhere, Instanced) 198 | TArray EditInlineNewExampleArray; 199 | }; 200 | 201 | UCLASS(EditInlineNew, BlueprintType, AutoExpandCategories=(Things)) 202 | class UExampleInlineB : public UObject 203 | { 204 | public: 205 | GENERATED_BODY() 206 | 207 | UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Things") 208 | int32 SomeNumber = 1; 209 | 210 | UPROPERTY(EditAnywhere, Category="Stuff") 211 | FString SomeText = "Hello World!"; 212 | UPROPERTY(EditAnywhere, Category="Stuff") 213 | FColor SomeColor; 214 | }; 215 | 216 | UCLASS(Blueprintable) 217 | class UExampleInlineOuterB : public UObject 218 | { 219 | public: 220 | GENERATED_BODY() 221 | 222 | UPROPERTY(EditAnywhere, Instanced) 223 | TObjectPtr EditInlineNewExample; 224 | 225 | UPROPERTY(EditAnywhere, Instanced) 226 | TArray EditInlineNewExampleArray; 227 | }; 228 | 229 | UCLASS(EditInlineNew, BlueprintType) 230 | class UExampleInlineC : public UObject 231 | { 232 | public: 233 | GENERATED_BODY() 234 | 235 | UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Things") 236 | int32 SomeNumber = 1; 237 | 238 | UPROPERTY(EditAnywhere, Category="Stuff") 239 | FString SomeText = "Hello World!"; 240 | UPROPERTY(EditAnywhere, Category="Stuff") 241 | FColor SomeColor; 242 | }; 243 | 244 | UCLASS(Blueprintable, AutoExpandCategories=(SomeNumber)) 245 | class UExampleInlineOuterC : public UObject 246 | { 247 | public: 248 | GENERATED_BODY() 249 | 250 | UPROPERTY(EditAnywhere, Instanced) 251 | TObjectPtr EditInlineNewExample; 252 | 253 | UPROPERTY(EditAnywhere, Instanced) 254 | TArray EditInlineNewExampleArray; 255 | }; 256 | 257 | UCLASS(Blueprintable, AutoExpandCategories=(EditInlineNewExample)) 258 | class UExampleInlineOuterD : public UObject 259 | { 260 | public: 261 | GENERATED_BODY() 262 | 263 | UPROPERTY(EditAnywhere, Instanced) 264 | TObjectPtr EditInlineNewExample; 265 | 266 | UPROPERTY(EditAnywhere, Instanced) 267 | TArray EditInlineNewExampleArray; 268 | }; 269 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/ConfigDoNotCheckDefaults.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "GameFramework/Actor.h" 5 | #include "ConfigDoNotCheckDefaults.generated.h" 6 | 7 | UCLASS(config=Engine, ConfigDoNotCheckDefaults) 8 | class UConfigDoNotCheckDefaultsExample : public UObject 9 | { 10 | public: 11 | GENERATED_BODY() 12 | 13 | UPROPERTY(Config, EditAnywhere) 14 | int32 ExampleInt = 1; 15 | 16 | UPROPERTY(Config, EditAnywhere) 17 | FString ExampleString = "Hello world!"; 18 | }; 19 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/Const.cpp: -------------------------------------------------------------------------------- 1 | #include "Const.h" 2 | 3 | void UConstExample::MyBlueprintNativeEvent_Implementation() const 4 | { 5 | UE_LOG(LogTemp, Warning, TEXT("Hello")) 6 | } 7 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/Const.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "Const.generated.h" 5 | 6 | UCLASS(Const, Blueprintable) 7 | class UConstExample : public UObject 8 | { 9 | public: 10 | GENERATED_BODY() 11 | 12 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 13 | int32 SomeNumber = 1; 14 | 15 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 16 | FString SomeText = "Hello World!"; 17 | 18 | /** Even though this is marked as BlueprintReadWrite, the UCLASS(Const) changes it to BlueprintReadOnly */ 19 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 20 | FString TextWithinExample = "Hello World!"; 21 | 22 | UFUNCTION(BlueprintImplementableEvent) 23 | void MyBlueprintImplementableEvent() const; 24 | 25 | UFUNCTION(BlueprintNativeEvent) 26 | void MyBlueprintNativeEvent() const; 27 | }; 28 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/EditInlineNew.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "EditInlineNew.generated.h" 5 | 6 | UCLASS(EditInlineNew, BlueprintType) 7 | class UEditInlineNewExample : public UObject 8 | { 9 | public: 10 | GENERATED_BODY() 11 | 12 | UPROPERTY(EditAnywhere) 13 | int32 SomeNumber = 1; 14 | 15 | UPROPERTY(EditAnywhere) 16 | FString SomeText = "Hello World!"; 17 | }; 18 | 19 | UCLASS(Blueprintable) 20 | class UEditInlineNewOuterExample : public UObject 21 | { 22 | public: 23 | GENERATED_BODY() 24 | 25 | UPROPERTY(EditAnywhere, Instanced) 26 | TObjectPtr EditInlineNewExample; 27 | 28 | UPROPERTY(EditAnywhere, Instanced) 29 | TArray EditInlineNewExampleArray; 30 | }; 31 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/GlobalUserConfigExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "GlobalUserConfigExample.generated.h" 5 | 6 | UCLASS(config=Engine, GlobalUserConfig, Blueprintable) 7 | class UGlobalUserConfigExample : public UObject 8 | { 9 | public: 10 | GENERATED_BODY() 11 | 12 | UPROPERTY(GlobalConfig, EditAnywhere) 13 | int32 GlobalConfig = 1; 14 | }; 15 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/NotPlaceable.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "GameFramework/Actor.h" 4 | #include "NotPlaceable.generated.h" 5 | 6 | UCLASS(NotPlaceable, Blueprintable) 7 | class ANotPlaceableExample : public AActor 8 | { 9 | public: 10 | GENERATED_BODY() 11 | 12 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 13 | int32 SomeNumber = 1; 14 | }; 15 | -------------------------------------------------------------------------------- /Example/Source/Example/UClass/PerObjectConfig.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "Engine/DeveloperSettings.h" 5 | #include "PerObjectConfig.generated.h" 6 | 7 | UCLASS(config=Game, PerObjectConfig, DefaultToInstanced) 8 | class UPerObjectConfigExample : public UObject 9 | { 10 | public: 11 | GENERATED_BODY() 12 | 13 | UPROPERTY(Config, EditAnywhere) 14 | int32 ExampleInt = 1; 15 | 16 | UPROPERTY(Config, EditAnywhere) 17 | FString ExampleString = "Hello world!"; 18 | }; 19 | 20 | UCLASS(config=Game, PerObjectConfig, EditInlineNew) 21 | class UPerObjectConfigEditInlineNewExample : public UObject 22 | { 23 | public: 24 | GENERATED_BODY() 25 | 26 | UPROPERTY(Config, EditAnywhere) 27 | int32 ExampleInt = 1; 28 | 29 | UPROPERTY(Config, EditAnywhere) 30 | FString ExampleString = "Hello world!"; 31 | }; 32 | 33 | UCLASS(config=Game, Category="PerObjectSettings") 34 | class UPerObjectSettingsExample : public UDeveloperSettings 35 | { 36 | GENERATED_BODY() 37 | 38 | public: 39 | UPerObjectSettingsExample(const FObjectInitializer& ObjectInitializer) 40 | : Super(ObjectInitializer) 41 | { 42 | // Large text for where settings should be grouped on the left 43 | CategoryName = "Project"; 44 | // Smaller sub-heading for grouping 45 | SectionName = "Per Object Config"; 46 | } 47 | 48 | UPROPERTY(EditAnywhere, Instanced) 49 | TObjectPtr PerObjectConfig; 50 | 51 | UPROPERTY(EditAnywhere) 52 | TObjectPtr EditInlineNewExample; 53 | 54 | UPROPERTY(EditAnywhere, Instanced) 55 | TArray PerObjectConfigArray; 56 | }; -------------------------------------------------------------------------------- /Example/Source/Example/UClass/Placeable.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "GameFramework/Actor.h" 4 | #include "Placeable.generated.h" 5 | 6 | UCLASS(Placeable, Blueprintable) 7 | class APlaceableExample : public AActor 8 | { 9 | public: 10 | GENERATED_BODY() 11 | 12 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 13 | int32 SomeNumber = 1; 14 | }; 15 | 16 | /** An actor with neither Placeable nor NonPlaceable */ 17 | UCLASS(Blueprintable) 18 | class ANoPlaceableSpecifierExample : public AActor 19 | { 20 | public: 21 | GENERATED_BODY() 22 | 23 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 24 | int32 SomeNumber = 1; 25 | }; 26 | -------------------------------------------------------------------------------- /Example/Source/Example/UFunction/AutoCreateRefTermExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "AutoCreateRefTermExample.generated.h" 4 | 5 | UCLASS() 6 | class UAutoCreateRefTermExample : public UObject 7 | { 8 | GENERATED_BODY() 9 | 10 | UFUNCTION(BlueprintCallable) 11 | void SomeColorWithoutRef(const FLinearColor& Color) {} 12 | 13 | UFUNCTION(BlueprintCallable, meta=(AutoCreateRefTerm="Color")) 14 | void SomeColorWithRef(const FLinearColor& Color) {} 15 | }; 16 | -------------------------------------------------------------------------------- /Example/Source/Example/UFunction/BlueprintAutocastExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "BlueprintAutocastExample.generated.h" 4 | 5 | UENUM(BlueprintType) 6 | enum class EAnimal : uint8 7 | { 8 | Cat, 9 | Dog, 10 | Walrus 11 | }; 12 | 13 | UCLASS() 14 | class UBlueprintAutocastExample : public UObject 15 | { 16 | GENERATED_BODY() 17 | 18 | public: 19 | // Note function must fulfill: 20 | // - Public 21 | // - Static 22 | // - BlueprintPure 23 | // - Return type 24 | UFUNCTION(BlueprintPure) 25 | static int32 AutocastAnimalToInteger(EAnimal Animal) { return 0; } 26 | }; 27 | -------------------------------------------------------------------------------- /Example/Source/Example/UFunction/CustomThunkExample.cpp: -------------------------------------------------------------------------------- 1 | #include "CustomThunkExample.h" 2 | 3 | DEFINE_FUNCTION(UCustomThunkExample::execSum) 4 | { 5 | // This from Eren: 6 | // https://gist.github.com/intaxwashere/e9b1f798427686b46beab2521d7efbcf 7 | 8 | // this macro expands to: 9 | // float A; 10 | // Stack.StepCompiledIn(&A); 11 | PARAM_PASSED_BY_VAL(A, FFloatProperty, float); 12 | 13 | // this macro expands to: 14 | // float B; 15 | // Stack.StepCompiledIn(&B); 16 | PARAM_PASSED_BY_VAL(B, FFloatProperty, float); 17 | 18 | // sometimes, depending on your parameter type, you might need to call something else than PARAM_PASSED_BY_VAL 19 | // see Script.h and .gen.cpp files for further details. 20 | 21 | // increment instruction pointer unless it's null. 22 | // this is required to mark we finished traversing parameters through stack. 23 | P_FINISH; 24 | 25 | P_NATIVE_BEGIN; // this macro lets profiler/insights know we're now evaluating a native logic, so it wont be displayed as Blueprint time. 26 | 27 | const float Result = A + B; 28 | // we know our return type is float, and RESULT_PARAM is a void* that points to the return parameter of this function in the "parms memory" 29 | // it's size is same as float too, because thats how BPVM works, so we want to re-interpret it as float and set our result variable to it. 30 | *reinterpret_cast(RESULT_PARAM) = Result; 31 | 32 | P_NATIVE_END; // let profiler know native logic has ended. 33 | } -------------------------------------------------------------------------------- /Example/Source/Example/UFunction/CustomThunkExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CustomThunkExample.generated.h" 4 | 5 | UCLASS() 6 | class UCustomThunkExample : public UObject 7 | { 8 | GENERATED_BODY() 9 | 10 | UFUNCTION(BlueprintCallable, CustomThunk) 11 | float Sum(float A, double B); 12 | 13 | private: 14 | DECLARE_FUNCTION(execSum); 15 | }; -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/ConfigExample.cpp: -------------------------------------------------------------------------------- 1 | #include "ConfigExample.h" 2 | 3 | UGameConfigExample::UGameConfigExample() 4 | { 5 | CategoryName = "Example Project"; 6 | SectionName = "Config Example"; 7 | } 8 | 9 | UGameDefaultConfigExample::UGameDefaultConfigExample(const FObjectInitializer& ObjectInitializer) 10 | : Super(ObjectInitializer) 11 | { 12 | 13 | } 14 | 15 | UBaconEggDefaultConfigExample::UBaconEggDefaultConfigExample() 16 | { 17 | CategoryName = "Example Project"; 18 | } 19 | 20 | -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/ConfigExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Engine/DeveloperSettings.h" 4 | #include "ConfigExample.generated.h" 5 | 6 | UCLASS(config=Game) 7 | class UGameConfigExample : public UDeveloperSettings 8 | { 9 | GENERATED_BODY() 10 | 11 | public: 12 | UGameConfigExample(); 13 | 14 | protected: 15 | UPROPERTY(Config, EditAnywhere) 16 | int32 ConfigExample = 0; 17 | 18 | UPROPERTY(GlobalConfig, EditAnywhere) 19 | int32 GlobalConfigExample = 0; 20 | 21 | UPROPERTY(EditAnywhere, meta=(ConfigHierarchyEditable)) 22 | int32 ConfigHierarchyEditable = 0; 23 | 24 | UPROPERTY(Config, EditAnywhere, meta=(ConfigHierarchyEditable)) 25 | int32 ConfigHierarchyWithConfig = 0; 26 | 27 | UPROPERTY(GlobalConfig, EditAnywhere, meta=(ConfigHierarchyEditable)) 28 | int32 ConfigHierarchyWithGlobalConfig = 0; 29 | }; 30 | 31 | UCLASS(config=Game, DefaultConfig) 32 | class UGameDefaultConfigExample : public UDeveloperSettings 33 | { 34 | GENERATED_BODY() 35 | UGameDefaultConfigExample(const FObjectInitializer& ObjectInitializer); 36 | 37 | protected: 38 | UPROPERTY(Config, EditAnywhere) 39 | int32 ConfigExample = 0; 40 | 41 | UPROPERTY(GlobalConfig, EditAnywhere) 42 | int32 GlobalConfigExample = 0; 43 | 44 | UPROPERTY(EditAnywhere, meta=(ConfigHierarchyEditable)) 45 | int32 ConfigHierarchyEditable = 0; 46 | 47 | UPROPERTY(Config, EditAnywhere, meta=(ConfigHierarchyEditable)) 48 | int32 ConfigHierarchyWithConfig = 0; 49 | 50 | UPROPERTY(GlobalConfig, EditAnywhere, meta=(ConfigHierarchyEditable)) 51 | int32 ConfigHierarchyWithGlobalConfig = 0; 52 | }; 53 | 54 | UCLASS(config=BaconEgg, DefaultConfig) 55 | class UBaconEggDefaultConfigExample : public UDeveloperSettings 56 | { 57 | GENERATED_BODY() 58 | 59 | public: 60 | UBaconEggDefaultConfigExample(); 61 | 62 | protected: 63 | UPROPERTY(Config, EditAnywhere) 64 | int32 ConfigExample = 0; 65 | 66 | UPROPERTY(GlobalConfig, EditAnywhere) 67 | int32 GlobalConfigExample = 0; 68 | 69 | UPROPERTY(EditAnywhere, meta=(ConfigHierarchyEditable)) 70 | int32 ConfigHierarchyEditable = 0; 71 | 72 | UPROPERTY(Config, EditAnywhere, meta=(ConfigHierarchyEditable)) 73 | int32 ConfigHierarchyWithConfig = 0; 74 | 75 | UPROPERTY(GlobalConfig, EditAnywhere, meta=(ConfigHierarchyEditable)) 76 | int32 ConfigHierarchyWithGlobalConfig = 0; 77 | }; 78 | 79 | UCLASS(config=Cheesecake) 80 | class UCheesecakeConfigExample : public UDeveloperSettings 81 | { 82 | GENERATED_BODY() 83 | 84 | UPROPERTY(Config) 85 | int32 CheesecakeConfigExample; 86 | 87 | UPROPERTY(GlobalConfig) 88 | int32 CheesecakeGlobalConfigExample; 89 | 90 | UPROPERTY(meta=(ConfigHierarchyEditable)) 91 | int32 CheesecakeConfigHierarchyEditable; 92 | }; 93 | 94 | UCLASS(config=Something, DefaultConfig) 95 | class USomethingConfigExample : public UDeveloperSettings 96 | { 97 | GENERATED_BODY() 98 | 99 | UPROPERTY(Config) 100 | int32 SomethingConfigExample = 54; 101 | }; 102 | 103 | UCLASS(config=Game, DefaultConfig) 104 | class UMyConfigExample : public UDeveloperSettings 105 | { 106 | GENERATED_BODY() 107 | 108 | public: 109 | UMyConfigExample() { CategoryName="My Config"; } 110 | 111 | protected: 112 | UPROPERTY(Config, EditAnywhere, meta=(ConfigHierarchyEditable)) 113 | int32 ConfigHierarchyWithConfig = 0; 114 | 115 | UPROPERTY(GlobalConfig, EditAnywhere, meta=(ConfigHierarchyEditable)) 116 | int32 ConfigHierarchyWithGlobalConfig = 0; 117 | }; 118 | -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/DataTableImportOptional.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Engine/DataTable.h" 4 | #include "DataTableImportOptional.generated.h" 5 | 6 | USTRUCT() 7 | struct FDataTableImportOptionalExampleRow : public FTableRowBase 8 | { 9 | GENERATED_BODY() 10 | 11 | UPROPERTY(EditAnywhere) 12 | FString Name; 13 | 14 | UPROPERTY(EditAnywhere, meta=(DataTableImportOptional=true)) 15 | FString NameOld; 16 | 17 | UPROPERTY(EditAnywhere) 18 | int32 Happiness; 19 | }; -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/GlobalConfigExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "GameFramework/Actor.h" 4 | #include "GlobalConfigExample.generated.h" 5 | 6 | UCLASS(config=Game) 7 | class AGlobalConfigExampleParent : public AActor 8 | { 9 | GENERATED_BODY() 10 | 11 | protected: 12 | UPROPERTY(Config, EditAnywhere) 13 | int32 ConfigExample = 0; 14 | 15 | UPROPERTY(GlobalConfig, EditAnywhere) 16 | int32 GlobalConfigExample = 0; 17 | }; 18 | 19 | UCLASS(config=Game) 20 | class AGlobalConfigExampleChild : public AGlobalConfigExampleParent 21 | { 22 | GENERATED_BODY() 23 | }; 24 | 25 | UCLASS() 26 | class AGlobalConfigExampleGrandChild : public AGlobalConfigExampleChild 27 | { 28 | GENERATED_BODY() 29 | }; 30 | -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/InstancedExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "InstancedExample.generated.h" 5 | 6 | UCLASS() 7 | class UInstancedInner : public UObject 8 | { 9 | GENERATED_BODY() 10 | public: 11 | 12 | }; 13 | 14 | 15 | UCLASS(Blueprintable) 16 | class UInstancedExample : public UObject 17 | { 18 | GENERATED_BODY() 19 | public: 20 | UPROPERTY(EditAnywhere, Instanced) 21 | TObjectPtr SingleInstancedInner; 22 | 23 | UPROPERTY(EditAnywhere, Instanced) 24 | TArray InstancedInners; 25 | }; 26 | -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/InstancedStructExample.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "UObject/Object.h" 4 | #include "InstancedStruct.h" 5 | #include "InstancedStructExample.generated.h" 6 | 7 | USTRUCT(BlueprintType) 8 | struct FBaseStruct 9 | { 10 | GENERATED_BODY() 11 | }; 12 | 13 | USTRUCT() 14 | struct FDerivedStruct : public FBaseStruct 15 | { 16 | GENERATED_BODY() 17 | }; 18 | 19 | UCLASS(Blueprintable) 20 | class UInstancedStructExample : public UObject 21 | { 22 | GENERATED_BODY() 23 | 24 | // There are two different ways of limiting selection of instanced structs: 25 | 26 | // a) Specify type using meta BaseStruct specifier 27 | UPROPERTY(EditAnywhere, meta=(BaseStruct="/Script/Example.BaseStruct")) 28 | FInstancedStruct MetaBaseAndDerived; 29 | 30 | UPROPERTY(EditAnywhere, meta=(BaseStruct="/Script/Example.BaseStruct", ExcludeBaseStruct)) 31 | FInstancedStruct MetaDerivedOnly; 32 | 33 | // b) Specify type using Templated TInstancedStruct 34 | UPROPERTY(EditAnywhere) 35 | TInstancedStruct TemplatedBaseAndDerived; 36 | 37 | UPROPERTY(EditAnywhere, meta=(ExcludeBaseStruct)) 38 | TInstancedStruct TemplatedDerivedOnly; 39 | }; 40 | -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/MyGameSettings.cpp: -------------------------------------------------------------------------------- 1 | #include "MyGameSettings.h" 2 | 3 | UMyGameSettings::UMyGameSettings(const FObjectInitializer& ObjectInitializer) 4 | : Super(ObjectInitializer) 5 | { 6 | // Large text for where settings should be grouped on the left 7 | CategoryName = "Project"; 8 | 9 | // Smaller sub-heading for grouping 10 | SectionName = "Some Custom Settings"; 11 | } 12 | -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/MyGameSettings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Engine/DeveloperSettings.h" 4 | #include "MyGameSettings.generated.h" 5 | 6 | UCLASS(config=Game, DefaultConfig, Category="Blah Settings") 7 | class UMyGameSettings : public UDeveloperSettings 8 | { 9 | GENERATED_BODY() 10 | 11 | public: 12 | UMyGameSettings(const FObjectInitializer& ObjectInitializer); 13 | 14 | protected: 15 | UPROPERTY(Config, EditAnywhere, Category="Dog-related Settings") 16 | int32 DogCount = 0; 17 | 18 | UPROPERTY(Config, EditAnywhere, Category="Dog-related Settings") 19 | FName DefaultDogId = "Bingo"; 20 | }; -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/MyGameSettingsAdvanced.cpp: -------------------------------------------------------------------------------- 1 | #include "MyGameSettingsAdvanced.h" 2 | 3 | FName UMyGameSettingsAdvanced::GetCategoryName() const 4 | { 5 | return TEXT("Project"); 6 | } 7 | 8 | #if WITH_EDITOR 9 | FText UMyGameSettingsAdvanced::GetSectionText() const 10 | { 11 | return NSLOCTEXT("MyGameSettingsAdvanced", "SomeDoggySettings", "Doggy Settings"); 12 | } 13 | 14 | FText UMyGameSettingsAdvanced::GetSectionDescription() const 15 | { 16 | return NSLOCTEXT("MyGameSettingsAdvanced", "SomeDoggySettingsDescription", "Everything related to dogs within the game."); 17 | } 18 | #endif -------------------------------------------------------------------------------- /Example/Source/Example/UProperty/MyGameSettingsAdvanced.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Engine/DeveloperSettings.h" 4 | #include "MyGameSettingsAdvanced.generated.h" 5 | 6 | UCLASS(config=Game, DefaultConfig) 7 | class UMyGameSettingsAdvanced : public UDeveloperSettings 8 | { 9 | GENERATED_BODY() 10 | 11 | public: 12 | //~ Begin UDeveloperSettings interface 13 | virtual FName GetCategoryName() const; 14 | #if WITH_EDITOR 15 | virtual FText GetSectionText() const override; 16 | virtual FText GetSectionDescription() const override; 17 | #endif 18 | //~ End UDeveloperSettings interface 19 | 20 | protected: 21 | UPROPERTY(Config, EditAnywhere, Category="Dog-related Settings") 22 | int32 DogCount = 0; 23 | 24 | UPROPERTY(Config, EditAnywhere, Category="Dog-related Settings") 25 | FName DefaultDogId = "Bingo"; 26 | }; -------------------------------------------------------------------------------- /Example/Source/ExampleEditor.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class ExampleEditorTarget : TargetRules 7 | { 8 | public ExampleEditorTarget( TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Editor; 11 | DefaultBuildSettings = BuildSettingsVersion.V4; 12 | IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_3; 13 | ExtraModuleNames.Add("Example"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unreal Engine Specifiers 2 | 3 | This repo contains the YAML files and images used to generate the property 4 | specifier documentation pages on [benui.ca](https://benui.ca): 5 | 6 | * [`UPROPERTY`](https://benui.ca/unreal/uproperty/) 7 | * [`UFUNCTION`](https://benui.ca/unreal/ufunction/) 8 | * [`UPARAM`](https://benui.ca/unreal/uparam/) 9 | * [`UCLASS`](https://benui.ca/unreal/uclass/) 10 | * [`USTRUCT`](https://benui.ca/unreal/ustruct/) 11 | * [`UENUM` and `UMETA`](https://benui.ca/unreal/uenum-umeta/) 12 | 13 | I've made them open-source so people can submit pull requests, make forks, 14 | or publish their own versions of the documentation. 15 | 16 | Example entry: 17 | ```yaml 18 | - name: VisibleAnywhere 19 | group: Editor 20 | subgroup: Visibility 21 | position: main 22 | type: flag 23 | utility: 3 24 | incompatible: [ VisibleDefaultsOnly, VisibleInstanceOnly, EditAnywhere, EditDefaultsOnly, EditInstanceOnly ] 25 | comment: 26 | Properties marked with `VisibleAnywhere` are visible in the both Details Panel of Blueprint assets and the Details Panel of Blueprint instances within maps. 27 | 28 | Note that this refers to being visible in the *Details Panel*, not visible in the *Blueprint Graph*. For that you need to use `BlueprintReadOnly`. 29 | samples: 30 | - | 31 | UPROPERTY(VisibleAnywhere) 32 | int32 VisibleAnywhereNumber; 33 | documentation: 34 | text: Indicates that this property is visible in all property windows, but cannot be edited. This Specifier is incompatible with the "Edit" Specifiers. 35 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/property-specifiers 36 | images: [ /assets/unreal/uproperty/visibility-defaults-selected.png, /assets/unreal/uproperty/visibility-instance-selected.jpg ] 37 | ``` 38 | 39 | ## Format Description 40 | 41 | * I try to keep the `comment` field less like strict documentation and more 42 | tutorial-like; talking about why you'd want to use the specifier and 43 | potential edge-cases. 44 | 45 | | Property Name | Data Type | Required? | Notes | 46 | | --- | --- | --- | --- | 47 | | `name` | string | Required | Plain text. I try to camelcase even though the name is technically case-insensitive. | 48 | | `group` | string | | Arbitrary string I use to display related specifiers together. | 49 | | `subgroup` | string | Requires `group` | A way of categorizing specifiers further within a group. | 50 | | `position` | string | Required | Valid values are `main` or `meta`. | 51 | | `utility` | integer | | Value between 1-3. 3 is for extremely-commonly-used specifiers, 1 is for niche or rarely-used specifiers. | 52 | | `type` | string | Required | Valid values are `flag`, `string`, `number`, `bool`, `integer`. | 53 | | `type-comment` | string | Requires `type` | Extra information about the type. For example if the `string` must be the name of a valid `UPROPERTY` member variable, or `number` must be an integer. | 54 | | `comment` | string | | Long free-text description on how to use the specifier. Includes Markdown formatting. | 55 | | `samples` | string array | | An array of code snippets that show how the specifier is used. | 56 | | `required` | specifier array | | A list of specifiers that **must be included** for this specifier to be valid. See note below on specifier IDs. | 57 | | `related` | specifier array | | Other specifiers that are worth looking at related to this context. | 58 | | `incompatible` | specifier array | | A list of specifiers that are invalid when paired with this specifier. | 59 | | `synonyms` | specifier array | | A list of specifiers that have the **same effect** to this specifier. | 60 | | `antonyms` | specifier array | | A list of specifiers that have the **opposite effect** to this specifier. | 61 | | `inherited` | boolean | | `UCLASS`-specific. Whether a specifier on a parent means the child implicitly has that same specifier. If no value is defined, interpret as 'false'. True is just the string 'true'. | 62 | | `documentation` | struct | | See below for the properties within this struct. | 63 | | `documentation.text` | text | Required if `documentation` struct exists. | Official Unreal Engine documentation that describes the specifier. Can be taken from web or source code. | 64 | | `documentation.source` | url | | The URL from which the documentation is taken. In the case of files I include a link to the file on GitHub. | 65 | | `images` | string array | | I try to take screenshots with Unreal Engine 5.0 for consistency. See existing documentation for relative path. | 66 | 67 | **Specifier IDs:** For the purpose of cross-linking between specifier documents, 68 | * The `EditInline` property in `UProperty` has a `related` entry `UClass.EditInlineNew` 69 | 70 | ## Tests 71 | 72 | * Validate changes to the yaml files with `tests/validator.py` 73 | 74 | ## Example Project 75 | 76 | There is an Unreal Engine project located in `/Example/`. The code is partly there as reference, partly for generating screenshots for the site. Take a look if you like! 77 | 78 | 79 | ## Issues 80 | 81 | Please [submit Issues](https://github.com/benui-dev/UE-Specifier-Docs/issues) cases of missing specifiers or mistakes in the documentation. 82 | 83 | 84 | ## Known Issues 85 | 86 | * Some specifiers are not yet categorized. They're listed under a `TODO` category. 87 | * Some specifiers have no code samples or comments. 88 | * Some specifiers have no screenshots. 89 | 90 | 91 | ## License 92 | 93 | See License file 94 | -------------------------------------------------------------------------------- /images/uclass/classgroup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uclass/classgroup.jpg -------------------------------------------------------------------------------- /images/uclass/classgroup.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uclass/classgroup.webp -------------------------------------------------------------------------------- /images/ufunction/autocreaterefterm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/autocreaterefterm.jpg -------------------------------------------------------------------------------- /images/ufunction/autocreaterefterm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/autocreaterefterm.webp -------------------------------------------------------------------------------- /images/ufunction/blueprintautocast-drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/blueprintautocast-drag.png -------------------------------------------------------------------------------- /images/ufunction/blueprintautocast-drag.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/blueprintautocast-drag.webp -------------------------------------------------------------------------------- /images/ufunction/blueprintautocast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/blueprintautocast.png -------------------------------------------------------------------------------- /images/ufunction/blueprintautocast.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/blueprintautocast.webp -------------------------------------------------------------------------------- /images/ufunction/blueprintpure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/blueprintpure.jpg -------------------------------------------------------------------------------- /images/ufunction/blueprintpure.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/blueprintpure.webp -------------------------------------------------------------------------------- /images/ufunction/callineditor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/callineditor.jpg -------------------------------------------------------------------------------- /images/ufunction/callineditor.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/callineditor.webp -------------------------------------------------------------------------------- /images/ufunction/compactnodetitle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/compactnodetitle.jpg -------------------------------------------------------------------------------- /images/ufunction/compactnodetitle.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/compactnodetitle.webp -------------------------------------------------------------------------------- /images/ufunction/defaultstructvalue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/defaultstructvalue.jpg -------------------------------------------------------------------------------- /images/ufunction/defaultstructvalue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/defaultstructvalue.webp -------------------------------------------------------------------------------- /images/ufunction/defaulttsubclassofvalue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/defaulttsubclassofvalue.jpg -------------------------------------------------------------------------------- /images/ufunction/defaulttsubclassofvalue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/defaulttsubclassofvalue.webp -------------------------------------------------------------------------------- /images/ufunction/defaultvalues.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/defaultvalues.jpg -------------------------------------------------------------------------------- /images/ufunction/defaultvalues.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/defaultvalues.webp -------------------------------------------------------------------------------- /images/ufunction/expandenumsasexecs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/expandenumsasexecs.jpg -------------------------------------------------------------------------------- /images/ufunction/expandenumsasexecs.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/expandenumsasexecs.webp -------------------------------------------------------------------------------- /images/ufunction/parametername.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/parametername.jpg -------------------------------------------------------------------------------- /images/ufunction/parametername.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/parametername.webp -------------------------------------------------------------------------------- /images/ufunction/setparam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/setparam.png -------------------------------------------------------------------------------- /images/ufunction/setparam.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ufunction/setparam.webp -------------------------------------------------------------------------------- /images/uparam/spawn-generic-camera-lens-effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uparam/spawn-generic-camera-lens-effect.png -------------------------------------------------------------------------------- /images/uparam/spawn-generic-camera-lens-effect.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uparam/spawn-generic-camera-lens-effect.webp -------------------------------------------------------------------------------- /images/uparam/uparam-ref.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uparam/uparam-ref.jpg -------------------------------------------------------------------------------- /images/uparam/uparam-ref.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uparam/uparam-ref.webp -------------------------------------------------------------------------------- /images/uproperty/Delta.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/Delta.gif -------------------------------------------------------------------------------- /images/uproperty/advanceddisplay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/advanceddisplay.gif -------------------------------------------------------------------------------- /images/uproperty/advanceddisplay.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/advanceddisplay.webp -------------------------------------------------------------------------------- /images/uproperty/allowpreserveratio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/allowpreserveratio.jpg -------------------------------------------------------------------------------- /images/uproperty/allowpreserveratio.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/allowpreserveratio.webp -------------------------------------------------------------------------------- /images/uproperty/arraysizeenum.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/arraysizeenum.jpg -------------------------------------------------------------------------------- /images/uproperty/arraysizeenum.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/arraysizeenum.webp -------------------------------------------------------------------------------- /images/uproperty/basestruct.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/basestruct.webp -------------------------------------------------------------------------------- /images/uproperty/bitmask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/bitmask.jpg -------------------------------------------------------------------------------- /images/uproperty/bitmask.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/bitmask.webp -------------------------------------------------------------------------------- /images/uproperty/blueprintvisibility.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/blueprintvisibility.jpg -------------------------------------------------------------------------------- /images/uproperty/blueprintvisibility.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/blueprintvisibility.webp -------------------------------------------------------------------------------- /images/uproperty/category-blueprint-graph.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/category-blueprint-graph.jpg -------------------------------------------------------------------------------- /images/uproperty/category-blueprint-graph.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/category-blueprint-graph.webp -------------------------------------------------------------------------------- /images/uproperty/category.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/category.jpg -------------------------------------------------------------------------------- /images/uproperty/category.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/category.webp -------------------------------------------------------------------------------- /images/uproperty/datatableimportoptional.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/datatableimportoptional.webp -------------------------------------------------------------------------------- /images/uproperty/deprecatedproperty-complex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/deprecatedproperty-complex.jpg -------------------------------------------------------------------------------- /images/uproperty/deprecatedproperty-complex.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/deprecatedproperty-complex.webp -------------------------------------------------------------------------------- /images/uproperty/deprecatedproperty-simple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/deprecatedproperty-simple.jpg -------------------------------------------------------------------------------- /images/uproperty/deprecatedproperty-simple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/deprecatedproperty-simple.webp -------------------------------------------------------------------------------- /images/uproperty/displayafter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displayafter.jpg -------------------------------------------------------------------------------- /images/uproperty/displayafter.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displayafter.webp -------------------------------------------------------------------------------- /images/uproperty/displayname-blueprint-graph.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displayname-blueprint-graph.jpg -------------------------------------------------------------------------------- /images/uproperty/displayname-blueprint-graph.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displayname-blueprint-graph.webp -------------------------------------------------------------------------------- /images/uproperty/displayname.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displayname.jpg -------------------------------------------------------------------------------- /images/uproperty/displayname.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displayname.webp -------------------------------------------------------------------------------- /images/uproperty/displaypriority.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displaypriority.jpg -------------------------------------------------------------------------------- /images/uproperty/displaypriority.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/displaypriority.webp -------------------------------------------------------------------------------- /images/uproperty/editfixedorder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/editfixedorder.jpg -------------------------------------------------------------------------------- /images/uproperty/editfixedorder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/editfixedorder.webp -------------------------------------------------------------------------------- /images/uproperty/editfixedsize.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/editfixedsize.jpg -------------------------------------------------------------------------------- /images/uproperty/editfixedsize.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/editfixedsize.webp -------------------------------------------------------------------------------- /images/uproperty/excludebasestruct.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/excludebasestruct.webp -------------------------------------------------------------------------------- /images/uproperty/exposeonspawn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/exposeonspawn.jpg -------------------------------------------------------------------------------- /images/uproperty/exposeonspawn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/exposeonspawn.webp -------------------------------------------------------------------------------- /images/uproperty/force-inline-row.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/force-inline-row.png -------------------------------------------------------------------------------- /images/uproperty/force-inline-row.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/force-inline-row.webp -------------------------------------------------------------------------------- /images/uproperty/function-reference.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/function-reference.webp -------------------------------------------------------------------------------- /images/uproperty/getkeyoptions.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/getkeyoptions.webp -------------------------------------------------------------------------------- /images/uproperty/getoptions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/getoptions.jpg -------------------------------------------------------------------------------- /images/uproperty/getoptions.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/getoptions.webp -------------------------------------------------------------------------------- /images/uproperty/hidealphachannel-colorpicker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/hidealphachannel-colorpicker.jpg -------------------------------------------------------------------------------- /images/uproperty/hidealphachannel-colorpicker.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/hidealphachannel-colorpicker.webp -------------------------------------------------------------------------------- /images/uproperty/hidealphachannel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/hidealphachannel.jpg -------------------------------------------------------------------------------- /images/uproperty/hidealphachannel.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/hidealphachannel.webp -------------------------------------------------------------------------------- /images/uproperty/inline-edit-condition-toggle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/inline-edit-condition-toggle.gif -------------------------------------------------------------------------------- /images/uproperty/makeeditwidget-property.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/makeeditwidget-property.jpg -------------------------------------------------------------------------------- /images/uproperty/makeeditwidget-property.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/makeeditwidget-property.webp -------------------------------------------------------------------------------- /images/uproperty/makeeditwidget-world.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/makeeditwidget-world.jpg -------------------------------------------------------------------------------- /images/uproperty/makeeditwidget-world.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/makeeditwidget-world.webp -------------------------------------------------------------------------------- /images/uproperty/multiline.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/multiline.jpg -------------------------------------------------------------------------------- /images/uproperty/multiline.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/multiline.webp -------------------------------------------------------------------------------- /images/uproperty/noclear.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/noclear.jpg -------------------------------------------------------------------------------- /images/uproperty/noclear.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/noclear.webp -------------------------------------------------------------------------------- /images/uproperty/noresettodefault.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/noresettodefault.jpg -------------------------------------------------------------------------------- /images/uproperty/noresettodefault.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/noresettodefault.webp -------------------------------------------------------------------------------- /images/uproperty/passwordfield.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/passwordfield.jpg -------------------------------------------------------------------------------- /images/uproperty/passwordfield.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/passwordfield.webp -------------------------------------------------------------------------------- /images/uproperty/show-only-inner-properties.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/show-only-inner-properties.jpg -------------------------------------------------------------------------------- /images/uproperty/show-only-inner-properties.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/show-only-inner-properties.webp -------------------------------------------------------------------------------- /images/uproperty/titleproperty-format.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/titleproperty-format.jpg -------------------------------------------------------------------------------- /images/uproperty/titleproperty-format.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/titleproperty-format.webp -------------------------------------------------------------------------------- /images/uproperty/titleproperty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/titleproperty.png -------------------------------------------------------------------------------- /images/uproperty/titleproperty.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/titleproperty.webp -------------------------------------------------------------------------------- /images/uproperty/units-conversion.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/units-conversion.gif -------------------------------------------------------------------------------- /images/uproperty/units.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/units.jpg -------------------------------------------------------------------------------- /images/uproperty/units.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/units.webp -------------------------------------------------------------------------------- /images/uproperty/visibility-defaults-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/visibility-defaults-selected.png -------------------------------------------------------------------------------- /images/uproperty/visibility-defaults-selected.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/visibility-defaults-selected.webp -------------------------------------------------------------------------------- /images/uproperty/visibility-instance-selected.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/visibility-instance-selected.jpg -------------------------------------------------------------------------------- /images/uproperty/visibility-instance-selected.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/uproperty/visibility-instance-selected.webp -------------------------------------------------------------------------------- /images/ustruct/disablesplitpin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ustruct/disablesplitpin.jpg -------------------------------------------------------------------------------- /images/ustruct/disablesplitpin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ustruct/disablesplitpin.webp -------------------------------------------------------------------------------- /images/ustruct/hasnativebreak.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ustruct/hasnativebreak.jpg -------------------------------------------------------------------------------- /images/ustruct/hasnativebreak.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ustruct/hasnativebreak.webp -------------------------------------------------------------------------------- /images/ustruct/hasnativemake.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ustruct/hasnativemake.jpg -------------------------------------------------------------------------------- /images/ustruct/hasnativemake.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benui-dev/UE-Specifier-Docs/6964704b3afef2393262673eb6f014da7d6c3942/images/ustruct/hasnativemake.webp -------------------------------------------------------------------------------- /tests/scraper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | # This is a fairly janky script designed to find all specifiers in the Unreal source. 4 | # It does it by regexing lines that match UPROPERTY etc. 5 | # It then goes through the string 6 | 7 | import yaml 8 | from yaml.loader import SafeLoader 9 | 10 | import os 11 | os.system('color') 12 | import pathlib 13 | import glob 14 | import argparse 15 | 16 | import re 17 | 18 | class Specifier: 19 | key: str 20 | value: str 21 | is_meta: bool = False 22 | 23 | def __init__(self, key, value): 24 | self.key = key 25 | self.value = value 26 | 27 | def __str__(self): 28 | return f"{self.key}={self.value}" 29 | 30 | def string_to_specifiers(input: str) -> list[Specifier]: 31 | buf: str = '' 32 | current_key: str = '' 33 | current_value: str = '' 34 | in_quote: bool = False 35 | in_value: bool = False 36 | 37 | specifiers: list[Specifier] = [] 38 | 39 | for char in input: 40 | if char == '"': 41 | in_quote = not in_quote 42 | 43 | elif char == ',': 44 | if in_quote: 45 | buf += char 46 | else: 47 | if in_value: 48 | current_value = buf 49 | else: 50 | current_key = buf 51 | specifiers.append(Specifier(current_key, current_value)) 52 | # start a new something 53 | current_key = '' 54 | current_value = '' 55 | in_value = False 56 | buf = '' 57 | 58 | elif char == '=': 59 | current_key = buf 60 | in_value = True 61 | buf = '' 62 | 63 | elif char == ' ': 64 | if in_quote: 65 | buf += char 66 | else: 67 | buf += char 68 | 69 | print(f"Char: {char}, buf: {buf}, current_key: {current_key}, current_value: {current_value}") 70 | 71 | if in_value: 72 | current_value = buf 73 | else: 74 | current_key = buf 75 | specifiers.append(Specifier(current_key, current_value)) 76 | 77 | return specifiers 78 | 79 | import pprint 80 | 81 | 82 | res = string_to_specifiers('cake, beans=hello, wha="test"') 83 | for r in res: 84 | print(r) 85 | pprint.pp(res) 86 | 87 | exit() 88 | 89 | 90 | scraper = argparse.ArgumentParser(description="Merges a bunch of JSON files into a single file.") 91 | scraper.add_argument('-u', '--unreal', dest='unreal_path', type=pathlib.Path, help='Path to Unreal source', default='C:/UE_5.5/Engine/Source') 92 | scraper.add_argument('-y', '--yaml_dir', dest='yaml_path', type=pathlib.Path, help='Path to existing specifiers directory', default='../yaml') 93 | 94 | args = scraper.parse_args() 95 | 96 | uprop_regex = re.compile("\s*UPROPERTY\((.*)\)?") 97 | meta_regex = re.compile("meta\s*\=\s*\((.*)\)?") 98 | 99 | specifier_to_example = {} 100 | 101 | if os.path.isdir(args.unreal_path): 102 | glob_search = f"{args.unreal_path}/**/*.h" 103 | all_files = glob.iglob(glob_search, recursive=True) 104 | 105 | for file in all_files: 106 | with open(file, 'r') as input_handle: 107 | for line in input_handle: 108 | results = uprop_regex.search(line) 109 | if results: 110 | print(results.group(1)) 111 | specifier_contents = results.group(1) 112 | meta_results = meta_regex.search(specifier_contents) 113 | 114 | # Want to split stuff w/o using regex 115 | 116 | else: 117 | print(f"Unreal dir is not dir {args.unreal_path}") 118 | -------------------------------------------------------------------------------- /tests/validator.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import yaml 4 | from yaml.loader import SafeLoader 5 | 6 | import os 7 | os.system('color') 8 | from pathlib import Path 9 | from glob import glob 10 | 11 | import re 12 | 13 | starts_with_uppercase_regex = re.compile('^[A-Z]') 14 | 15 | glob_search = f"./**/*.yml" 16 | all_files = glob(glob_search, recursive=True) 17 | 18 | class IdLookup(): 19 | def __init__(self, files: list[str]): 20 | self.found_stuff: map[str,set[str]] = {} 21 | 22 | for file in files: 23 | if file.endswith('.yml'): 24 | with open(file, encoding='utf8') as f: 25 | data = yaml.load(f, Loader=SafeLoader) 26 | if 'id' in data: 27 | id = data['id'].lower() 28 | if id in self.found_stuff: 29 | print("Non-unique id") 30 | self.found_stuff[id] = set() 31 | 32 | # gather ids 33 | if 'specifiers' in data: 34 | # gather ids 35 | for entry in data['specifiers']: 36 | if 'name' in entry: 37 | property_name = entry['name'].lower() 38 | if property_name in self.found_stuff[id]: 39 | print(f"Duplicate property name {property_name}") 40 | self.found_stuff[id].add(property_name) 41 | if not property_name in self.found_stuff[id]: 42 | print("NOT FOUND") 43 | 44 | def has_key(self, raw_key: str, current_page: str) -> bool: 45 | property = raw_key.lower() 46 | 47 | page_to_search = current_page 48 | # split into class and property 49 | if '.' in property: 50 | page, property = property.split('.') 51 | page_to_search = page 52 | 53 | if page_to_search in self.found_stuff: 54 | if not property in self.found_stuff[page_to_search]: 55 | #print(f"Property {raw_key} not found in page {page_to_search}") 56 | #print(self.found_stuff[page_to_search]) 57 | return False 58 | else: 59 | #print(f"Property {raw_key} refers to unknown page {page_to_search}") 60 | return False 61 | return True 62 | 63 | id_lookup = IdLookup(all_files) 64 | 65 | class bcolors: 66 | HEADER = '\033[95m' 67 | OKBLUE = '\033[94m' 68 | OKCYAN = '\033[96m' 69 | OKGREEN = '\033[92m' 70 | WARNING = '\033[93m' 71 | ERROR = '\033[91m' 72 | ENDC = '\033[0m' 73 | BOLD = '\033[1m' 74 | UNDERLINE = '\033[4m' 75 | 76 | class PropertyValidator: 77 | def __init__(self): 78 | self.type = 'str' 79 | self.required = True 80 | self.dependency = '' 81 | pass 82 | 83 | class SpecifierValidatorBase: 84 | def __init__(self): 85 | self.properties = [ 86 | { 'name': 'name', 'required': True, 'datatype': str }, 87 | { 'name': 'group', 'required': True, 'datatype': str }, 88 | { 'name': 'position', 'required': True, 'datatype': str }, 89 | { 'name': 'type', 'required': True, 'datatype': str }, 90 | { 'name': 'group' , 'required': True, 'datatype': str } 91 | { 'name': 'subgroup', 'required': False, 'datatype': str }, 92 | { 'name': 'comment', 'required': False, 'datatype': str }, 93 | { 'name': 'samples', 'required': False, 'datatype': list[str] }, 94 | { 'name': 'type-comment', 'required': False, 'datatype': str }, 95 | { 'name': 'documentation', 'required': False, 'datatype': str }, 96 | { 'name': 'examples', 'required': False, 'datatype': list[str] }, 97 | { 'name': 'images', 'required': False, 'datatype': list[str] }, 98 | { 'name': 'keywords', 'required': False, 'datatype': list[str] }, 99 | { 'name': 'links', 'required': False, 'datatype': list[str] }, 100 | { 'name': 'required', 'required': False, 'datatype': list[str] }, 101 | { 'name': 'related', 'required': False, 'datatype': list[str] }, 102 | { 'name': 'incompatible', 'required': False, 'datatype': list[str] }, 103 | { 'name': 'synonyms', 'required': False, 'datatype': list[str] }, 104 | { 'name': 'antonyms', 'required': False, 'datatype': list[str] }, 105 | { 'name': 'deprecated', 'required': False, 'datatype': True }, 106 | { 'name': 'version', 'required': False, 'datatype': str }, 107 | { 'name': 'utility', 'required': False, 'datatype': int } 108 | ] 109 | 110 | self.required_properties = [ 111 | 'name', 112 | 'group', 113 | 'position', 114 | 'type', 115 | 'group' 116 | ] 117 | 118 | self.allowed_properties = [ 119 | 'subgroup', 120 | 'comment', 121 | 'samples', 122 | 'type-comment', 123 | 'documentation', 124 | 'examples', 125 | 'images', 126 | 'keywords', 127 | 'links', 128 | 'required', 129 | 'related', 130 | 'incompatible', 131 | 'synonyms', 132 | 'antonyms', 133 | 'deprecated', 134 | 'version', 135 | 'utility', 136 | ] 137 | for val in self.required_properties: 138 | self.allowed_properties.append(val) 139 | 140 | self.valid_types = [ 141 | 'flag', 142 | 'string', 143 | 'bool', 144 | 'integer', 145 | 'number', 146 | 'float', 147 | ] 148 | 149 | self.valid_positions = [ 150 | 'main', 151 | 'meta', 152 | ] 153 | 154 | self.reference_fields = [ 155 | 'required', 156 | 'related', 157 | 'incompatible', 158 | 'synonyms', 159 | 'antonyms', 160 | 'implies', 161 | ] 162 | 163 | def should_run(self, filename: str) -> bool: 164 | return False 165 | 166 | # returns the first valid required field so we can have something hopefully unique to refer 167 | # to this entry by 168 | def get_identifier(self, entry) -> str: 169 | for req in self.required_properties: 170 | if req in entry: 171 | return f"{entry[req]}" 172 | return '[unknown]' 173 | 174 | def validate_file(self, data_file: str) -> None: 175 | print(f"{bcolors.HEADER}Validating {data_file}{bcolors.ENDC}") 176 | 177 | with open(data_file, encoding='utf8') as f: 178 | 179 | data = yaml.load(f, Loader=SafeLoader) 180 | 181 | total_specifiers: int = 0 182 | with_errors: int = 0 183 | with_warnings: int = 0 184 | total_errors: int = 0 185 | total_warnings: int = 0 186 | this_page_id = '' 187 | 188 | if not 'id' in data: 189 | errors.append(f"Does not have {id} property") 190 | else: 191 | this_page_id = data['id'] 192 | 193 | if 'specifiers' in data: 194 | print(f"YAML Loaded, {len(data['specifiers'])} entries to validate") 195 | 196 | 197 | for entry in data['specifiers']: 198 | errors, warnings = self.validate_entry(entry=entry, this_page_id=this_page_id) 199 | 200 | # Per-entry summary 201 | total_errors += len(errors) 202 | total_warnings += len(warnings) 203 | 204 | if len(errors) > 0: 205 | with_errors += 1 206 | if len(warnings) > 0: 207 | with_warnings += 1 208 | 209 | id = self.get_identifier(entry) 210 | 211 | if len(errors) > 0 or len(warnings) > 0: 212 | print(f"Entry #{total_specifiers} '{id}':") 213 | for error in errors: 214 | print(f" - {bcolors.ERROR}Error{bcolors.ENDC} - {error}") 215 | for warn in warnings: 216 | print(f" - {bcolors.WARNING}Warning{bcolors.ENDC} - {warn}") 217 | print("") 218 | total_specifiers += 1 219 | else: 220 | print("Fail, does not have specifiers property") 221 | 222 | print(f"{total_specifiers} processed, {bcolors.ERROR}{with_errors} with errors{bcolors.ENDC}, {bcolors.WARNING}{with_warnings} with warnings{bcolors.ENDC}") 223 | print("\n====================================\n") 224 | 225 | def validate_entry(self, entry, this_page_id: str) -> tuple[list[str], list[str]]: 226 | errors: list[str] = [] 227 | warnings: list[str] = [] 228 | 229 | for req in self.required_properties: 230 | if not req in entry: 231 | errors.append(f"Missing required field '{req}'") 232 | 233 | if 'type' in entry: 234 | if entry['type'] not in self.valid_types: 235 | errors.append(f"Type value is invalid '{entry['type']}'") 236 | 237 | if 'position' in entry: 238 | if entry['position'] not in self.valid_positions: 239 | errors.append(f"Position value is invalid '{entry['position']}'") 240 | 241 | name_errors, name_warnings = self.validate_name(entry['name']) 242 | errors.append(name_errors) 243 | warnings.append(name_warnings) 244 | 245 | for ref_field in self.reference_fields: 246 | if ref_field in entry: 247 | for ref_value in entry[ref_field]: 248 | if not id_lookup.has_key(ref_value, this_page_id): 249 | errors.append(f"Field '{ref_field}' referenced non-existant id '{ref_value}'") 250 | 251 | for key, value in entry.items(): 252 | if not key in self.allowed_properties: 253 | warnings.append(f"Unknown key '{key}'") 254 | 255 | return errors, warnings 256 | 257 | def validate_name(self, name: str) -> tuple[list[str], list[str]]: 258 | errors: list[str] = [] 259 | warnings: list[str] = [] 260 | 261 | if not re.match(starts_with_uppercase_regex, name): 262 | warnings.append(f"Field name {name} does not start with an uppercase letter.") 263 | 264 | return errors, warnings 265 | 266 | 267 | class UDefaultValidator(SpecifierValidatorBase): 268 | def __init__(self, filename: str): 269 | super().__init__() 270 | self.filename = filename 271 | 272 | def should_run(self, filename: str) -> bool: 273 | return filename.endswith(self.filename) 274 | 275 | 276 | class UClassValidator(SpecifierValidatorBase): 277 | def __init__(self): 278 | super().__init__() 279 | self.allowed_properties.append('inherited') 280 | 281 | def should_run(self, filename: str) -> bool: 282 | return filename.endswith('uclass.yml') 283 | 284 | 285 | class UFunctionValidator(SpecifierValidatorBase): 286 | def __init__(self): 287 | super().__init__() 288 | self.allowed_properties.append('implies') 289 | 290 | def should_run(self, filename: str) -> bool: 291 | return filename.endswith('ufunction.yml') 292 | 293 | 294 | class UPropertyValidator(SpecifierValidatorBase): 295 | def __init__(self): 296 | super().__init__() 297 | self.allowed_properties.append('implies') 298 | 299 | def should_run(self, filename: str) -> bool: 300 | return filename.endswith('uproperty.yml') 301 | 302 | validators = [ 303 | UDefaultValidator('uenum.yml'), 304 | UClassValidator(), 305 | UFunctionValidator(), 306 | UPropertyValidator(), 307 | UDefaultValidator('uinterface.yml'), 308 | UDefaultValidator('umeta.yml'), 309 | UDefaultValidator('uparam.yml'), 310 | UDefaultValidator('ustruct.yml'), 311 | ] 312 | 313 | for file in all_files: 314 | for validator in validators: 315 | if validator.should_run(file): 316 | validator.validate_file(file) 317 | -------------------------------------------------------------------------------- /yaml/args.yml: -------------------------------------------------------------------------------- 1 | specifiers: 2 | - name: WaitForDebugger 3 | group: Debug 4 | type: flag 5 | comment: Causes Unreal to wait for a debugger to be connected before continuing execution. 6 | 7 | 8 | ################################################################################ 9 | # Logging 10 | 11 | - name: Log 12 | group: Logging 13 | type: string 14 | related: [ AbsLog ] 15 | documentation: 16 | text: When used as a switch (-log), opens a separate window to display the contents of the log in real time. When used as a setting (LOG=filename.log), tells the engine to use the log filename of the string that immediately follows. 17 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 18 | - name: LogTimes 19 | group: Logging 20 | type: flag 21 | antonyms: [ NoLogTimes ] 22 | incompatible: [ UTCLogTimes, LocalLogTimes, LogTimesSinceStart, LogTimeCode ] 23 | comment: There are a bunch of different ways to display log times. 24 | documentation: 25 | text: Print time with log output. (Default, same as setting LogTimes=True in the [LogFiles] section of *Engine.ini.) 26 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 27 | - name: UTCLogTimes 28 | group: Logging 29 | type: flag 30 | antonyms: [ NoLogTimes ] 31 | incompatible: [ LogTimes, LocalLogTimes, LogTimesSinceStart, LogTimeCode ] 32 | - name: LocalLogTimes 33 | group: Logging 34 | type: flag 35 | antonyms: [ NoLogTimes ] 36 | incompatible: [ LogTimes, UTCLogTimes, LogTimesSinceStart, LogTimeCode ] 37 | - name: LogTimesSinceStart 38 | group: Logging 39 | type: flag 40 | antonyms: [ NoLogTimes ] 41 | incompatible: [ LogTimes, UTCLogTimes, LocalLogTimes, LogTimeCode ] 42 | - name: LogTimeCode 43 | group: Logging 44 | type: flag 45 | antonyms: [ NoLogTimes ] 46 | incompatible: [ LogTimes, UTCLogTimes, LocalLogTimes, LogTimesSinceStart ] 47 | - name: NoLogTimes 48 | group: Logging 49 | type: flag 50 | incompatible: [ LogTimes, UTCLogTimes, LocalLogTimes, LogTimesSinceStart, LogTimeCode ] 51 | documentation: 52 | text: Do not print time with log output. (Same as setting LogTimes=False in the [LogFiles] section of *Engine.ini.) 53 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 54 | - name: AbsLog 55 | group: Logging 56 | type: string 57 | related: [ Log ] 58 | documentation: 59 | text: Same as LOG= but without a filename length check. 60 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 61 | - name: LogCmds 62 | group: Logging 63 | type: string 64 | comment: Change the verbosity of log categories 65 | - name: ForceLogFlush 66 | group: Logging 67 | type: flag 68 | documentation: 69 | text: Force a log flush after each line. 70 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 71 | 72 | ################################################################################ 73 | 74 | - name: Auto 75 | group: Developer 76 | type: flag 77 | documentation: 78 | text: Assume yes on all questions. (for example during compile) 79 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 80 | - name: AutoCheckoutPackages 81 | group: Developer 82 | type: flag 83 | comment: Used on ResavePackagesCommandlet. 84 | documentation: 85 | text: Automatically checkout packages that need to be saved. 86 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 87 | - name: AutomatedMapBuild 88 | group: Developer 89 | type: flag 90 | comment: | 91 | The second argument to the exe is the map, so this flag uses that. 92 | As to what an "automated build" means, I have no idea. 93 | documentation: 94 | text: Perform an automated build of a specified map. 95 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 96 | - name: BiasCompressionForSize 97 | group: Deprecated 98 | type: flag 99 | comment: Can't find this in the engine. 100 | documentation: 101 | text: Override compression settings with respect to size. 102 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 103 | - name: BuildMachine 104 | group: Developer 105 | type: flag 106 | comment: If this is set, it implies some other arguments? 107 | documentation: 108 | text: Set as build machine. Used for deciding if debug output is enabled. 109 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 110 | - name: BulkImportingSounds 111 | group: Deprecated 112 | type: flag 113 | comment: Can't find this in the engine. 114 | documentation: 115 | text: Use when importing sounds in bulk. (Content Browser specific.) 116 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 117 | - name: Check_Native_Class_Sizes 118 | group: Deprecated 119 | type: flag 120 | comment: Can't find in source. 121 | documentation: 122 | text: "Enable checking of native class sizes. Note: Native classes on console platforms will cause native class size checks to fail even though they are assumed to be correct." 123 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 124 | - name: CoderMode 125 | group: Deprecated 126 | type: flag 127 | comment: Couldn't find it in the codebase for UE5. Possibly for Unreal Engine 3? 128 | documentation: 129 | text: Enables Coder mode. 130 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 131 | - name: CompatScale 132 | group: Deprecated 133 | type: flag 134 | comment: Couldn't find in source. 135 | documentation: 136 | text: Set compatibility settings manually to override PCCompat tool settings. 137 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 138 | - name: ConformDir 139 | group: Deprecated 140 | type: flag 141 | comment: Can't find either ConformDir or ConfirmDir in UE5 source. 142 | documentation: 143 | text: Directory to use when conforming packages. 144 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 145 | - name: CookForDemo 146 | group: Deprecated 147 | type: flag 148 | comment: Cannot find in source. 149 | documentation: 150 | text: Specify as cooking packages for the demo. 151 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 152 | - name: CookPackages 153 | group: Deprecated 154 | type: flag 155 | comment: Cannot find in source. 156 | documentation: 157 | text: Tag to specify cooking packages. 158 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 159 | - name: CrashReports 160 | group: Developer 161 | type: flag 162 | documentation: 163 | text: Always report crashes of the engine. 164 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 165 | - name: D3DDebug 166 | group: Developer 167 | type: flag 168 | documentation: 169 | text: Use a d3d debug device. 170 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 171 | - name: DevCon 172 | group: Deprecated 173 | type: flag 174 | comment: Cannot find in source 175 | documentation: 176 | text: Disable secure connections for developers. (Uses unencrypted sockets.) 177 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 178 | - name: DumpFileIOStats 179 | group: Deprecated 180 | type: flag 181 | comment: Cannot find in source 182 | documentation: 183 | text: Track and log File IO statistics. 184 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 185 | - name: Deterministic 186 | group: Developer 187 | type: flag 188 | related: [ FixedSeed, UseFixedTimeStep ] 189 | comment: Shortcut for `-UseFixedTimeStep -FixedSeed`. 190 | - name: FixedSeed 191 | group: Developer 192 | type: flag 193 | documentation: 194 | text: Initialize the random number generator with a fixed value, 0. 195 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 196 | - name: UseFixedTimeStep 197 | group: Developer 198 | type: flag 199 | - name: FixUpTangents 200 | group: Developer 201 | type: flag 202 | documentation: 203 | text: Fix legacy tangents in distributions automatically. 204 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 205 | - name: ForcePVRTC 206 | group: Developer 207 | type: flag 208 | comment: Found a reference to "bForcePVRTC". 209 | documentation: 210 | text: Force pvrtc texture compression for mobile platform. 211 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 212 | - name: ForceSoundRecook 213 | group: Deprecated 214 | type: flag 215 | comment: Can't find any reference to this. Deprecated? 216 | documentation: 217 | text: Force a complete re-cook of all sounds. 218 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 219 | - name: GenericBrowser 220 | group: Deprecated 221 | type: flag 222 | comment: Can't find any reference to this. Deprecated? 223 | documentation: 224 | text: Use the Generic Browser. 225 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 226 | - name: Installed 227 | group: Developer 228 | type: flag 229 | antonyms: [ NotInstalled ] 230 | documentation: 231 | text: For development purposes, run the game as if installed. 232 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 233 | - name: NotInstalled 234 | group: Developer 235 | type: flag 236 | antonyms: [ Installed ] 237 | - name: InstallFW 238 | group: Developer 239 | type: flag 240 | antonyms: [ UninstallFW ] 241 | comment: Shows the Windows firewall popup maybe? 242 | documentation: 243 | text: Set whether the handling of the firewall integration should be performed. 244 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 245 | - name: UninstallFW 246 | group: Developer 247 | type: flag 248 | antonyms: [ InstallFW ] 249 | documentation: 250 | text: Set whether the handling of the firewall integration should be performed. 251 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 252 | - name: InstallGE 253 | group: Developer 254 | type: flag 255 | antonyms: [ UninstallGE ] 256 | related: [ AllUsers ] 257 | platforms: [ Windows ] 258 | comment: "[Game Explorer](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ee417682(v=vs.85)) seems to be some old Windows thing for managing installed games. Not sure if it's really relevant any more." 259 | documentation: 260 | text: Add the game to the Game Explorer. 261 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 262 | - name: UninstallGE 263 | group: Developer 264 | type: flag 265 | antonyms: [ InstallGE ] 266 | platforms: [ Windows ] 267 | documentation: 268 | text: Remove the game from the Game Explorer. 269 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 270 | - name: AllUsers 271 | group: Developer 272 | type: flag 273 | comment: does this mean this requires InstallGe? 274 | requires: [ InstallGE ] 275 | documentation: 276 | text: Add the game for all users when INSTALLGE is specified. 277 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 278 | - name: Culture 279 | group: Localization 280 | type: string 281 | related: [ FirstInstall ] 282 | comment: | 283 | When this is set, the text localization manager uses the specified culture and does not look at ini files. 284 | 285 | It seems like it might be useful for testing localization, to force the game to launch with a specific culture without having to mess around with settings. 286 | - name: CultureForCooking 287 | group: Localization 288 | type: string 289 | related: [ FirstInstall ] 290 | comment: Does the same as `Culture` but can has the option to work with `FirstInstall`. 291 | documentation: 292 | text: Set language to be used for cooking. 293 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 294 | - name: FirstInstall 295 | group: Localization 296 | related: [ CultureForCooking ] 297 | comment: Based on the code, if `CultureForCooking` and `FirstInstall` are set, it writes the culture specified by `CultureForCooking` to the `Internationalization` part of the engine .ini file. 298 | - name: LightMassDebug 299 | group: Developer 300 | type: flag 301 | documentation: 302 | text: Launch lightmass manually with -debug and allow lightmass to be executed multiple times. 303 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 304 | - name: LightMassStats 305 | group: Logging 306 | type: flag 307 | subgroup: Stats 308 | documentation: 309 | text: Force all lightmass agents to report detailed stats to the log. 310 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 311 | - name: NoConform 312 | group: Deprecated 313 | type: flag 314 | comment: Cannot find in source. 315 | documentation: 316 | text: Tell the engine not to conform packages as they are compiled. 317 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 318 | - name: NoContentBrowser 319 | group: Developer 320 | type: flag 321 | comment: Surely this is editor-only? Why would you want to disable the content browser? 322 | documentation: 323 | text: Disable the Content Browser. 324 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 325 | - name: NoInnerException 326 | group: Developer 327 | type: flag 328 | comment: Seems to only be enabled with the define `_WIN64`?Why might you do this? S 329 | samples: 330 | - | 331 | #ifdef _WIN64 332 | if ( FParse::Param(CmdLine,TEXT("noinnerexception")) || FApp::IsBenchmarking() || bNoExceptionHandler) 333 | { 334 | GEnableInnerException = false; 335 | } 336 | #endif 337 | documentation: 338 | text: Disable the exception handler within native C++. 339 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 340 | - name: NoLoadStartupPackages 341 | group: Developer 342 | type: flag 343 | comment: There is a log message that mentions it but I cannot find any code that actually *uses* it. 344 | documentation: 345 | text: Force startup packages not to be loaded. You can use this if objects in a startup package must be deleted from within the editor. 346 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 347 | - name: NoPause 348 | group: Logging 349 | type: flag 350 | related: [ NoPauseOnSuccess ] 351 | documentation: 352 | text: Close the log window automatically on exit. 353 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 354 | - name: NoPauseOnSuccess 355 | group: Logging 356 | type: flag 357 | related: [ NoPause ] 358 | documentation: 359 | text: Close the log window automatically on exit as long as no errors were present. 360 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 361 | - name: NoRC 362 | group: Developer 363 | type: flag 364 | documentation: 365 | text: Disable the remote control. Used for dedicated servers. 366 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 367 | - name: VerifyGC 368 | group: Developer 369 | type: flag 370 | antonyms: [ NoVerifyGC ] 371 | documentation: 372 | text: Force garbage compiler assumptions to be verified. 373 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 374 | - name: NoVerifyGC 375 | group: Developer 376 | type: flag 377 | antonyms: [ VerifyGC ] 378 | documentation: 379 | text: Do not verify garbage compiler assumptions. 380 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 381 | - name: NoWrite 382 | group: Logging 383 | type: flag 384 | documentation: 385 | text: Disable output to log. 386 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 387 | - name: SeekFreeLoading 388 | group: Developer 389 | type: flag 390 | documentation: 391 | text: Only use cooked data. 392 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 393 | - name: SeekFreePackageMap 394 | group: Developer 395 | type: flag 396 | documentation: 397 | text: Override the package map with the seekfree (cooked) version. 398 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 399 | - name: SeekFreeloadingPCConsole 400 | group: Developer 401 | type: flag 402 | documentation: 403 | text: Only use cooked data for PC console mode. 404 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 405 | - name: SeekFreeLoadingServer 406 | group: Developer 407 | type: flag 408 | documentation: 409 | text: Only use cooked data for server. 410 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 411 | - name: SetThreadNames 412 | group: Developer 413 | type: flag 414 | platforms: [ Xbox ] 415 | documentation: 416 | text: (Xbox only) Force thread names to be set. This can mess up the XDK COM API which is why it must be explicitly set to be performed if desired. 417 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 418 | - name: ShowMissingLoc 419 | group: Developer 420 | type: flag 421 | comment: Can't find this in the source. Also, I thought that error strings are already returned instead of English. Maybe this is editor-only? 422 | documentation: 423 | text: If missing localized text, return error string instead of English text. 424 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 425 | - name: Silent 426 | group: Developer 427 | type: flag 428 | documentation: 429 | text: Disable output and feedback. 430 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 431 | - name: TraceAnimUsage 432 | group: Deprecated 433 | type: flag 434 | comment: Cannot find in source. 435 | documentation: 436 | text: Trace animation usage. 437 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 438 | - name: TreatLoadWarningsAsErrors 439 | group: Developer 440 | type: flag 441 | comment: What happens if there's an error? 442 | documentation: 443 | text: Force load warnings to be treated as errors. 444 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 445 | - name: WarningsAsErrors 446 | group: Developer 447 | type: flag 448 | related: [ TreatLoadWarningsAsErrors ] 449 | documentation: 450 | text: Treat warnings as errors. 451 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 452 | - name: Unattended 453 | group: Developer 454 | type: flag 455 | comment: What kinds of things require feedback? When might you want to use this? 456 | documentation: 457 | text: Set as unattended. Disable anything requiring feedback from user. 458 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 459 | - name: UseUnpublished 460 | group: Developer 461 | type: flag 462 | documentation: 463 | text: Force packages in the Unpublished folder to be used. 464 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 465 | - name: VADebug 466 | group: Developer 467 | type: flag 468 | documentation: 469 | text: Use the Visual Studio debugger interface. 470 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 471 | - name: Verbose 472 | group: Developer 473 | type: flag 474 | documentation: 475 | text: Set compiler to use verbose output. 476 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 477 | 478 | ################################################################################ 479 | # Rendering 480 | - name: ConsoleX 481 | group: Rendering 482 | type: integer 483 | documentation: 484 | text: Set the horizontal position for console output window. 485 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 486 | - name: ConsoleY 487 | group: Rendering 488 | type: integer 489 | documentation: 490 | text: Set the vertical position for console output window. 491 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 492 | - name: ConsoleWidth 493 | group: Rendering 494 | type: integer 495 | - name: ConsoleHeight 496 | group: Rendering 497 | type: integer 498 | - name: WinX 499 | group: Rendering 500 | type: integer 501 | documentation: 502 | text: Set the horizontal position of the game window on the screen. 503 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 504 | - name: WinY 505 | group: Rendering 506 | type: integer 507 | documentation: 508 | text: Set the vertical position of the game window on the screen. 509 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 510 | - name: ResX 511 | group: Rendering 512 | type: integer 513 | documentation: 514 | text: Set horizontal resolution for game window. 515 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 516 | - name: ResY 517 | group: Rendering 518 | type: integer 519 | documentation: 520 | text: Set vertical resolution for game window. 521 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 522 | - name: VSync 523 | group: Rendering 524 | type: flag 525 | antonyms: [ NoVSync ] 526 | documentation: 527 | text: Activate the VSYNC via command line. Pprevents tearing of the image but costs fps and causes input latency.) 528 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 529 | - name: NoVSync 530 | group: Rendering 531 | type: flag 532 | antonyms: [ VSync ] 533 | documentation: 534 | text: Deactivate the VSYNC via command line. 535 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 536 | - name: Benchmark 537 | group: Rendering 538 | type: flag 539 | documentation: 540 | text: Run game at fixed-step in order to process each frame without skipping any frames. This is useful in conjunction with DUMPMOVIE options. 541 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 542 | - name: DumpMovie 543 | group: Rendering 544 | type: flag 545 | comment: | 546 | Sets the `GIsDumpingMovie` variable to `-1` so it dumps for an unspecified time. Can also be set through the console variable `r.DumpingMovie` 547 | Is a flag, cannot set it to dump for a defined amoutn of time like the console variable or global variable. 548 | samples: | 549 | - IConsoleManager::Get().RegisterConsoleVariableRef(TEXT("r.DumpingMovie"), 550 | GIsDumpingMovie, 551 | TEXT("Allows to dump each rendered frame to disk (slow fps, names MovieFrame..).\n") 552 | TEXT("<=0:off (default), <0:remains on, >0:remains on for n frames (n is the number specified)"), 553 | ECVF_Cheat); 554 | documentation: 555 | text: Dump rendered frames to files using current resolution of game. 556 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 557 | - name: Exec 558 | group: Rendering 559 | type: flag 560 | comment: What is an exec file? Is it really related to rendering? 561 | documentation: 562 | text: Executes the specified exec file. 563 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 564 | - name: ExecCmds 565 | group: Developer 566 | type: string 567 | comment: | 568 | It looks like this can be used to execute cheat console commands, separated with commas. 569 | - name: FPS 570 | group: Rendering 571 | type: integer 572 | documentation: 573 | text: Set the frames per second for benchmarking. 574 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 575 | - name: Seconds 576 | group: Deprecated 577 | comment: I couldn't find this in the Unreal Engine 5 codebase. 578 | documentation: 579 | text: Set the maximum tick time. 580 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 581 | - name: Fullscreen 582 | group: Rendering 583 | type: flag 584 | antonyms: [ Windowed ] 585 | documentation: 586 | text: Set game to run in fullscreen mode. 587 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 588 | - name: Windowed 589 | group: Rendering 590 | type: flag 591 | antonyms: [ Fullscreen ] 592 | documentation: 593 | text: Set game to run in windowed mode. 594 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 595 | 596 | ################################################################################ 597 | # Network 598 | 599 | - name: LanPlay 600 | group: Network 601 | type: flag 602 | documentation: 603 | text: Tell the engine to not cap client bandwidth when connecting to servers. Causes double the amount of server updates and can saturate client's bandwidth. 604 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 605 | - name: LimitClientTicks 606 | group: Network 607 | type: flag 608 | comment: See `NetDriver.cpp`. This flag seems to be on by default if `GetNetMode() == NM_ListenServer` 609 | samples: 610 | - | 611 | #if WITH_SERVER_CODE 612 | int32 UNetDriver::ServerReplicateActors_PrepConnections( const float DeltaSeconds ) 613 | { 614 | int32 NumClientsToTick = ClientConnections.Num(); 615 | 616 | // by default only throttle update for listen servers unless specified on the commandline 617 | static bool bForceClientTickingThrottle = FParse::Param( FCommandLine::Get(), TEXT( "limitclientticks" ) ); 618 | if ( bForceClientTickingThrottle || GetNetMode() == NM_ListenServer ) 619 | { 620 | // ... 621 | documentation: 622 | text: Force throttling of network updates. 623 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 624 | - name: MultiHome 625 | group: Network 626 | type: flag 627 | documentation: 628 | text: Tell the engine to use a multihome address for networking. 629 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 630 | - name: MultiHomeHttp 631 | group: Network 632 | type: flag 633 | documentation: 634 | text: Tell the engine to use a multihome address for networking. 635 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 636 | - name: NetworkProfiler 637 | group: Network 638 | type: flag 639 | documentation: 640 | text: Enable network profiler tracking. 641 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 642 | - name: NoSteam 643 | group: Network 644 | type: flag 645 | documentation: 646 | text: Set steamworks to not be used. 647 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 648 | - name: Port 649 | group: Network 650 | type: string 651 | documentation: 652 | text: Tell the engine to use a specific port number. 653 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 654 | - name: PrimaryNet 655 | group: Deprecated 656 | type: flag 657 | comment: Couldn't find this in the source code, deprecated? 658 | documentation: 659 | text: Affect how the engine handles network binding. 660 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 661 | 662 | ################################################################################ 663 | 664 | - name: NoHomeDir 665 | group: User 666 | type: flag 667 | comment: So what does it do instead? 668 | documentation: 669 | text: Override use of My Documents folder as home directory. 670 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 671 | - name: NoForceFeedback 672 | group: User 673 | type: flag 674 | documentation: 675 | text: Disable force feedback in the engine. 676 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 677 | - name: NoSound 678 | group: User 679 | type: flag 680 | documentation: 681 | text: Disable any sound output from the engine. 682 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 683 | - name: NoSplash 684 | group: User 685 | type: flag 686 | documentation: 687 | text: Disable use of splash image when loading the game. 688 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 689 | - name: NoTextureStreaming 690 | group: User 691 | type: flag 692 | documentation: 693 | text: Disable texture streaming. Highest quality textures are always loaded. 694 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 695 | - name: OneThread 696 | group: User 697 | type: flag 698 | documentation: 699 | text: Run the engine using a single thread instead of multi-threading. 700 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 701 | - name: Paths 702 | group: User 703 | type: string 704 | documentation: 705 | text: Set what paths to use for testing wrangled content. Not used for shipping releases. 706 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 707 | - name: PreferredProcessor 708 | group: Deprecated 709 | type: flag 710 | comment: Can't find in source. 711 | documentation: 712 | text: Set the thread affinity for a specific processor. 713 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 714 | - name: UseAllAvailableCores 715 | group: User 716 | type: flag 717 | comment: Can only find it with reference to archiving. 718 | documentation: 719 | text: Force the use of all available cores on the target platform. 720 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 721 | 722 | ################################################################################ 723 | 724 | - name: Login 725 | group: Server Switches 726 | type: string 727 | documentation: 728 | text: Set username to use when logging in. 729 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 730 | - name: Password 731 | group: Server Switches 732 | type: string 733 | documentation: 734 | text: Set password to use when logging in. 735 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 736 | 737 | ################################################################################ 738 | 739 | - name: NoDatabase 740 | group: Game Stats/Database 741 | type: flag 742 | documentation: 743 | text: Do not use database, and ignore database connection errors. 744 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 745 | - name: NoLiveTags 746 | group: Game Stats/Database 747 | type: flag 748 | documentation: 749 | text: Skip loading unverified tag changes from SQL database. Only load for current user. 750 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 751 | 752 | ################################################################################ 753 | 754 | - name: EnglishCoalesced 755 | group: Deprecated 756 | type: flag 757 | comment: Couldn't find in source. 758 | documentation: 759 | text: Revert to the default (English) coalesced .ini if the language-localized version cannot be found. 760 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 761 | - name: NoAutoINIUpdate 762 | group: INI/Config Files 763 | type: flag 764 | incompatible: [ RegenerateInis ] 765 | documentation: 766 | text: Suppress prompts to update .ini files. 767 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 768 | - name: NoINI 769 | group: INI/Config Files 770 | type: flag 771 | documentation: 772 | text: Do not update the .ini files. 773 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 774 | - name: RegenerateINIs 775 | group: INI/Config Files 776 | type: flag 777 | incompatible: [ NoAutoIniUpdate ] 778 | comment: Be careful with plurals 779 | documentation: 780 | text: Forces .ini files to be regenerated. 781 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/command-line-arguments 782 | 783 | - name: PreferAMD 784 | group: Graphics 785 | type: flag 786 | comment: Part of the Windows D3D12, D3D11 and Vulkan Render Hardware Interfaces, this lets you set a preferred adapter vendor. I guess you might want to use it if you've optimised for one over another, and the user has multiple installed? 787 | related: [ PreferIntel, PreferNVidia, PreferMS ] 788 | platforms: [ Windows ] 789 | comment: Windows DX11 790 | - name: PreferIntel 791 | group: Graphics 792 | type: flag 793 | comment: Part of the Windows D3D12, D3D11 and Vulkan Render Hardware Interfaces, this lets you set a preferred adapter vendor. I guess you might want to use it if you've optimised for one over another, and the user has multiple installed? 794 | related: [ PreferAMD, PreferNVidia, PreferMS ] 795 | platforms: [ Windows ] 796 | - name: PreferNVidia 797 | group: Graphics 798 | type: flag 799 | comment: Part of the Windows D3D12, D3D11 and Vulkan Render Hardware Interfaces, this lets you set a preferred adapter vendor. I guess you might want to use it if you've optimised for one over another, and the user has multiple installed? 800 | related: [ PreferAMD, PreferIntel, PreferMS ] 801 | platforms: [ Windows ] 802 | - name: PreferMS 803 | group: Graphics 804 | type: flag 805 | comment: Part of the Windows D3D11 Render Hardware Interface *only*, this lets you set a preferred adapter vendor. I guess you might want to use it if you've optimised for one over another, and the user has multiple installed? 806 | related: [ PreferAMD, PreferIntel, PreferNVidia ] 807 | platforms: [ Windows ] 808 | - name: AllowSoftwareRendering 809 | group: Graphics 810 | type: flag 811 | platforms: [ Windows ] 812 | comment: In the D3D11 and D3D12 RHI, setting this allows it to fall back to software rendering. By default it seem this is disabled. 813 | - name: NoHMD 814 | group: VR 815 | type: flag 816 | comment: Disables head-mounted display. Useful for disabling SteamVR. 817 | - name: Multiprocess 818 | group: Unknown 819 | type: flag 820 | - name: MultiprocessSaveConfig 821 | group: Unknown 822 | type: flag 823 | - name: SkipCompile 824 | group: Unknown 825 | type: flag 826 | - name: SystemMalloc 827 | group: Unknown 828 | type: flag 829 | - name: NumThreads 830 | group: Unknown 831 | type: integer 832 | comment: Minimum 1. 833 | - name: NumRuns 834 | group: Unknown 835 | type: integer 836 | comment: Minimum 1. 837 | - name: MemPerThread 838 | group: Unknown 839 | type: integer 840 | comment: In kilobytes. 841 | - name: TouchMem 842 | group: Unknown 843 | type: flag 844 | -------------------------------------------------------------------------------- /yaml/uenum.yml: -------------------------------------------------------------------------------- 1 | id: uenum 2 | ############################################################################### 3 | 4 | specifiers: 5 | 6 | - name: Category 7 | group: General 8 | position: main 9 | type: flag 10 | utility: 3 11 | 12 | 13 | - name: Bitflags 14 | group: General 15 | position: meta 16 | type: flag 17 | utility: 3 18 | documentation: 19 | text: Indicates that this enumerated type can be used as flags by integer `UPROPERTY` variables that are set up with the `Bitmask` Metadata Specifier. 20 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#enummetadataspecifiers 21 | 22 | 23 | - name: UseEnumValuesAsMaskValuesInEditor 24 | group: General 25 | position: meta 26 | type: bool 27 | related: [ uproperty.BitMask, uproperty.BitmaskEnum ] 28 | comment: Allows a `UENUM` to be used as checkmark-style flags in a UPROPERTY. 29 | 30 | 31 | - name: Experimental 32 | group: General 33 | position: meta 34 | type: flag 35 | comment: As far as I can tell, this doesn't affect functionality in any way, it's more as "user documentation". 36 | documentation: 37 | text: Labels this type as experimental and unsupported. 38 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#enummetadataspecifiers 39 | 40 | 41 | - name: ScriptName 42 | group: General 43 | position: main 44 | type: flag 45 | documentation: 46 | text: The quoted string will be used as the name of this enumerated type in the editor, rather than the default name generated by Unreal Header Tool. 47 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#enummetadataspecifiers 48 | 49 | 50 | - name: ToolTip 51 | group: General 52 | position: main 53 | type: flag 54 | related: [ ShortToolTip ] 55 | documentation: 56 | text: Overrides the automatically generated tooltip from code comments. 57 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#enummetadataspecifiers 58 | 59 | 60 | - name: ShortToolTip 61 | group: General 62 | type: string 63 | position: meta 64 | related: [ ToolTip ] 65 | comment: 66 | | 67 | The tooltip returned when passing true for `bShortTooltip` in `GetTooltTipText`. Can be used in conjunction with `ToolTip` or a code comment. 68 | 69 | Not used for UENUM in the engine code. 70 | samples: 71 | - | 72 | UENUM(meta=(ShortToolTip="Short Tooltip for the enum")) 73 | enum class EMyEnum : uint8 74 | { 75 | ... 76 | }; 77 | - | 78 | // Retrieve the EMyEnum short tooltip 79 | UEnum* MyEnum = StaticEnum(); 80 | FText ShortTooltip = MyEnum->GetToolTipText(/*bShortTooltip*/ true); 81 | 82 | 83 | - name: BlueprintType 84 | group: General 85 | position: main 86 | type: flag 87 | utility: 3 88 | comment: Exposes the UENUM to be used as a variable type in Blueprint scripts. 89 | -------------------------------------------------------------------------------- /yaml/ufunction.yml: -------------------------------------------------------------------------------- 1 | id: ufunction 2 | specifiers: 3 | 4 | ############################################################################### 5 | # Blueprint Logic 6 | 7 | - name: BlueprintCallable 8 | group: Blueprint Logic 9 | type: flag 10 | utility: 3 11 | position: main 12 | documentation: 13 | text: The function can be executed in a Blueprint or Level Blueprint graph. 14 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 15 | 16 | - name: BlueprintImplementableEvent 17 | group: Blueprint Logic 18 | type: flag 19 | utility: 3 20 | position: main 21 | comment: | 22 | Functions using `BlueprintImplementableEvent` can not be overridden in C++, but can be overridden in any Blueprint subclass, or any Blueprint class that implements your interface. 23 | documentation: 24 | text: The function can be implemented in a Blueprint or Level Blueprint graph. 25 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 26 | 27 | - name: BlueprintNativeEvent 28 | group: Blueprint Logic 29 | type: flag 30 | utility: 3 31 | position: main 32 | documentation: 33 | text: 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. 34 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 35 | 36 | - name: ForceAsFunction 37 | group: Blueprint Logic 38 | type: flag 39 | position: meta 40 | version: ">= 5.1" 41 | comment: Allows users to change a BlueprintImplementableEvent with no return value from an event into a function. 42 | required: [ BlueprintImplementableEvent ] 43 | links: 44 | - [ "Changelist", "https://github.com/EpicGames/UnrealEngine/commit/8942fcd50bf1cb828ccbb9cfd84ee2619f020fce" ] 45 | 46 | - name: BlueprintPure 47 | group: Blueprint Logic 48 | type: flag 49 | type-comment: Technically a flag but can be used with false to disable 50 | position: main 51 | documentation: 52 | text: The function does not affect the owning object in any way and can be executed in a Blueprint or Level Blueprint graph. 53 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 54 | comment: | 55 | A `BlueprintPure` function is shown as a node with no execution pin. By 56 | default functions marked `const` will be exposed as pure functions. To make a const function not a pure function, use `BlueprintPure=false`. 57 | 58 | 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. 59 | images: [ /ufunction/blueprintpure.jpg ] 60 | samples: 61 | - | 62 | UFUNCTION(BlueprintPure) 63 | int32 BlueprintPureFunction(); 64 | 65 | UFUNCTION(BlueprintCallable) 66 | int32 BlueprintCallableFunction(); 67 | 68 | UFUNCTION(BlueprintCallable) 69 | int32 BlueprintCallableConstFunction() const; 70 | 71 | UFUNCTION(BlueprintPure=false) 72 | int32 BlueprintPureFalseFunction() const; 73 | 74 | - name: ArrayParm 75 | group: Blueprint Logic 76 | type: string 77 | type-comment: Parameter name 78 | position: meta 79 | comment: | 80 | This only seems to be used in `KismetArrayLibrary.h` where it's used with `CustomThunk`-marked functions. 81 | 82 | Note that this is "ArrayParm" and *not* "ArrayParam". 83 | required: [ CustomThunk ] 84 | related: [ ArrayTypeDependentParams, CustomThunk ] 85 | documentation: 86 | text: 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. 87 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 88 | 89 | - name: ArrayTypeDependentParams 90 | group: Blueprint Logic 91 | type: string 92 | type-comment: Comma-separated list of parameters 93 | position: meta 94 | required: [ ArrayParm, CustomThunk ] 95 | comment: | 96 | This must be used with `ArrayParm` and `CustomThunk` to mark up any parameters whose type depends on the corresponding `ArrayParm`. 97 | 98 | Check out how `KismetArrayLibrary.h` uses it to make generic Blueprint functinos. 99 | documentation: 100 | text: When ArrayParm is used, this specifier indicates one parameter which will determine the types of all parameters in the ArrayParm list. 101 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 102 | 103 | - name: AutoCreateRefTerm 104 | group: Blueprint Logic 105 | type: string 106 | type-comment: Comma-separated list of parameters 107 | utility: 2 108 | position: meta 109 | comment: | 110 | 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. 111 | 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).\" 112 | 113 | Note that it's possible to set multiple ref parameters by using a comma-separated list. 114 | samples: 115 | - | 116 | UFUNCTION(BlueprintCallable) 117 | void SomeColorWithoutRef(const FLinearColor& Color) {} 118 | 119 | UFUNCTION(BlueprintCallable, meta=(AutoCreateRefTerm="Color")) 120 | void SomeColorWithRef(const FLinearColor& Color) {} 121 | images: [ /ufunction/autocreaterefterm.jpg ] 122 | documentation: 123 | text: 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. 124 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 125 | 126 | - name: BlueprintAutocast 127 | group: Blueprint Logic 128 | type: flag 129 | position: meta 130 | comment: 131 | 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. 132 | `BlueprintAutocast` is the way to make your own Blueprint helper functions to do that cast action. 133 | 134 | `BlueprintAutocast` requires the function to be static, public, `BlueprintPure`, have at least 1 input, and have a return output. 135 | Only the first input will be considered for auto conversion, but you can have multiple. 136 | samples: 137 | - | 138 | public: 139 | UFUNCTION(BlueprintPure, meta=(BlueprintAutocast)) 140 | static EAnimal IntToAnimal(int32 Input); 141 | documentation: 142 | text: 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. 143 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 144 | images: [ /ufunction/blueprintautocast.png, /ufunction/blueprintautocast-drag.png ] 145 | 146 | - name: BlueprintInternalUseOnly 147 | group: Blueprint Logic 148 | type: bool 149 | position: meta 150 | deprecated: KismetInternalUseOnly 151 | documentation: 152 | text: This function is an internal implementation detail, used to implement another function or node. It is never directly exposed in a Blueprint graph. 153 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 154 | 155 | - name: BlueprintProtected 156 | group: Blueprint Logic 157 | type: flag 158 | position: meta 159 | documentation: 160 | text: This function can only be called on the owning Object in a Blueprint. It cannot be called on another instance. 161 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 162 | 163 | - name: CallableWithoutWorldContext 164 | group: Blueprint Logic 165 | type: flag 166 | position: meta 167 | documentation: 168 | text: 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. 169 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 170 | 171 | - name: CommutativeAssociativeBinaryOperator 172 | group: Blueprint Logic 173 | type: flag 174 | position: meta 175 | documentation: 176 | text: 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. 177 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 178 | 179 | - name: SealedEvent 180 | group: Blueprint Logic 181 | type: flag 182 | position: main 183 | documentation: 184 | text: 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. 185 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 186 | 187 | - name: CustomStructureParam 188 | group: Blueprint Logic 189 | type: string 190 | position: meta 191 | documentation: 192 | text: 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. 193 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 194 | 195 | - name: DefaultToSelf 196 | group: Blueprint Logic 197 | type: flag 198 | position: meta 199 | documentation: 200 | text: For BlueprintCallable functions, this indicates that the Object property's named default value should be the self context of the node. 201 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 202 | 203 | - name: DeprecatedFunction 204 | type: flag 205 | group: Blueprint Logic 206 | related: [ DeprecationMessage ] 207 | position: meta 208 | documentation: 209 | text: 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. 210 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 211 | 212 | - name: DeprecationMessage 213 | group: Blueprint Logic 214 | type: string 215 | utility: 3 216 | related: [ DeprecatedFunction ] 217 | position: meta 218 | documentation: 219 | text: If the function is deprecated, this message will be added to the standard deprecation warning when trying to compile a Blueprint that uses it. 220 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 221 | 222 | - name: DeterminesOutputType 223 | group: Blueprint Logic 224 | type: string 225 | utility: 3 226 | position: meta 227 | related: [ DynamicOutputParam ] 228 | samples: 229 | - | 230 | UFUNCTION(BlueprintCallable, Category="Utilities", meta=(WorldContext="WorldContextObject", DeterminesOutputType="ActorClass", DynamicOutputParam="OutActors")) 231 | static void GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf ActorClass, TArray& OutActors); 232 | documentation: 233 | text: "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 or TSoftObjectPtr, where the function's original return type is X* or a container with X* as the value type, such as TArray." 234 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 235 | 236 | ############################################################################### 237 | # Editor 238 | 239 | - name: CallInEditor 240 | group: Editor 241 | type: flag 242 | utility: 2 243 | position: main 244 | comment: | 245 | Causes a `UFUNCTION` with _no parameters_ and _no return value_ to be shown in the details panel of **object instances**. 246 | 247 | 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++. 248 | 249 | 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**. 250 | 251 | 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. 252 | samples: 253 | - | 254 | UFUNCTION(Category="Helper Functions", CallInEditor) 255 | void AutofillData(); 256 | UFUNCTION(Category="Helper Functions", CallInEditor) 257 | void ReticulateSplines(); 258 | UFUNCTION(Category="Helper Functions", CallInEditor) 259 | void IncreaseLevel(); 260 | - | 261 | // This works 262 | UFUNCTION(CallInEditor) 263 | void MainPosition(); 264 | // This also works, but I wouldn't use it 265 | UFUNCTION(meta=(CallInEditor=true)) 266 | void MetaPosition(); 267 | documentation: 268 | text: This function can be called in the editor on selected instances via a button in the Details panel. 269 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 270 | images: [ /ufunction/callineditor.jpg ] 271 | 272 | 273 | ############################################################################### 274 | # C++ 275 | 276 | - name: CustomThunk 277 | group: C++ 278 | type: flag 279 | utility: 2 280 | position: main 281 | comment: | 282 | I'm still not very familiar with this but check out `KismetArrayLibrary.h` for an implementation that uses it. 283 | 284 | See [CustomThunkExample.h](https://github.com/benui-dev/UE-Specifier-Docs/blob/main/Example/Source/Example/UFunction/CustomThunkExample.h) and [CustomThunkExample.cpp](https://github.com/benui-dev/UE-Specifier-Docs/blob/main/Example/Source/Example/UFunction/CustomThunkExample.cpp). 285 | documentation: 286 | text: 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. 287 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 288 | 289 | 290 | ############################################################################### 291 | # Console 292 | 293 | - name: Exec 294 | group: Console 295 | position: main 296 | type: flag 297 | utility: 3 298 | comment: | 299 | 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. 300 | 301 | The classes that are supported by `Exec` by default are: 302 | * `UWorld` 303 | * `UPlayerInput` 304 | * `UGameInstance` 305 | * `APlayerController` 306 | * `APawn` 307 | * `AHUD` 308 | * `AGameModeBase` 309 | * `ACheatManager` 310 | * `AGameStateBase` 311 | * `APlayerCameraManager` 312 | 313 | By default it uses the function name as the console command. The command can be changed by using the meta specifier `OverrideNativeName` (like `meta=(OverrideNativeName=“Player.SetHealth")` ). [Source](https://dev.epicgames.com/community/learning/tutorials/dXl5/advanced-debugging-in-unreal-engine#cheatmanager) 314 | documentation: 315 | text: The function can be executed from the in-game console. Exec commands only function when declared within certain Classes. 316 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 317 | 318 | - name: AdvancedDisplay 319 | group: Appearance 320 | position: meta 321 | type: string or integer 322 | utility: 2 323 | documentation: 324 | text: | 325 | The comma-separated list of parameters will show up as advanced pins (requiring UI expansion). 326 | 327 | 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). 328 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 329 | 330 | 331 | ############################################################################### 332 | # Appearance 333 | 334 | - name: CompactNodeTitle 335 | group: Appearance 336 | type: string 337 | utility: 2 338 | position: meta 339 | images: [ /ufunction/compactnodetitle.jpg ] 340 | samples: 341 | - | 342 | UFUNCTION(BlueprintPure) 343 | FString WithoutCompactTitle(bool InBool); 344 | 345 | UFUNCTION(BlueprintPure, meta=(CompactNodeTitle = ":)")) 346 | FString WithCompactTitle(bool InBool); 347 | documentation: 348 | text: Indicates that a BlueprintCallable function should display in the compact display mode, and provides the name to display in that mode. 349 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 350 | 351 | - name: DevelopmentOnly 352 | group: Debug 353 | type: flag 354 | utility: 2 355 | position: meta 356 | documentation: 357 | text: 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. 358 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 359 | - name: DisplayName 360 | group: Appearance 361 | type: string 362 | utility: 3 363 | position: meta 364 | documentation: 365 | text: The name of this node in a Blueprint will be replaced with the value provided here, instead of the code-generated name. 366 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 367 | - name: ReturnDisplayName 368 | group: Appearance 369 | type: string 370 | utility: 2 371 | position: meta 372 | comment: | 373 | Change the label on the return value from the default "Return Value" to the specified string. 374 | 375 | 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. 376 | samples: 377 | - | 378 | UFUNCTION(BlueprintCallable, Category = "Doggy Daycare", meta=(ReturnDisplayName = "Success")) 379 | bool TryPetDog(const FName Name); 380 | - | 381 | // Does the same thing but looks gross 382 | UFUNCTION(BlueprintCallable, Category = "Doggy Daycare") 383 | UPARAM(meta=(DisplayName="Success")) 384 | bool TryPetDog(const FName Name); 385 | - name: ExpandEnumAsExecs 386 | group: Blueprint Logic 387 | type: string 388 | type-comment: name of enum parameter 389 | utility: 2 390 | position: meta 391 | samples: 392 | - | 393 | UENUM() 394 | enum class EAnimalType : uint8 395 | { 396 | Cat, 397 | Dog, 398 | Rooster 399 | }; 400 | 401 | UFUNCTION(BlueprintCallable, meta=(ExpandEnumAsExecs="Animal")) 402 | static void SwitchAnimalByName(FString Name, EAnimalType& Animal); 403 | images: [ /ufunction/expandenumsasexecs.jpg ] 404 | documentation: 405 | text: 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. 406 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 407 | - name: ExpandBoolAsExecs 408 | group: Blueprint Logic 409 | type: string 410 | type-comment: name of bool parameter 411 | utility: 2 412 | position: meta 413 | comment: Note that "ReturnValue" is a special string used to refer to the return value of the function. 414 | samples: 415 | - | 416 | UFUNCTION(BlueprintCallable, meta=(ExpandBoolAsExecs="ReturnValue")) 417 | static bool IsAboveFreezing(float Temperature); 418 | - | 419 | UFUNCTION(BlueprintCallable, meta=(ExpandBoolAsExecs="bFreezing")) 420 | static void IsAboveFreezing(float Temperature, bool& bFreezing); 421 | documentation: 422 | text: 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. 423 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 424 | - name: HidePin 425 | group: Appearance 426 | type: string 427 | position: meta 428 | documentation: 429 | text: 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. 430 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 431 | - name: HideSelfPin 432 | group: Appearance 433 | type: flag 434 | position: meta 435 | documentation: 436 | text: 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. 437 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 438 | - name: InternalUseParam 439 | group: Debug 440 | type: string 441 | position: meta 442 | documentation: 443 | text: 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. 444 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 445 | - name: KeyWords 446 | group: Debug 447 | type: string 448 | type-comment: space-separated list 449 | utility: 2 450 | position: meta 451 | documentation: 452 | text: 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. 453 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 454 | - name: Latent 455 | group: General 456 | type: flag 457 | position: meta 458 | related: [ LatentInfo ] 459 | documentation: 460 | text: Indicates a latent action. Latent actions have one parameter of type FLatentActionInfo, and this parameter is named by the LatentInfo specifier. 461 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 462 | - name: LatentInfo 463 | group: General 464 | type: string 465 | position: meta 466 | related: [ Latent ] 467 | documentation: 468 | text: For Latent BlueprintCallable functions indicates which parameter is the LatentInfo parameter. 469 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 470 | - name: MaterialParameterCollectionFunction 471 | group: Materials 472 | type: flag 473 | position: meta 474 | documentation: 475 | text: For BlueprintCallable functions, indicates that the material override node should be used. 476 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 477 | - name: NativeBreakFunc 478 | group: General 479 | type: flag 480 | position: meta 481 | documentation: 482 | text: For BlueprintCallable functions, indicates that the function should be displayed the same way as a standard Break Struct node. 483 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 484 | - name: NotBlueprintThreadSafe 485 | group: General 486 | type: flag 487 | position: meta 488 | documentation: 489 | text: Only valid in Blueprint function libraries. This function will be treated as an exception to the owning Class's general BlueprintThreadSafe metadata. 490 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 491 | - name: ShortToolTip 492 | group: Appearance 493 | type: string 494 | position: meta 495 | documentation: 496 | text: A short tooltip that is used in some contexts where the full tooltip might be overwhelming, such as the Parent Class Picker dialog. 497 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 498 | - name: ToolTip 499 | group: Appearance 500 | type: string 501 | position: meta 502 | documentation: 503 | text: Overrides the automatically generated tooltip from code comments. 504 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 505 | - name: UnsafeDuringActorConstruction 506 | group: General 507 | type: flag 508 | position: meta 509 | documentation: 510 | text: This function is not safe to call during Actor construction. 511 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 512 | - name: WorldContext 513 | group: General 514 | type: string 515 | position: meta 516 | documentation: 517 | text: Used by BlueprintCallable functions to indicate which parameter determines the World in which the operation takes place. 518 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 519 | 520 | 521 | 522 | ############################################################################### 523 | # Network 524 | 525 | - name: Server 526 | group: Network 527 | type: flag 528 | utility: 3 529 | position: main 530 | incompatible: [ Client, Remote ] 531 | documentation: 532 | text: 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. 533 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 534 | - name: Client 535 | group: Network 536 | type: flag 537 | utility: 3 538 | position: main 539 | incompatible: [ Server, Remote ] 540 | documentation: 541 | text: 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. 542 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 543 | - name: Remote 544 | group: Network 545 | type: flag 546 | utility: 2 547 | position: main 548 | version: ">= 5.5" 549 | incompatible: [ Server, Client ] 550 | documentation: 551 | text: The RPC is executed on the remote side of the connection. The remote side of the connection can be either the server or the client, but the RPC must be called on an actor that is owned by a client. The RPC behaves like both a Client and a Server RPC, but is never executed on the local side of the connection, only the remote side. 552 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/remote-procedure-calls-in-unreal-engine?application_version=5.5 553 | - name: NetMulticast 554 | group: Network 555 | type: flag 556 | utility: 3 557 | position: main 558 | documentation: 559 | text: The function is executed both locally on the server, and replicated to all clients, regardless of the Actor's NetOwner. 560 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 561 | - name: BlueprintAuthorityOnly 562 | group: Network 563 | type: flag 564 | utility: 3 565 | position: main 566 | documentation: 567 | text: This function will only execute from Blueprint code if running on a machine with network authority (a server, dedicated server, or single-player game). 568 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 569 | - name: WithValidation 570 | group: Network 571 | type: flag 572 | utility: 2 573 | position: main 574 | documentation: 575 | text: 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. 576 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 577 | - name: BlueprintCosmetic 578 | group: Network 579 | type: flag 580 | utility: 2 581 | position: main 582 | documentation: 583 | text: This function is cosmetic and will not run on dedicated servers. 584 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 585 | - name: Reliable 586 | group: Network 587 | type: flag 588 | utility: 3 589 | position: main 590 | antonyms: [ Unreliable ] 591 | required: [ Client, Server ] 592 | comment: | 593 | The class and its parents must be marked as replicated for replicated functions to work. Check your constructor has `SetIsReplicatedByDefault(true)`. 594 | documentation: 595 | text: 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. 596 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 597 | - name: Unreliable 598 | group: Network 599 | type: flag 600 | utility: 3 601 | position: main 602 | antonyms: [ Reliable ] 603 | required: [ Client, Server ] 604 | documentation: 605 | text: 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. 606 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 607 | - name: ServiceRequest 608 | group: Network 609 | type: flag 610 | utility: 2 611 | position: main 612 | related: [ ServiceResponse ] 613 | implies: [ NetMulticast, Reliable ] 614 | documentation: 615 | text: This function is an RPC (Remote Procedure Call) service request. This implies NetMulticast and Reliable. 616 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 617 | - name: ServiceResponse 618 | group: Network 619 | type: flag 620 | utility: 2 621 | position: main 622 | related: [ ServiceRequest ] 623 | implies: [ NetMulticast, Reliable ] 624 | documentation: 625 | text: This function is an RPC service response. This implies NetMulticast and Reliable. 626 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine#functionspecifiers 627 | 628 | - name: DynamicOutputParam 629 | position: meta 630 | type: string 631 | type-comment: Parameter name 632 | utility: 2 633 | group: Blueprint Logic 634 | related: [ DeterminesOutputType ] 635 | samples: 636 | - | 637 | UFUNCTION(BlueprintCallable, Category="Utilities", meta=(WorldContext="WorldContextObject", DeterminesOutputType="ActorClass", DynamicOutputParam="OutActors")) 638 | static void GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf ActorClass, TArray& OutActors); 639 | - name: AllowPrivateAccess 640 | position: meta 641 | type: bool 642 | utility: 2 643 | group: Blueprint Logic 644 | comment: | 645 | If I recall correctly, Unreal complains if you expose a C++-`private` function in Blueprints. This tag is to get around that. 646 | 647 | - name: (ParameterName=DefaultValue) 648 | position: meta 649 | type: string 650 | utility: 2 651 | group: Blueprint Logic 652 | comment: | 653 | 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. 654 | samples: 655 | - | 656 | UFUNCTION(BlueprintCallable, meta=(Number="99")) 657 | void DefaultParamInMeta(int32 Number); 658 | 659 | UFUNCTION(BlueprintCallable) 660 | void DefaultParamInCPP(int32 Number = 99); 661 | 662 | UFUNCTION(BlueprintCallable, meta=(Number="1")) 663 | void DefaultParamInBoth(int32 Number = 99); 664 | - | 665 | UFUNCTION(BlueprintCallable, meta=(ComponentClass="ActorComponent")) 666 | void DefaultTSubclassValue(TSubclassOf ComponentClass); 667 | - | 668 | UFUNCTION(BlueprintCallable, meta=(RectColor="(R=0,G=1,B=0,A=1)")) 669 | void DefaultStructValue(FLinearColor RectColor); 670 | images: 671 | - /ufunction/parametername.jpg 672 | - /ufunction/defaulttsubclassofvalue.jpg 673 | - /ufunction/defaultstructvalue.jpg 674 | - name: DataTablePin 675 | position: meta 676 | type: string 677 | group: Data Tables 678 | documentation: 679 | text: Metadata to identify an DataTable Pin. Depending on which DataTable is selected, we display different RowName options 680 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 681 | 682 | ############################################################################### 683 | # Blueprint 684 | 685 | - name: SetParam 686 | group: Blueprint 687 | position: meta 688 | type: string 689 | type-comment: Groups are separated by commas, params are separated by pipe. 690 | utility: 1 691 | related: [ MapParam ] 692 | required: [ CustomThunk ] 693 | comment: | 694 | 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`. 695 | 696 | In the Blueprint function declaration you write `int32` but with these metadata specifiers and CustomThunk you can make it work for any datatype. 697 | images: [ /ufunction/setparam.png ] 698 | samples: 699 | - | 700 | // An arbitrary function that takes a set of any type and does something with it 701 | UFUNCTION(BlueprintCallable, CustomThunk, meta=(SetParam="SetToCheck|Value")) 702 | static void CheckSet(const TSet& SetToCheck, int32 Value); 703 | 704 | - name: MapParam 705 | group: Blueprint 706 | position: meta 707 | type: string 708 | type-comment: Groups are separated by commas, params are separated by pipe. 709 | utility: 1 710 | related: [ SetParam, MapKeyParam, MapValueParam ] 711 | required: [ CustomThunk ] 712 | comment: | 713 | 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`. 714 | 715 | To add other parameters that match the types of the key and value of the Map, check `MapKeyParam` and `MapValueParam`. 716 | 717 | In the Blueprint function declaration you write `int32` but with these metadata specifiers and CustomThunk you can make it work for any datatype. 718 | documentation: 719 | text: Metadata that flags TMap function parameters that will have their type determined at blueprint compile time 720 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 721 | samples: 722 | - | 723 | // An arbitrary function that takes a map of any type and does something with it 724 | UFUNCTION(BlueprintCallable, CustomThunk, meta=(MapParam="SomeMap")) 725 | static void CheckMap(TMap& SomeMap); 726 | 727 | - name: MapKeyParam 728 | group: Blueprint 729 | position: meta 730 | type: string 731 | type-comment: Groups are separated by commas, params are separated by pipe. 732 | utility: 1 733 | related: [ SetParam, MapParam, MapValueParam ] 734 | required: [ MapParam, CustomThunk ] 735 | comment: 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. 736 | 737 | 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. 738 | 739 | In the Blueprint function declaration you write `int32` but with these metadata specifiers and CustomThunk you can make it work for any datatype. 740 | samples: 741 | - | 742 | UFUNCTION(BlueprintCallable, CustomThunk, meta=(MapParam="MapToCheck", MapKeyParam="KeyBlah")) 743 | static void CheckMap(TMap& MapToCheck, const int32& KeyBlah); 744 | documentation: 745 | text: Metadata that flags TMap function parameters that will have their key type determined at blueprint compile time 746 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 747 | 748 | - name: MapValueParam 749 | group: Blueprint 750 | position: meta 751 | type: string 752 | type-comment: Groups are separated by commas, params are separated by pipe. 753 | utility: 1 754 | related: [ SetParam, MapParam, MapValueParam ] 755 | required: [ MapParam, CustomThunk ] 756 | comment: 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. 757 | 758 | 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. 759 | 760 | In the Blueprint function declaration you write `int32` but with these metadata specifiers and CustomThunk you can make it work for any datatype. 761 | samples: 762 | - | 763 | UFUNCTION(BlueprintCallable, CustomThunk, meta=(MapParam="MapToCheck", MapValueParam="ValueBlah")) 764 | static void CheckMap(TMap& MapToCheck, const int32& ValueBlah); 765 | documentation: 766 | text: Metadata that flags TMap function parameter that will have their value type determined at blueprint compile time 767 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 768 | -------------------------------------------------------------------------------- /yaml/uinterface.yml: -------------------------------------------------------------------------------- 1 | id: uinterface 2 | specifiers: 3 | 4 | - name: BlueprintType 5 | group: Blueprint 6 | type: flag 7 | utility: 3 8 | position: main 9 | comment: Whether this is set or not does not affect if the interface can be implemented by a Blueprint class. 10 | documentation: 11 | text: Exposes this class as a type that can be used for variables in Blueprints. 12 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/interfaces-in-unreal-engine#interfacespecifiers 13 | 14 | - name: DependsOn 15 | group: Blueprint 16 | type: string 17 | position: main 18 | comment: Seems deprecated? 19 | documentation: 20 | text: All classes listed will be compiled before this class. ClassName must specify a class in the same (or a previous) package. Multiple dependency classes can be specified using a single `DependsOn` line delimited by commas, or can be specified using a separate `DependsOn` line for each class. This is important when a class uses a struct or enum declared in another class as the compiler only knows what is in the classes it has already compiled. 21 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/interfaces-in-unreal-engine#interfacespecifiers 22 | 23 | - name: MinimalApi 24 | group: Blueprint 25 | type: flag 26 | position: main 27 | documentation: 28 | text: Causes only the class's type information to be exported for use by other modules. The class can be cast to, but the functions of the class cannot be called (with the exception of inline methods). This improves compile times by not exporting everything for classes that do not need all of their functions accessible in other modules. 29 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/interfaces-in-unreal-engine#interfacespecifiers 30 | 31 | - name: Category 32 | group: Blueprint 33 | type: string 34 | utility: 3 35 | position: main 36 | 37 | - name: CannotImplementInterfaceInBlueprint 38 | group: Blueprint 39 | type: flag 40 | position: meta 41 | comment: By default all `UINTERFACE`s are implementable in Blueprints. This tag changes that behavior. You may want to set this on interfaces that are for low-level C++ classes only, to clean up the interface drop-down box in Blueprints. 42 | 43 | - name: DisplayName 44 | group: Blueprint 45 | type: string 46 | utility: 3 47 | position: meta 48 | 49 | - name: Experimental 50 | group: Blueprint 51 | type: flag 52 | position: main 53 | 54 | -------------------------------------------------------------------------------- /yaml/umeta.yml: -------------------------------------------------------------------------------- 1 | id: umeta 2 | ############################################################################### 3 | # UMETA 4 | 5 | specifiers: 6 | 7 | - name: DisplayName 8 | group: Display 9 | position: main 10 | type: string 11 | samples: 12 | - | 13 | UENUM(BlueprintType) 14 | enum class UMetaExample : uint8 15 | { 16 | Cat UMETA(DisplayName="Kitty"), 17 | Dog, 18 | Rooster, 19 | }; 20 | documentation: 21 | text: This value's name will be the text provided here, rather than the code-generated name. 22 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#enummetadataspecifiers 23 | 24 | - name: Hidden 25 | group: Display 26 | position: main 27 | type: flag 28 | samples: 29 | - | 30 | UENUM(BlueprintType) 31 | enum class UMetaExample : uint8 32 | { 33 | Cat, 34 | Dog, 35 | Rooster, 36 | Count UMETA(Hidden), 37 | }; 38 | comment: 39 | This can be used in conjunction with `ENUM_RANGE_BY_COUNT` to allow [iteration over `UENUM`](/unreal/iterate-over-enum-tenumrange). 40 | 41 | It looks like "Spacer" used to be an alternative name for this. 42 | documentation: 43 | text: This value will not appear in the Editor. 44 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#enummetadataspecifiers 45 | 46 | - name: ToolTip 47 | group: Display 48 | position: main 49 | type: string 50 | samples: 51 | - | 52 | UENUM(BlueprintType) 53 | enum class UMetaExample : uint8 54 | { 55 | Cat, 56 | Dog, 57 | Rooster UMETA(ToolTip="It's like a chicken"), 58 | Count, 59 | }; 60 | documentation: 61 | text: Overrides the automatically generated tooltip from code comments. 62 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#enummetadataspecifiers 63 | 64 | - name: RowType 65 | group: Display 66 | position: main 67 | type: string 68 | samples: 69 | - | 70 | USTRUCT(BlueprintType) 71 | struct FMyStruct 72 | { 73 | ... 74 | }; 75 | 76 | UPROPERTY(EditAnywhere, meta = (RowType = "/Script/MyModule.MyStruct")) 77 | FDataTableRowHandle RowHandleExample; 78 | comment: 79 | Allows the editor drop-down of a `FDataTableRowHandle` to only show data tables of a specific row type. 80 | 81 | Currently undocumented but implemented in [`DataTableCustomization.cpp`](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Editor/DetailCustomizations/Private/DataTableCustomization.cpp#L37). 82 | 83 | - name: FilePathFilter 84 | group: Display 85 | position: main 86 | type: string 87 | samples: 88 | - | 89 | UPROPERTY(EditAnywhere, meta = (FilePathFilter = "Text Files (*.txt)|*.txt")) 90 | FFilePath MyFilePath; 91 | comment: | 92 | Used by FFilePath properties. Indicates the path filter to display in the file picker. 93 | 94 | The filter string follows the `Description|ExtensionList` format as used in many operating systems. 95 | The following example filter would limit the file picker to show `*.txt` files only: `Text files (*.txt)|*.txt` 96 | Multiple filters can be applied like this: `Text files (*.txt)|*.txt|Image files (*.png)|*.png|All files (*.*)|*.*` 97 | -------------------------------------------------------------------------------- /yaml/uparam.yml: -------------------------------------------------------------------------------- 1 | id: uparam 2 | 3 | specifiers: 4 | 5 | - name: DisplayName 6 | group: Blueprint Logic 7 | type: string 8 | utility: 3 9 | position: main 10 | comment: | 11 | Allows renaming parameters in `UFUNCTION` functions. 12 | samples: 13 | - | 14 | UFUNCTION(BlueprintCallable) 15 | void MakeDog( 16 | UPARAM(DisplayName = "Years (dog years)") float Years, 17 | UPARAM(DisplayName = "Fur Color") FLinearColor Color); 18 | 19 | - name: ref 20 | group: Blueprint Logic 21 | type: flag 22 | position: main 23 | comment: | 24 | If a `UFUNCTION` parameter is a non-const reference, it is displayed as an 25 | output pin by default. It's assumed that the struct will be filled. 26 | 27 | I would think hard about what the purpose is of your function when choosing 28 | if you need to use `UPARAM()`. Looking at the example code below: 29 | 30 | * `FillDogInfo` takes an empty data structure that is provided to it, and fills it out. In Blueprints it is shown as an output pin. 31 | * `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`. 32 | * `UseDogInfo` takes a `const` reference data structure. It cannot change the values of the data. 33 | images: [ /uparam/uparam-ref.jpg ] 34 | samples: 35 | - | 36 | // Fill an empty data structure 37 | UFUNCTION(BlueprintCallable) 38 | void FillDogInfo(FDogInfo& OutResult); 39 | 40 | // Use existing data, add some more 41 | UFUNCTION(BlueprintCallable) 42 | void UseAndFillDogInfo(UPARAM(ref) FDogInfo& SearchParams); 43 | 44 | // Just use existing data and don't change it 45 | UFUNCTION(BlueprintCallable) 46 | void UseDogInfo(const FDogInfo& SearchParams); 47 | 48 | - name: AllowAbstract 49 | group: Pickers 50 | type: bool 51 | position: meta 52 | comment: | 53 | Works exclusively with `TSubclassOf`. By default, `TSubclassOf` will allow abstract choosing classes. 54 | samples: 55 | - | 56 | UFUNCTION(BlueprintCallable, Category = "Composure", meta = (DeterminesOutputType = "OutputType")) 57 | UCompositingElementOutput* FindOutputPass(UPARAM(meta=(AllowAbstract=false)) TSubclassOf OutputType, FName OptionalPassName = NAME_None); 58 | 59 | - name: Categories 60 | group: Pickers 61 | type: string 62 | type-comment: comma-separated list of gameplay tags 63 | utility: 3 64 | position: meta 65 | comment: | 66 | Limits the Gameplay Tags that are selectable on the `UFUNCTION`. Works in the same way as the `UPROPERTY` `Categories` meta flag. 67 | samples: 68 | - | 69 | UFUNCTION(BlueprintCallable) 70 | void SellItems(UPARAM(meta=(Categories="Inventory.Item") )FGameplayTag Itemtag, int32 Count); 71 | - | 72 | UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = GameplayEffects) 73 | virtual void UpdateActiveGameplayEffectSetByCallerMagnitude(FActiveGameplayEffectHandle ActiveHandle, UPARAM(meta=(Categories="SetByCaller")) FGameplayTag SetByCallerTag, float NewValue); 74 | 75 | - name: MustImplement 76 | group: Pickers 77 | type: string 78 | type-comment: comma-separated list of interface script paths 79 | position: meta 80 | comment: | 81 | Limits the classes selectable in blueprint from `TSoftClassPtr` or `TSubclassOf` to only those that implement the named interfaces 82 | samples: 83 | - | 84 | UFUNCTION(unreliable, client, BlueprintCallable, Category="Game|Feedback") 85 | void ClientSpawnGenericCameraLensEffect(UPARAM(meta=(MustImplement="CameraLensEffectInterface")) TSubclassOf LensEffectEmitterClass); 86 | images: [/uparam/spawn-generic-camera-lens-effect.png] 87 | 88 | - name: AllowedClasses 89 | group: Pickers 90 | type: string 91 | type-comment: comma-separated list of classes 92 | version: ">= 5.5" 93 | position: meta 94 | comment: | 95 | This works the same as the UPROPERTY specifier of the same name. Limits the classes available in pickers in Blueprint. Note that the string must *not* contain prefixes, so "Actor" is correct, "AActor" is incorrect. This *does* work with interfaces. 96 | 97 | - name: ShowDisplayNames 98 | group: Pickers 99 | type: flag 100 | version: ">= 5.5" 101 | position: meta 102 | comment: | 103 | Unknown, but it works the same as the UPROPERTY specifier of the same name. 104 | -------------------------------------------------------------------------------- /yaml/ustruct.yml: -------------------------------------------------------------------------------- 1 | id: ustruct 2 | 3 | specifiers: 4 | 5 | - name: BlueprintType 6 | group: Blueprint Logic 7 | type: flag 8 | utility: 3 9 | position: main 10 | comment: Setting this allows the struct to be added as a variable to Blueprints. To expose a struct to blueprints with `BlueprintReadOnly`, the struct must be marked with `BlueprintType`. 11 | documentation: 12 | text: Exposes this struct as a type that can be used for variables in Blueprints. 13 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 14 | 15 | - name: NoExport 16 | group: C++ 17 | type: flag 18 | utility: 1 19 | position: main 20 | comment: | 21 | "No autogenerated code will be created" means you don't need to write `GENERATED_BODY` 22 | documentation: 23 | text: No autogenerated code will be created for this class; the header is only provided for parsing metadata. 24 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 25 | 26 | #- name: Deprecated 27 | # group: Display 28 | # type: flag 29 | # comment: Doesn't seem to work for `USTRUCT`? 30 | # 31 | #- name: DeprecationMessage 32 | # group: Display 33 | # type: string 34 | # position: meta 35 | # comment: Doesn't seem to work for `USTRUCT`? 36 | # documentation: 37 | # text: Deprecated classes with this metadata will include this text with the standard deprecation warning that Blueprint Scripts generate during compilation. 38 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 39 | # 40 | #- name: DisplayName 41 | # group: Display 42 | # type: string 43 | # position: meta 44 | # documentation: 45 | # text: The name of this node in a Blueprint Script will be replaced with the value provided here, instead of the code-generated name. 46 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 47 | # 48 | #- name: DontUseGenericSpawnObject 49 | # group: Display 50 | # type: flag 51 | # position: meta 52 | # documentation: 53 | # text: Do not spawn an Object of the class using Generic Create Object node in Blueprint Scripts; this specifier applies only to Blueprint-type classes that are neither Actors nor Actor Components. 54 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 55 | # 56 | #- name: ExposedAsyncProxy 57 | # group: Display 58 | # type: flag 59 | # position: meta 60 | # documentation: 61 | # text: Expose a proxy Object of this class in Async Task nodes. 62 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 63 | # 64 | #- name: IgnoreCategoryKeywordsInSubclasses 65 | # group: Display 66 | # type: flag 67 | # position: meta 68 | # documentation: 69 | # text: Used to make the first subclass of a class ignore all inherited ShowCategories and HideCategories Specifiers. 70 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 71 | # 72 | #- name: KismetHideOverrides 73 | # group: Display 74 | # type: string 75 | # type-comment: Comma-separated list of event names 76 | # position: meta 77 | # documentation: 78 | # text: List of Blueprint events that are not allowed to be overridden. 79 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 80 | # 81 | #- name: ProhibitedInterfaces 82 | # group: Display 83 | # type: string 84 | # type-comment: Comma-separated list of interfaces 85 | # position: meta 86 | # documentation: 87 | # text: Lists Interfaces that are not compatible with the class. 88 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 89 | # 90 | #- name: RestrictedToClasses 91 | # group: Display 92 | # type: string 93 | # type-comment: Comma-separated list of class names 94 | # position: meta 95 | # documentation: 96 | # text: Blueprint function library classes can use this to restrict usage to the classes named in the list. 97 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 98 | # 99 | #- name: ShowWorldContextPin 100 | # group: Display 101 | # type: flag 102 | # position: meta 103 | # documentation: 104 | # text: Indicates that Blueprint nodes placed in graphs owned by this class must show their World context pins, even if they are normally hidden, because Objects of this class cannot be used as World context. 105 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 106 | 107 | #- name: Keywords 108 | #group: Display 109 | #type: string 110 | #type-comment: Comma-separated 111 | #position: meta 112 | 113 | - name: ToolTip 114 | group: Display 115 | position: meta 116 | type: flag 117 | utility: 2 118 | related: [ ShortToolTip ] 119 | documentation: 120 | text: Overrides the automatically generated tooltip from code comments. 121 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#structmetadataspecifiers 122 | 123 | 124 | - name: ShortToolTip 125 | group: Display 126 | type: string 127 | utility: 2 128 | position: meta 129 | related: [ ToolTip ] 130 | comment: 131 | | 132 | The tooltip returned when passing true for `bShortTooltip` in `GetTooltTipText`. Can be used in conjunction with `ToolTip` or a code comment. 133 | 134 | Used for USTRUCT only by Niagara in the engine. 135 | samples: 136 | - | 137 | USTRUCT(BlueprintType, meta = (ShortToolTip = "Short Tooltip for my Struct")) 138 | struct FMyStruct 139 | { 140 | GENERATED_BODY() 141 | }; 142 | - | 143 | // Retrieve the FMyStruct short tooltip 144 | UStruct* MyStruct = FMyStruct::StaticStruct(); 145 | FText ShortTooltip = MyStruct->GetToolTipText(/*bShortTooltip*/ true); 146 | documentation: 147 | text: A short tooltip that is used in some contexts where the full tooltip might be overwhelming, such as the Parent Class Picker dialog. 148 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/metadata-specifiers-in-unreal-engine#structmetadataspecifiers 149 | 150 | 151 | - name: HiddenByDefault 152 | group: Blueprint Logic 153 | type: flag 154 | position: meta 155 | documentation: 156 | text: Pins in Make and Break nodes are hidden by default. 157 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 158 | 159 | #- name: CanFlattenStruct 160 | #- name: Abstract 161 | #- name: Experimental 162 | #- name: DocumentationPolicy 163 | # type: string 164 | #- name: MenuDescSuffix 165 | #- name: NiagaraClearEachFrame 166 | #- name: NiagaraInternalType 167 | #- name: NodeColor 168 | #- name: PrototypeName 169 | #- name: ScriptName 170 | 171 | 172 | #- name: Constant 173 | #- name: TitleColor 174 | #- name: Varying 175 | 176 | 177 | 178 | 179 | 180 | - name: DisableSplitPin 181 | group: Blueprint Logic 182 | type: flag 183 | position: meta 184 | related: [ HasNativeMake, HasNativeBreak ] 185 | comment: | 186 | "Split Struct Pin" is an option available when right-clicking the return node of a `UFUNCTION`. It is only available if all the variables within the struct are exposed to blueprints, and if `DisableSplitPin` is not present in the USTRUCT definition. 187 | 188 | Why you might want to use it is a more interesting question. The only example of this being used in the codebase is with `FGameplayTag`. Gameplay tags are structs but only contain an `FName` property that is used as their ID. I suppose that `DisableSplitPin` is used because Epic wanted to discourage users from splitting the struct out to `FName` when it's much more helpful to keep it as an `FStruct` and use all the helper functions within. 189 | documentation: 190 | text: Indicates that node pins of this struct type cannot be split 191 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 192 | samples: 193 | - | 194 | USTRUCT(meta=(DisableSplitPin)) 195 | struct FGameplayTag 196 | { 197 | GENERATED_BODY() 198 | UPROPERTY(VisibleAnywhere, Category = GameplayTags) 199 | FName TagName; 200 | }; 201 | images: [ /ustruct/disablesplitpin.jpg ] 202 | 203 | 204 | - name: HasNativeBreak 205 | group: Blueprint Logic 206 | type: string 207 | type-comment: Function name 208 | utility: 1 209 | position: meta 210 | related: [ HasNativeMake, DisableSplitPin ] 211 | documentation: 212 | text: Indicates that the struct has a custom break node (and what the path to the BlueprintCallable UFunction is) that should be used instead of the default BreakStruct node. 213 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 214 | comment: | 215 | `HasNativeBreak` lets you specify a static `UFUNCTION()` to use instead of the default behavior when a user chooses "Break (Struct)" 216 | 217 | By default all properties marked as `BlueprintReadOnly` or `BlueprintReadWrite` would be present in the node. Defining a native break function can let you customize what is present in that node. 218 | samples: 219 | - | 220 | USTRUCT(BlueprintType, meta = (HasNativeBreak = "ExampleProject.CatHelperLibrary.BreakCatStruct")) 221 | struct FCat 222 | { 223 | GENERATED_BODY() 224 | public: 225 | UPROPERTY() 226 | FString Name; 227 | UPROPERTY() 228 | FLinearColor CoatColor; 229 | UPROPERTY() 230 | FString SecretPetName; 231 | }; 232 | 233 | UCLASS() 234 | class UCatHelperLibrary : public UBlueprintFunctionLibrary 235 | { 236 | GENERATED_BODY() 237 | public: 238 | UFUNCTION(BlueprintPure, Category = "Cat", meta = (BlueprintThreadSafe)) 239 | static void BreakCatStruct(const FCat& Cat, FString& OutName, FLinearColor& OutCoatColor); 240 | }; 241 | void UCatHelperLibrary::BreakCatStruct(const FCat& Cat, FString& OutName, FLinearColor& OutCoatColor) 242 | { 243 | OutName = Cat.Name; 244 | OutCoatColor = Cat.CoatColor; 245 | } 246 | images: [ /ustruct/hasnativebreak.jpg ] 247 | 248 | 249 | - name: HasNativeMake 250 | group: Blueprint Logic 251 | type: string 252 | type-comment: Function name 253 | utility: 1 254 | related: [ HasNativeBreak, DisableSplitPin ] 255 | position: meta 256 | images: [ /ustruct/hasnativemake.jpg ] 257 | comment: | 258 | Similar to `HasNativeBreak`, `HasNativeMake` allows you to specify a `static` `UFUNCTION()` to use to create and fill the values of a struct, without having to make the values within the struct `BlueprintReadWrite`. 259 | 260 | documentation: 261 | text: Indicates that the struct has a custom make node (and what the path to the BlueprintCallable UFunction is) that should be used instead of the default MakeStruct node. 262 | source: "https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/CoreUObject/Public/UObject/ObjectMacros.h" 263 | samples: 264 | - | 265 | USTRUCT(BlueprintType, meta = (HasNativeMake = "ExampleProject.CatHelperLibrary.MakeCatStruct")) 266 | struct FCat 267 | { 268 | GENERATED_BODY() 269 | public: 270 | UPROPERTY() 271 | FString Name; 272 | UPROPERTY() 273 | FLinearColor CoatColor; 274 | UPROPERTY() 275 | FString SecretPetName; 276 | }; 277 | 278 | UCLASS() 279 | class UCatHelperLibrary : public UBlueprintFunctionLibrary 280 | { 281 | GENERATED_BODY() 282 | public: 283 | UFUNCTION(BlueprintPure, Category = "Cat", meta = (BlueprintThreadSafe)) 284 | static FCat MakeCatStruct(FString Name, FLinearColor CoatColor); 285 | }; 286 | 287 | FCat UCatHelperLibrary::MakeCatStruct(FString Name, FLinearColor CoatColor) 288 | { 289 | FCat Cat; 290 | Cat.Name = Name; 291 | Cat.CoatColor = CoatColor; 292 | return Cat; 293 | } 294 | 295 | 296 | 297 | 298 | 299 | #- name: BlueprintSpawnableComponent 300 | # group: Unknown 301 | # type: flag 302 | # position: meta 303 | # comment: This is listed in the `USTRUCT` documentation but it is not used inside `USTRUCT` the codebase and the documentation explicitly references components, which are classes and not structs. I think this is an error. 304 | # documentation: 305 | # text: If present, the component Class can be spawned by a Blueprint. 306 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 307 | 308 | 309 | #- name: UsesHierarchy 310 | # group: Deprecated 311 | # type: flag 312 | # position: meta 313 | # comment: The official documentation lists this for both `UCLASS` and `USTRUCT` but there are no instances of it being used in the codebase and **no code that seems to recognise it**. So I think it's maybe legacy or something someone forgot. 314 | # documentation: 315 | # text: Indicates the class uses hierarchical data. Used to instantiate hierarchical editing features in Details panels. 316 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 317 | # 318 | #- name: IsBlueprintBase 319 | # group: Unknown 320 | # type: bool 321 | # position: meta 322 | # comment: This is listed on the official documentation pages for both `UCLASS` and `USTRUCT` but as far as I can tell it does not make sense for `USTRUCT`. It is possible to create struct data types within the editor, but you cannot subclass them from C++-defined `USTRUCT`s. I think this is a mistake 323 | # documentation: 324 | # text: "States that this class is (or is not) an acceptable base class for creating Blueprints, similar to the Blueprintable or 'NotBlueprintable` Specifiers." 325 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 326 | 327 | 328 | 329 | - name: Immutable 330 | group: Deprecated 331 | type: flag 332 | position: main 333 | documentation: 334 | text: Immutable is only legal in Object.h and is being phased out, do not use on new structs!. 335 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 336 | 337 | 338 | - name: Atomic 339 | group: Deprecated 340 | type: flag 341 | position: main 342 | comment: This is listed in the official documentation but I can't find a single use of it inside the Unreal Engine codebase. 343 | documentation: 344 | text: Indicates that this struct should always be serialized as a single unit. No autogenerated code will be created for this class; the header is only provided to parse metadata from. 345 | source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 346 | 347 | #- name: BlueprintThreadSafe 348 | # group: Unknown 349 | # type: flag 350 | # position: meta 351 | # comment: Listed on the `USTRUCT` docs page but is only relevant to `UCLASS` blueprint function libraries. 352 | # documentation: 353 | # text: Only valid on Blueprint function libraries. This specifier marks the functions in this class as callable on non-game threads in animation Blueprints. 354 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 355 | # 356 | #- name: ChildCannotTick 357 | # group: Unknown 358 | # type: flag 359 | # position: meta 360 | # comment: This is listed in the official documentation but I can't find a single use of it inside the Unreal Engine codebase. 361 | # documentation: 362 | # text: Used for Actor and Component classes. If the native class cannot tick, Blueprint-generated classes based this Actor or Component can never tick, even if bCanBlueprintsTickByDefault is true. 363 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 364 | # 365 | #- name: ChildCanTick 366 | # group: Display 367 | # type: flag 368 | # position: meta 369 | # documentation: 370 | # text: Used for Actor and Component classes. If the native class cannot tick, Blueprint-generated classes based this Actor or Component can have the bCanEverTick flag overridden, even if bCanBlueprintsTickByDefault is false. 371 | # source: https://dev.epicgames.com/documentation/en-us/unreal-engine/struct-specifiers 372 | 373 | --------------------------------------------------------------------------------