├── .gitignore ├── Resources └── Icon128.png ├── Content └── Python │ ├── init_unreal.py │ ├── BlueprintLibrary │ ├── SampleActorAction.py │ ├── SampleBlueprintFunction.py │ ├── SampleAssetAction.py │ └── __init__.py │ ├── unreal_startup.py │ ├── UserInterfaces │ ├── __init__.py │ └── SampleEditorExtension.py │ ├── unreal_utils.py │ ├── unreal_icon.py │ ├── unreal_uiutils.py │ └── unreal_global.py ├── Config └── UserEngine.ini ├── README.md ├── PythonScripting.uplugin └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | __pycache__ -------------------------------------------------------------------------------- /Resources/Icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josephkirk/UnrealPythonScriptingTemplate/HEAD/Resources/Icon128.png -------------------------------------------------------------------------------- /Content/Python/init_unreal.py: -------------------------------------------------------------------------------- 1 | import unreal 2 | from unreal_global import * 3 | 4 | unreal.log("""@ 5 | 6 | #################### 7 | 8 | Unreal Init Script 9 | 10 | #################### 11 | 12 | """) 13 | 14 | import unreal_startup -------------------------------------------------------------------------------- /Config/UserEngine.ini: -------------------------------------------------------------------------------- 1 | [/Script/PythonScriptPlugin.PythonScriptPluginSettings] 2 | +AdditionalPaths=(Path="D:\unreal\PythonProject\Python") 3 | bDeveloperMode=True 4 | bRemoteExecution=True 5 | RemoteExecutionMulticastGroupEndpoint=239.0.0.1:6766 6 | RemoteExecutionMulticastBindAddress=0.0.0.0 7 | RemoteExecutionSendBufferSizeBytes=2097152 8 | RemoteExecutionReceiveBufferSizeBytes=2097152 9 | RemoteExecutionMulticastTtl=0 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Template for extend unreal editor with python 2 | 3 | ## USAGE 4 | Clone this project to your Unreal Project Plugin folder 5 | 6 | In **BlueprintLibrary** Module duplicate relevant blueprint action utility sample and extend functionality, any module will be auto generated with blueprint asset when unreal load. 7 | 8 | In **User Interfaces** store examples of how to create menu and toolbar button as well as add python function to asset/actor context menu. 9 | 10 | !!! Note 11 | Test in Unreal 4.26 12 | -------------------------------------------------------------------------------- /PythonScripting.uplugin: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "Version": 1, 4 | "VersionName": "1.0", 5 | "FriendlyName": "PythonScripting", 6 | "Description": "Python Scripting Template", 7 | "Category": "Other", 8 | "CreatedBy": "Nguyen Phi Hung", 9 | "CreatedByURL": "", 10 | "DocsURL": "", 11 | "MarketplaceURL": "", 12 | "SupportURL": "", 13 | "CanContainContent": true, 14 | "IsBetaVersion": false, 15 | "IsExperimentalVersion": false, 16 | "Installed": false, 17 | "Plugins": [ 18 | { 19 | "Name": "PythonScriptPlugin", 20 | "Enabled": true 21 | }, 22 | { 23 | "Name": "SequencerScripting", 24 | "Enabled": true 25 | }, 26 | { 27 | "Name": "PythonAutomationTest", 28 | "Enabled": true 29 | }, 30 | { 31 | "Name": "EditorScriptingUtilities", 32 | "Enabled": true 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /Content/Python/BlueprintLibrary/SampleActorAction.py: -------------------------------------------------------------------------------- 1 | from unreal_global import * 2 | import unreal_utils 3 | import unreal 4 | 5 | 6 | @unreal.uclass() 7 | class SampleActorAction(unreal.ActorActionUtility): 8 | # @unreal.ufunction(override=True) 9 | # def get_supported_class(self): 10 | # return unreal.Actor 11 | 12 | @unreal.ufunction( 13 | static=True, 14 | meta=dict(CallInEditor=True, Category="Sample Actor Action Library"), 15 | ) 16 | def python_test_actor_action(): 17 | unreal.log("Execute Sample Actor Action") 18 | 19 | @unreal.ufunction( 20 | params=[str], 21 | static=True, 22 | meta=dict(CallInEditor=True, Category="Sample Actor Action Library"), 23 | ) 24 | def python_test_actor_action_with_parameters(input_string): 25 | unreal.log("Execute Sample Actor Action with {}".format(input_string)) 26 | 27 | 28 | # Unreal need a actual blueprint asset to be created and inherit from the new class for it to work 29 | # unreal_utils.register_editor_utility_blueprint("SampleActorUtility", SampleActorAction) 30 | -------------------------------------------------------------------------------- /Content/Python/BlueprintLibrary/SampleBlueprintFunction.py: -------------------------------------------------------------------------------- 1 | from unreal_global import * 2 | 3 | 4 | @unreal.uclass() 5 | class SamplePythonBlueprintLibrary(unreal.BlueprintFunctionLibrary): 6 | @unreal.ufunction( 7 | static=True, meta=dict(Category="Sample Blueprint Function Library") 8 | ) 9 | def python_test_bp_action_noinput(): 10 | unreal.log("Execute Bluerprint Action No Input") 11 | 12 | @unreal.ufunction( 13 | params=[int, str], 14 | static=True, 15 | meta=dict(Category="Sample Blueprint Function Library"), 16 | ) 17 | def python_test_bp_action_input(input_num, input_str): 18 | unreal.log( 19 | "Execute Bluerprint Action With Inputs {} {}".format( 20 | input_num, input_string 21 | ) 22 | ) 23 | 24 | @unreal.ufunction( 25 | ret=str, static=True, meta=dict(Category="Sample Blueprint Function Library") 26 | ) 27 | def python_test_bp_action_return(): 28 | result = "Success" 29 | unreal.log("Execute Bluerprint Action Return") 30 | return result 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Phi Hung Nguyen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Content/Python/unreal_startup.py: -------------------------------------------------------------------------------- 1 | import unreal 2 | import unreal_uiutils 3 | from unreal_global import * 4 | from unreal_utils import AssetRegistryPostLoad 5 | unreal.log("""@ 6 | 7 | #################### 8 | 9 | Init Start up Script 10 | 11 | #################### 12 | 13 | """) 14 | 15 | assetregistry_pretickhandle = None 16 | 17 | def assetregistry_postload_handle(deltaTime): 18 | """ 19 | Run callback method after registry run to prevent crashed when create new asset at startupS 20 | """ 21 | unreal.log_warning("..Checking Asset Registy Status...") 22 | if AssetRegistry.is_loading_assets(): 23 | unreal.log_warning("..Asset registy still loading...") 24 | else: 25 | unreal.log_warning("Asset registy ready!") 26 | unreal.unregister_slate_post_tick_callback(assetregistry_pretickhandle) 27 | AssetRegistryPostLoad.run_callbacks() 28 | 29 | assetregistry_pretickhandle = unreal.register_slate_post_tick_callback(assetregistry_postload_handle) 30 | 31 | import BlueprintLibrary 32 | import UserInterfaces 33 | 34 | def reload(): 35 | import importlib 36 | importlib.reload(BlueprintLibrary) 37 | importlib.reload(UserInterfaces) 38 | 39 | unreal_uiutils.refresh() 40 | -------------------------------------------------------------------------------- /Content/Python/UserInterfaces/__init__.py: -------------------------------------------------------------------------------- 1 | import unreal 2 | import sys 3 | from os.path import dirname, basename, isfile, join 4 | import glob 5 | import importlib 6 | import traceback 7 | 8 | dir_name = dirname(__file__) 9 | dir_basename = basename(dir_name) 10 | modules = glob.glob(join(dir_name, "*.py")) 11 | __all__ = [ basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py')] 12 | 13 | unreal.log("""@ 14 | 15 | #################### 16 | 17 | Load UI Library 18 | 19 | #################### 20 | """) 21 | for m in __all__: 22 | # __import__(m, locals(), globals()) 23 | try: 24 | mod = importlib.import_module("{}.{}".format(dir_basename, m)) 25 | if m in globals(): 26 | unreal.log("""@ 27 | #################### 28 | 29 | ReLoad UI Library 30 | 31 | #################### 32 | """) 33 | try: 34 | reload(mod) 35 | except: 36 | importlib.reload(mod) 37 | unreal.log("Successfully import {}".format(m)) 38 | except Exception as why: 39 | unreal.log_error("Fail to import {}.\n {}".format(m, why)) 40 | traceback.print_exc(file=sys.stdout) 41 | unreal.log("""@ 42 | 43 | #################### 44 | """) 45 | -------------------------------------------------------------------------------- /Content/Python/BlueprintLibrary/SampleAssetAction.py: -------------------------------------------------------------------------------- 1 | from unreal_global import * 2 | import unreal_utils 3 | import unreal 4 | 5 | 6 | @unreal.uclass() 7 | class SamplePythonAssetAction(unreal.AssetActionUtility): 8 | # @unreal.ufunction(override=True) 9 | # def get_supported_class(self): 10 | # return unreal.StaticMesh 11 | 12 | @unreal.ufunction( 13 | static=True, 14 | meta=dict(CallInEditor=True, Category="Sample Asset Action Library"), 15 | ) 16 | def python_dump_asset_info(): 17 | selected_assets = UtilLibrary.get_selected_assets() 18 | for asset in selected_assets: 19 | unreal.log( 20 | "{} {} {}".format( 21 | asset.get_name(), asset.get_outermost(), asset.get_path_name() 22 | ) 23 | ) 24 | 25 | # @unreal.ufunction(params=[int], static=True, meta=dict(CallInEditor=True, Category="Sample Asset Action Library")) 26 | # def test_asset_action(input_num): 27 | # unreal.log("Execute Sample Asset Action with {}".format(input_num)) 28 | 29 | 30 | # Unreal need a actual blueprint asset to be created and inherit from the new class for it to work 31 | # unreal_utils.register_editor_utility_blueprint( 32 | # "SampleAssetUtility", SamplePythonAssetAction 33 | # ) 34 | -------------------------------------------------------------------------------- /Content/Python/BlueprintLibrary/__init__.py: -------------------------------------------------------------------------------- 1 | import unreal 2 | from os.path import dirname, basename, isfile, join 3 | import glob 4 | import importlib 5 | import traceback 6 | import sys 7 | 8 | dir_name = dirname(__file__) 9 | dir_basename = basename(dir_name) 10 | modules = glob.glob(join(dir_name, "*.py")) 11 | __all__ = [ basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py')] 12 | 13 | unreal.log("""@ 14 | 15 | #################### 16 | 17 | Load Blueprint Library 18 | 19 | #################### 20 | """) 21 | 22 | for m in __all__: 23 | # __import__(m, locals(), globals()) 24 | try: 25 | mod = importlib.import_module("{}.{}".format(dir_basename, m)) 26 | if m in globals(): 27 | unreal.log("""@ 28 | #################### 29 | 30 | ReLoad Blueprint Library 31 | 32 | #################### 33 | """) 34 | try: 35 | reload(mod) 36 | except: 37 | importlib.reload(mod) 38 | # try: 39 | # unreal.reload(mod) 40 | # except: 41 | # unreal.log("{} is not Unreal Generated Class".format(m)) 42 | 43 | unreal.log("Successfully import {}".format(m)) 44 | except Exception as why: 45 | unreal.log_error("Fail to import {}.\n {}".format(m, why)) 46 | traceback.print_exc(file=sys.stdout) 47 | 48 | unreal.log("""@ 49 | 50 | #################### 51 | """) 52 | -------------------------------------------------------------------------------- /Content/Python/unreal_utils.py: -------------------------------------------------------------------------------- 1 | # Nguyen Phi Hung @ 2020 2 | # hung.nguyen@onikuma.games 3 | 4 | from unreal_global import * 5 | import hashlib 6 | import unreal 7 | 8 | 9 | class AssetRegistryPostLoad: 10 | _callbacks = {} 11 | 12 | @classmethod 13 | def register_callback(cls, func, *args, **kws): 14 | cls._callbacks[hashlib.md5(str((func, args, kws)).encode()).hexdigest()] = ( 15 | func, 16 | args, 17 | kws, 18 | ) 19 | 20 | @classmethod 21 | def unregister_callback(cls, func, *args, **kws): 22 | try: 23 | del cls._callbacks[hashlib.md5(str((func, args, kws)).encode()).hexdigest()] 24 | except KeyError: 25 | unreal.log_error( 26 | "No callback name {} with arguments: {} and keywords {} to unregister".format( 27 | func.__name__, args, kws 28 | ) 29 | ) 30 | 31 | @classmethod 32 | def run_callbacks(cls): 33 | for func_name, func_param in cls._callbacks.items(): 34 | func, args, kws = func_param 35 | unreal.log_warning( 36 | "execute {} with param {} keywords: {}".format(func.__name__, args, kws) 37 | ) 38 | try: 39 | func(*args, **kws) 40 | except Exception as why: 41 | unreal.log_error("failed to run with error:\n{}".format(why)) 42 | 43 | def get_outer_package(): 44 | return unreal.find_object(None, "/Engine/Transient") 45 | 46 | def create_unreal_asset( 47 | asset_name, package_path, factory, asset_class, force=False, save=True 48 | ): 49 | """ 50 | 51 | INPUT: 52 | asset_name: str 53 | Exp: "MyAwesomeBPActorClass" 54 | package_path: str 55 | Exp: "/Game/MyContentFolder" 56 | package_path: unreal.Factory: 57 | Exp: unreal.BlueprintFactory() 58 | asset_class: unreal.Object 59 | Exp: unreal.Actor 60 | force: bool 61 | Force remove old and create new one 62 | save: bool 63 | Save asset after creation 64 | 65 | OUPUT: 66 | unreal.Object 67 | 68 | """ 69 | 70 | asset_path = "{}/{}".format(package_path, asset_name) 71 | if AssetLibrary.does_asset_exist(asset_path): 72 | if force: 73 | unreal.log_warning("{} exists. Skip creating".format(asset_name)) 74 | return 75 | else: 76 | unreal.log_warning("{} exists. Remove existing asset.".format(asset_name)) 77 | AssetLibrary.delete_asset(asset_path) 78 | 79 | factory.set_editor_property("ParentClass", asset_class) 80 | 81 | new_asset = AssetTools.create_asset(asset_name, package_path, None, factory) 82 | 83 | if save: 84 | AssetLibrary.save_loaded_asset(new_asset) 85 | 86 | return new_asset 87 | 88 | 89 | def create_levelsequence_asset(asset_name, package_path, force=False, save=True): 90 | create_unreal_asset( 91 | asset_name, 92 | package_path, 93 | unreal.LevelSequenceFactoryNew(), 94 | unreal.LevelSequence, 95 | force, 96 | save, 97 | ) 98 | 99 | 100 | def create_blueprint_asset( 101 | asset_name, package_path, asset_parent_class, force=False, save=True 102 | ): 103 | create_unreal_asset( 104 | asset_name, 105 | package_path, 106 | unreal.BlueprintFactory(), 107 | asset_parent_class, 108 | force, 109 | save, 110 | ) 111 | 112 | 113 | def create_editor_utility_blueprint( 114 | asset_name, asset_parent_class, force=False, save=False 115 | ): 116 | create_unreal_asset( 117 | f"{asset_name}", 118 | "/Engine/", 119 | unreal.EditorUtilityBlueprintFactory(), 120 | asset_parent_class, 121 | force, 122 | save, 123 | ) 124 | 125 | 126 | def register_editor_utility_blueprint(asset_name, asset_parent_class): 127 | AssetRegistryPostLoad.register_callback( 128 | create_editor_utility_blueprint, asset_name, asset_parent_class 129 | ) 130 | 131 | 132 | # def new_object(object_class): 133 | # unreal.load_object(unreal.new_object(object_class)) 134 | # def register_editor_utility_blueprint(asset_name, asset_parent_class): 135 | # AssetRegistryPostLoad.register_callback(new_object, asset_parent_class) 136 | -------------------------------------------------------------------------------- /Content/Python/UserInterfaces/SampleEditorExtension.py: -------------------------------------------------------------------------------- 1 | # Create Virtuos Menu 2 | # Nguyen PHi Hung 3 | 4 | import unreal_uiutils 5 | from unreal_utils import AssetRegistryPostLoad 6 | import unreal 7 | 8 | 9 | def extend_editor(): 10 | # Create standard menu entry 11 | me_reloadbutton = unreal_uiutils.create_menu_button( 12 | name="ReloadBtn", 13 | label="Reload", 14 | command_string="import importlib; import unreal_startup; importlib.reload(unreal_startup); unreal_startup.reload()", 15 | ) 16 | me_quitbutton = unreal_uiutils.create_menu_button( 17 | name="QuitUnrealBtn", 18 | label="Quit Unreal", 19 | command_string="SystemLib.quit_editor()", 20 | ) 21 | 22 | # This create a button on toolboard 23 | tb_reloadbutton = unreal_uiutils.create_toolbar_button( 24 | name="ReloadBtn", 25 | label="PyReload", 26 | command_string="import importlib; import unreal_startup; importlib.reload(unreal_startup); unreal_startup.reload()", 27 | ) 28 | 29 | # This create a drop down button on toolboard 30 | tb_combobutton = unreal_uiutils.create_toolbar_combo_button( 31 | "comboBtn", "python.tools" 32 | ) 33 | #TODO: Find out where it is possible to register a new context menu for combo button 34 | 35 | # create submenu in 'File' Menu and register menu entry created above 36 | pythonsubmenu = unreal_uiutils.extend_mainmenu_item( 37 | "File", "PythonTools", "PythonTools", "Python Tools" 38 | ) 39 | pythonsubmenu.add_section("python.file.menu", "Python Tools") 40 | pythonsubmenu.add_menu_entry("python.file.menu", me_reloadbutton) 41 | pythonsubmenu.add_menu_entry("python.file.menu", me_quitbutton) 42 | 43 | # Create Standalone Menu and register menu entry created above 44 | new_mainmenu = unreal_uiutils.extend_mainmenu("Python", "Python") 45 | section = new_mainmenu.add_section("python.menu", "Python Tools") 46 | new_mainmenu.add_menu_entry("python.menu", me_reloadbutton) 47 | new_mainmenu.add_menu_entry("python.menu", me_quitbutton) 48 | new_entry = unreal.ToolMenuEntryExtensions.init_menu_entry( 49 | new_mainmenu.menu_name, 50 | "submenu", 51 | "Test Sub Menu", 52 | "nothing here", 53 | unreal.ToolMenuStringCommandType.COMMAND, 54 | "command", 55 | "", 56 | ) 57 | print(f"Script Object: {new_entry.script_object}") 58 | 59 | # Extend Asset Context Menu 60 | sub_asset_context_menu = unreal_uiutils.extend_toolmenu(unreal_uiutils.get_asset_context_menu(), "PythonAssetContextMenu", "Python Asset Actions") 61 | sub_asset_context_menu.add_section("python.assetmenu", "Tools") 62 | action_sampleassetprint = unreal_uiutils.create_menu_button( 63 | name="SampleAssetTool", 64 | label="Print Selected Assets", 65 | command_string='print(UtilLibrary.get_selected_assets())', 66 | ) 67 | sub_asset_context_menu.add_menu_entry("python.assetmenu", action_sampleassetprint) 68 | 69 | # Extend Asset Context Menu - Only show for Level Sequence Asset 70 | sequence_contextmenu = unreal_uiutils.get_sequence_asset_context_menu() 71 | sub_sequence_context_menu = unreal_uiutils.extend_toolmenu(sequence_contextmenu, "PythonSequenceContextMenu", "Python Sequence Actions") 72 | sub_sequence_context_menu.add_section("python.sequencemenu", "Tools") 73 | action_samplesequenceprint = unreal_uiutils.create_menu_button( 74 | name="SampleSequenceTool", 75 | label="Print Selected Assets", 76 | command_string='print(UtilLibrary.get_selected_assets())', 77 | ) 78 | sub_sequence_context_menu.add_menu_entry("python.sequencemenu", action_samplesequenceprint) 79 | 80 | # Extend Actor Context Menu 81 | actor_context_menu = unreal_uiutils.get_actor_context_menu() 82 | actor_context_menu.add_section("python.actoractions", "Python Tools") 83 | #!NOTE: The submenu can only be seen when right click in viewport and not the outliner 84 | sub_actor_context_menu = actor_context_menu.add_sub_menu(actor_context_menu.menu_name, "python.actoractions", "PythonActorContextMenu", "Python Actor Actions") 85 | # is_sub_actor_context_menu_registered = unreal.ToolMenus.get().is_menu_registered(sub_actor_context_menu.menu_name) 86 | # if not is_sub_actor_context_menu_registered: 87 | # unreal.ToolMenus.get().register_menu(sub_actor_context_menu.menu_name, actor_context_menu.menu_name) 88 | # print("{} - is registered {}".format(sub_actor_context_menu.menu_name, is_sub_actor_context_menu_registered)) 89 | sub_actor_context_menu.add_section("python.actormenu", "Tools") 90 | action_sampleactorprint = unreal_uiutils.create_menu_button( 91 | name="SampleActorTool", 92 | label="Print Selected Actor", 93 | command_string='print(LevelLibrary.get_selected_level_actors())', 94 | ) 95 | sub_actor_context_menu.add_menu_entry("python.actormenu", action_sampleactorprint) 96 | # actor_context_menu.add_menu_entry("python.actoractions", action_sampleactorprint) 97 | 98 | # AssetRegistryPostLoad.register_callback(extend_editor) 99 | extend_editor() -------------------------------------------------------------------------------- /Content/Python/unreal_icon.py: -------------------------------------------------------------------------------- 1 | # Know default icon in EditorStyle set 2 | EditorStyle = [ 3 | "Kismet.Status.Unknown" 4 | "Kismet.Status.Error" 5 | "Kismet.Status.Good" 6 | "Kismet.Status.Warning" 7 | 8 | "AssetEditor.SaveAsset" 9 | "SystemWideCommands.FindInContentBrowser" 10 | "BlueprintEditor.FindInBlueprint" 11 | "MaterialEditor.FindInMaterial" 12 | "TranslationEditor.Search" 13 | 14 | "FullBlueprintEditor.EditGlobalOptions" 15 | "FullBlueprintEditor.EditClassDefaults" 16 | "FullBlueprintEditor.SwitchToBlueprintDefaultsMode" 17 | "BlueprintEditor.EnableSimulation" 18 | "PlayWorld.PlayInViewport" 19 | "GraphEditor.ToggleHideUnrelatedNodes" 20 | "LevelEditor.Build" 21 | "LevelEditor.Recompile" 22 | "LevelEditor.OpenContentBrowser" 23 | "LevelEditor.EditorModes" 24 | "LevelEditor.ToggleVR" 25 | "LevelEditor.GameSettings" 26 | "LevelEditor.OpenLevelBlueprint" 27 | "LevelEditor.OpenMarketplace" 28 | "LevelEditor.EditMatinee" 29 | 30 | "LevelEditor.SourceControl" 31 | "LevelEditor.SourceControl.On" 32 | "LevelEditor.SourceControl.Off" 33 | "LevelEditor.SourceControl.Unknown" 34 | "LevelEditor.SourceControl.Problem" 35 | "MaterialEditor.Apply" 36 | "MaterialEditor.CameraHome" 37 | "MaterialEditor.ToggleRealtimeExpressions" 38 | "MaterialEditor.AlwaysRefreshAllPreviews" 39 | "MaterialEditor.ToggleLivePreview" 40 | "MaterialEditor.ToggleMaterialStats" 41 | "MaterialEditor.TogglePlatformStats" 42 | "MaterialEditor.CleanUnusedExpressions" 43 | "MaterialEditor.ShowHideConnectors" 44 | 45 | "PlayWorld.PausePlaySession" 46 | "PlayWorld.StopPlaySession" 47 | "PlayWorld.PossessPlayer" 48 | "PlayWorld.EjectFromPlayer" 49 | "PlayWorld.RepeatLastLaunch" 50 | "PlayWorld.PlayInNewProcess" 51 | "PlayWorld.PlayInEditorFloating" 52 | "PlayWorld.PlayInMobilePreview" 53 | "PlayWorld.PlayInVR" 54 | "PlayWorld.LateJoinSession" 55 | "PlayWorld.ResumePlaySession" 56 | "PlayWorld.Simulate" 57 | "PlayWorld.RepeatLastPlay" 58 | 59 | "PlayWorld.SingleFrameAdvance" 60 | "PlayWorld.ShowCurrentStatement" 61 | "PlayWorld.StepOut" 62 | "PlayWorld.StepInto" 63 | "PlayWorld.StepOver" 64 | 65 | "BTEditor.SwitchToBehaviorTreeMode" 66 | "UMGEditor.SwitchToDesigner" 67 | "FullBlueprintEditor.SwitchToScriptingMode" 68 | 69 | "EditorViewport.ToggleRealTime" 70 | 71 | "StaticMeshEditor.SetShowWireframe" 72 | "StaticMeshEditor.SetShowVertexColor" 73 | "StaticMeshEditor.SetRealtimePreview" 74 | "StaticMeshEditor.ReimportMesh" 75 | "StaticMeshEditor.SetShowBounds" 76 | "StaticMeshEditor.SetShowCollision" 77 | "StaticMeshEditor.SetShowGrid" 78 | "StaticMeshEditor.SetDrawUVs" 79 | "StaticMeshEditor.ResetCamera" 80 | "StaticMeshEditor.SetShowPivot" 81 | "StaticMeshEditor.SetShowSockets" 82 | "StaticMeshEditor.SetShowNormals" 83 | "StaticMeshEditor.SetShowTangents" 84 | "StaticMeshEditor.SetShowBinormals" 85 | "StaticMeshEditor.SetDrawAdditionalData" 86 | "StaticMeshEditor.SetShowVertices" 87 | "StaticMeshEditor.ToggleShowPivots" 88 | "StaticMeshEditor.ToggleShowSockets" 89 | "StaticMeshEditor.ToggleShowNormals" 90 | "StaticMeshEditor.ToggleShowTangents" 91 | "StaticMeshEditor.ToggleShowBinormals" 92 | "StaticMeshEditor.ToggleShowBounds" 93 | "StaticMeshEditor.ToggleShowGrids" 94 | "StaticMeshEditor.ToggleShowVertices" 95 | "StaticMeshEditor.ToggleShowWireframes" 96 | "StaticMeshEditor.ToggleShowVertexColors" 97 | "Persona.BakeMaterials" 98 | 99 | "AnimationEditor.ApplyCompression" 100 | "AnimationEditor.ExportToFBX" 101 | "AnimationEditor.ReimportAnimation" 102 | "AnimationEditor.CreateAsset" 103 | "AnimationEditor.SetKey" 104 | "AnimationEditor.ApplyAnimation" 105 | 106 | "Persona.TogglePreviewAsset" 107 | "Persona.CreateAsset" 108 | "Persona.ExportToFBX" 109 | "Persona.ConvertToStaticMesh" 110 | 111 | "EditorViewport.LocationGridSnap" 112 | "EditorViewport.RotationGridSnap" 113 | "EditorViewport.Layer2DSnap" 114 | "EditorViewport.ScaleGridSnap" 115 | "EditorViewport.ToggleSurfaceSnapping" 116 | "EditorViewport.RelativeCoordinateSystem_Local" 117 | "EditorViewport.RelativeCoordinateSystem_Local.Small" 118 | "EditorViewport.RelativeCoordinateSystem_World" 119 | "EditorViewport.RelativeCoordinateSystem_World.Small" 120 | "EditorViewport.CamSpeedSetting" 121 | 122 | "DetailsView.EditRawProperties" 123 | 124 | "CurveEd.Visible" 125 | "CurveEd.VisibleHighlight" 126 | "CurveEd.Invisible" 127 | "CurveEd.InvisibleHighlight" 128 | "Level.VisibleIcon16x" 129 | "Level.VisibleHighlightIcon16x" 130 | "Level.NotVisibleIcon16x" 131 | "Level.NotVisibleHighlightIcon16x" 132 | "GenericViewButton" 133 | 134 | "PropertyWindow.Button_CreateNewBlueprint" 135 | "PropertyWindow.Button_Browse" 136 | "PropertyWindow.Button_Use" 137 | 138 | "GenericLock" 139 | "GenericLock.Small" 140 | "GenericUnlock" 141 | "GenericUnlock.Small" 142 | "PropertyWindow.Locked" 143 | "PropertyWindow.Unlocked" 144 | "FindResults.LockButton_Locked" 145 | "FindResults.LockButton_Unlocked" 146 | "ContentBrowser.LockButton_Locked" 147 | "ContentBrowser.LockButton_Unlocked" 148 | 149 | "DetailsView.PulldownArrow.Down" 150 | "DetailsView.PulldownArrow.Down.Hovered" 151 | "DetailsView.PulldownArrow.Up" 152 | "DetailsView.PulldownArrow.Up.Hovered" 153 | 154 | "TreeArrow_Collapsed" 155 | "TreeArrow_Collapsed_Hovered" 156 | "TreeArrow_Expanded" 157 | "TreeArrow_Expanded_Hovered" 158 | 159 | "EditorViewport.TranslateMode" 160 | "EditorViewport.RotateMode" 161 | "EditorViewport.ScaleMode" 162 | 163 | "TimelineEditor.AddFloatTrack" 164 | "TimelineEditor.AddVectorTrack" 165 | "TimelineEditor.AddEventTrack" 166 | "TimelineEditor.AddColorTrack" 167 | "TimelineEditor.AddCurveAssetTrack" 168 | "TimelineEditor.DeleteTrack" 169 | ] -------------------------------------------------------------------------------- /Content/Python/unreal_uiutils.py: -------------------------------------------------------------------------------- 1 | # 4.25 + 2 | 3 | import unreal 4 | 5 | # @unreal.uclass() 6 | class EditorToolbarMenuEntry(unreal.ToolMenuEntryScript): 7 | def __init__( 8 | self, 9 | menu="None", 10 | section="None", 11 | name="None", 12 | label="", 13 | tool_tip="", 14 | icon=["None", "None", "None"], 15 | owner_name="None", 16 | insert_position=["None", unreal.ToolMenuInsertType.DEFAULT], 17 | advanced=[ 18 | "None", 19 | unreal.MultiBlockType.MENU_ENTRY, 20 | unreal.UserInterfaceActionType.BUTTON, 21 | False, 22 | False, 23 | True, 24 | False, 25 | ], 26 | ): 27 | unreal.Object.__init__(self) 28 | self._data = unreal.ToolMenuEntryScriptData( 29 | menu, 30 | section, 31 | name, 32 | label, 33 | tool_tip, 34 | icon, 35 | owner_name, 36 | insert_position, 37 | advanced, 38 | ) 39 | 40 | @property 41 | def data(self): 42 | return self._data 43 | 44 | 45 | def refresh(): 46 | unreal.ToolMenus.get().refresh_all_widgets() 47 | 48 | # Get Toolbar 49 | 50 | def get_toolbar(): 51 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar") 52 | 53 | def get_staticmesh_toolbar(): 54 | return unreal.ToolMenus.get().find_menu("AssetEditor.StaticMeshEditor.ToolBar") 55 | 56 | def get_skeletalmesh_toolbar(): 57 | return unreal.ToolMenus.get().find_menu("AssetEditor.SkeletalMeshEditor.ToolBar") 58 | 59 | # Get Toolbar SubMenu 60 | 61 | def get_buildcombo_sub_menu(): 62 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.BuildComboButton") 63 | 64 | def get_buildcombo_ligtingquality_sub_menu(): 65 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.BuildComboButton.LightingQuality") 66 | 67 | def get_buildcombo_ligtinginfo_sub_menu(): 68 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.BuildComboButton.LightingInfo") 69 | 70 | def get_buildcombo_ligtingdensity_sub_menu(): 71 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.BuildComboButton.LightingInfo.LightingDensity") 72 | 73 | def get_buildcombo_ligtingresolution_sub_menu(): 74 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.BuildComboButton.LightingInfo.LightingResolution") 75 | 76 | def get_leveltoolbar_setttings_sub_menu(): 77 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.LevelToolbarQuickSettings") 78 | 79 | def get_sourcecontrol_sub_menu(): 80 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.SourceControl") 81 | 82 | def get_editormodes_sub_menu(): 83 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.EditorModes") 84 | 85 | def get_openblueprint_sub_menu(): 86 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.OpenBlueprint") 87 | 88 | def get_cinematics_sub_menu(): 89 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.Cinematics") 90 | 91 | def get_compilecombo_sub_menu(): 92 | return unreal.ToolMenus.get().find_menu("LevelEditor.LevelEditorToolBar.CompileComboButton") 93 | 94 | # Get Context Menu 95 | 96 | def get_asset_context_menu(): 97 | return unreal.ToolMenus.get().find_menu("ContentBrowser.AssetContextMenu") 98 | 99 | def get_folder_context_menu(): 100 | return unreal.ToolMenus.get().find_menu("ContentBrowser.FolderContextMenu") 101 | 102 | def get_actor_context_menu(): 103 | return unreal.ToolMenus.get().find_menu("LevelEditor.ActorContextMenu") 104 | 105 | def get_dragdrop_context_menu(): 106 | return unreal.ToolMenus.get().find_menu("ContentBrowser.DragDropContextMenu") 107 | 108 | def get_sequence_asset_context_menu(): 109 | return unreal.ToolMenus.get().find_menu("ContentBrowser.AssetContextMenu.LevelSequence") 110 | 111 | def get_cameraanim_asset_context_menu(): 112 | return unreal.ToolMenus.get().find_menu("ContentBrowser.AssetContextMenu.CameraAnim") 113 | 114 | def get_mediaplayer_assetpicker_context_menu(): 115 | return unreal.ToolMenus.get().find_menu("MediaPlayer.AssetPickerAssetContextMenu") 116 | 117 | def get_soundwave_asset_context_menu(): 118 | return unreal.ToolMenus.get().find_menu("ContentBrowser.AssetContextMenu.SoundWave") 119 | 120 | def get_addnew_context_menu(): 121 | return unreal.ToolMenus.get().find_menu("ContentBrowser.AddNewContextMenu") 122 | 123 | def get_toolbar_item(name): 124 | return unreal.ToolMenus.get().find_menu( 125 | "LevelEditor.LevelEditorToolBar.{}".format(name) 126 | ) 127 | 128 | # Get Main Menu 129 | 130 | def get_mainmenu(): 131 | return unreal.ToolMenus.get().find_menu("MainFrame.MainMenu") 132 | 133 | def get_file_menu(): 134 | return unreal.ToolMenus.get().find_menu("MainFrame.MainMenu.File") 135 | 136 | def get_edit_menu(): 137 | return unreal.ToolMenus.get().find_menu("MainFrame.MainMenu.Edit") 138 | 139 | def get_asset_menu(): 140 | return unreal.ToolMenus.get().find_menu("MainFrame.MainMenu.Window") 141 | 142 | def get_window_menu(): 143 | return unreal.ToolMenus.get().find_menu("MainFrame.MainMenu.Help") 144 | 145 | def get_mainmenu_item(name): 146 | return unreal.ToolMenus.get().find_menu("MainFrame.MainMenu.{}".format(name)) 147 | 148 | 149 | def create_python_tool_menu_entry( 150 | name, label, command_string="", entry_type=unreal.MultiBlockType.MENU_ENTRY 151 | ): 152 | menu_entry = unreal.ToolMenuEntry(name, type=entry_type) 153 | menu_entry.set_label(label) 154 | if command_string: 155 | menu_entry.set_string_command( 156 | unreal.ToolMenuStringCommandType.PYTHON, "python", command_string 157 | ) 158 | return menu_entry 159 | 160 | 161 | def create_menu_button(name, label, command_string=""): 162 | return create_python_tool_menu_entry(name, label, command_string) 163 | 164 | 165 | def create_toolbar_button( 166 | name, label, section_name="", icons =["EditorStyle", "LevelEditor.EditorModes", "LevelEditor.EditorModes"], command_string="", register_button=True 167 | ): 168 | button = create_python_tool_menu_entry( 169 | name, label, command_string, entry_type=unreal.MultiBlockType.TOOL_BAR_BUTTON 170 | ) 171 | button.set_icon(*icons) 172 | if register_button: 173 | get_toolbar().add_menu_entry(section_name, button) 174 | return button 175 | 176 | 177 | def create_toolbar_combo_button(name, section_name, tool_tip="", register_button=True): 178 | # menu_name = ".".join([str(get_toolbar().menu_name),menu]) 179 | # section_name = ".".join([str(get_toolbar().menu_name), menu, section]) 180 | # get_toolbar().add_section(section_name) 181 | # menu_entry_script = EditorToolbarMenuEntry(get_toolbar().menu_name, section_name, name, "", tool_tip, ["EditorStyle", "DetailsView.PulldownArrow.Down", "DetailsView.PulldownArrow.Down"], get_toolbar().menu_name, ["None", unreal.ToolMenuInsertType.DEFAULT], ["None", unreal.MultiBlockType.TOOL_BAR_COMBO_BUTTON, unreal.UserInterfaceActionType.BUTTON, True, True, True, False]) 182 | # menu_entry_script.register_menu_entry() 183 | menu_entry = unreal.ToolMenuEntry( 184 | name, type=unreal.MultiBlockType.TOOL_BAR_COMBO_BUTTON 185 | ) 186 | if register_button: 187 | get_toolbar().add_menu_entry(section_name, menu_entry) 188 | return menu_entry 189 | 190 | 191 | def create_editable_text(name, label): 192 | menu_entry = unreal.ToolMenuEntry(name, type=unreal.MultiBlockType.EDITABLE_TEXT) 193 | menu_entry.set_label(label) 194 | return menu_entry 195 | 196 | 197 | def create_widget(name): 198 | return unreal.ToolMenuEntry(name, type=unreal.MultiBlockType.WIDGET) 199 | 200 | 201 | def create_heading(name): 202 | return unreal.ToolMenuEntry(name, type=unreal.MultiBlockType.HEADING) 203 | 204 | 205 | def create_separator(name="Separator"): 206 | return unreal.ToolMenuEntry(name, type=unreal.MultiBlockType.SEPARATOR) 207 | 208 | 209 | def extend_mainmenu_item(mainmenu_name, section_name, name, label, tooltips=""): 210 | parent_menu = get_mainmenu_item(mainmenu_name) 211 | return parent_menu.add_sub_menu( 212 | parent_menu.menu_name, section_name, name, label, tooltips 213 | ) 214 | 215 | def extend_file_menu(section_name, name, label, tooltips=""): 216 | extend_mainmenu_item("File", section_name, name, label, tooltips="") 217 | 218 | def extend_edit_menu(section_name, name, label, tooltips=""): 219 | extend_mainmenu_item("Edit", section_name, name, label, tooltips="") 220 | 221 | def extend_asset_menu(section_name, name, label, tooltips=""): 222 | extend_mainmenu_item("Asset", section_name, name, label, tooltips="") 223 | 224 | def extend_mesh_menu(section_name, name, label, tooltips=""): 225 | extend_mainmenu_item("Mesh", section_name, name, label, tooltips="") 226 | 227 | def extend_help_menu(section_name, name, label, tooltips=""): 228 | extend_mainmenu_item("Help", section_name, name, label, tooltips="") 229 | 230 | def extend_mainmenu(name, label, tooltip=""): 231 | main_menu = get_mainmenu() 232 | return main_menu.add_sub_menu( 233 | main_menu.menu_name, unreal.Name(), name, label, tooltip 234 | ) 235 | 236 | def extend_toolmenu(owner, name, label, section_name=unreal.Name(), tooltip=""): 237 | return owner.add_sub_menu( 238 | owner.menu_name, section_name, name, label, tooltip 239 | ) 240 | 241 | def extend_toolbar(name, label, tooltip=""): 242 | toolbar = get_toolbar() 243 | return toolbar.add_sub_menu(toolbar.menu_name, unreal.Name(), name, label, tooltip) 244 | 245 | def add_sequencer_toolbarbutton( 246 | name, label, section_name="Asset", icons = None, command_string="", register_button=True 247 | ): 248 | button = create_python_tool_menu_entry( 249 | name, label, command_string, entry_type=unreal.MultiBlockType.TOOL_BAR_BUTTON 250 | ) 251 | if icons: 252 | button.set_icon(*icons) 253 | if register_button: 254 | get_sequencer_toolbar().add_menu_entry(section_name, button) 255 | return button 256 | 257 | def parent_qt_window(qt_widget): 258 | unreal.parent_external_window_to_slate(qt_widget.winId()) 259 | 260 | def show_message(title, message, message_type, default_value=unreal.AppReturnType.NO): 261 | return unreal.EditorDialog.show_message(title, message, message_type, default_value) 262 | -------------------------------------------------------------------------------- /Content/Python/unreal_global.py: -------------------------------------------------------------------------------- 1 | import unreal 2 | 3 | AssetRegistry = unreal.AssetRegistryHelpers.get_asset_registry() 4 | 5 | UtilLibrary = unreal.EditorUtilityLibrary 6 | """ 7 | rename_asset(asset, new_name) -> None 8 | get_selection_set() -> Array(Actor) 9 | get_selection_bounds() -> (origin=Vector, box_extent=Vector, sphere_radius=float) 10 | get_selected_blueprint_classes() -> Array(type(Class)) 11 | get_selected_assets() -> Array(Object) 12 | get_selected_asset_data() -> Array(AssetData) 13 | get_actor_reference(path_to_actor) -> Actor 14 | """ 15 | 16 | AutomationScheduler = unreal.AutomationScheduler 17 | 18 | AssetTools = unreal.AssetToolsHelpers.get_asset_tools() 19 | """ 20 | rename_referencing_soft_object_paths(packages_to_check, asset_redirector_map) 21 | 22 | rename_assets_with_dialog(assets_and_names, auto_checkout=False) 23 | 24 | rename_assets(assets_and_names) 25 | 26 | open_editor_for_assets(assets) 27 | 28 | import_asset_tasks(import_tasks) 29 | 30 | import_assets_with_dialog(destination_path) 31 | 32 | import_assets_automated(import_data) 33 | 34 | find_soft_references_to_object(target_object) 35 | 36 | export_assets_with_dialog(assets_to_export, prompt_for_individual_filenames) 37 | 38 | export_assets(assets_to_export, export_path) 39 | 40 | duplicate_asset_with_dialog_and_title(asset_name, package_path, original_object, dialog_title) 41 | 42 | duplicate_asset_with_dialog(asset_name, package_path, original_object) 43 | 44 | duplicate_asset(asset_name, package_path, original_object) 45 | 46 | create_unique_asset_name(base_package_name, suffix) 47 | 48 | create_asset_with_dialog(asset_name, package_path, asset_class, factory, calling_context="None") 49 | 50 | create_asset(asset_name, package_path, asset_class, factory, calling_context="None") 51 | """ 52 | 53 | AssetLibrary = unreal.EditorAssetLibrary 54 | """ 55 | sync_browser_to_objects(cls, asset_paths) 56 | 57 | set_metadata_tag(cls, object, tag, value) 58 | 59 | save_loaded_assets(cls, assets_to_save, only_if_is_dirty=True) 60 | 61 | save_loaded_asset(cls, asset_to_save, only_if_is_dirty=True) 62 | 63 | save_directory(cls, directory_path, only_if_is_dirty=True, recursive=True) 64 | 65 | save_asset(cls, asset_to_save, only_if_is_dirty=True) 66 | 67 | rename_loaded_asset(cls, source_asset, destination_asset_path) 68 | 69 | rename_directory(cls, source_directory_path, destination_directory_path) 70 | 71 | rename_asset(cls, source_asset_path, destination_asset_path) 72 | 73 | remove_metadata_tag(cls, object, tag) 74 | 75 | make_directory(cls, directory_path) 76 | 77 | load_blueprint_class(cls, asset_path) 78 | 79 | load_asset(cls, asset_path) 80 | 81 | list_assets(cls, directory_path, recursive=True, include_folder=False) 82 | 83 | list_asset_by_tag_value(cls, tag_name, tag_value) 84 | 85 | get_tag_values(cls, asset_path) 86 | 87 | get_path_name_for_loaded_asset(cls, loaded_asset) 88 | 89 | get_metadata_tag_values(cls, object) 90 | 91 | get_metadata_tag(cls, object, tag) 92 | 93 | find_package_referencers_for_asset(cls, asset_path, load_assets_to_confirm=False) 94 | 95 | find_asset_data(cls, asset_path) 96 | 97 | duplicate_loaded_asset(cls, source_asset, destination_asset_path) 98 | 99 | duplicate_directory(cls, source_directory_path, destination_directory_path) 100 | 101 | duplicate_asset(cls, source_asset_path, destination_asset_path) 102 | 103 | does_directory_have_assets(cls, directory_path, recursive=True) 104 | 105 | does_directory_exist(cls, directory_path) 106 | 107 | does_asset_exist(cls, asset_path) 108 | 109 | do_assets_exist(cls, asset_paths) 110 | 111 | delete_loaded_assets(cls, assets_to_delete) 112 | 113 | delete_loaded_asset(cls, asset_to_delete) 114 | 115 | delete_directory(cls, directory_path) 116 | 117 | delete_asset(cls, asset_path_to_delete) 118 | 119 | consolidate_assets(cls, asset_to_consolidate_to, assets_to_consolidate) 120 | 121 | checkout_loaded_assets(cls, assets_to_checkout) 122 | 123 | checkout_loaded_asset(cls, asset_to_checkout) 124 | 125 | checkout_directory(cls, directory_path, recursive=True) 126 | 127 | checkout_asset(cls, asset_to_checkout) 128 | """ 129 | 130 | FilterLibrary = unreal.EditorFilterLibrary 131 | """ 132 | Utility class to filter a list of objects. Object should be in the World Editor. 133 | 134 | by_selection(cls, target_array, filter_type=EditorScriptingFilterType.INCLUDE) 135 | 136 | by_level_name(cls, target_array, level_name, filter_type=EditorScriptingFilterType.INCLUDE) 137 | 138 | by_layer(cls, target_array, layer_name, filter_type=EditorScriptingFilterType.INCLUDE) 139 | 140 | by_id_name(cls, target_array, name_sub_string, string_match=EditorScriptingStringMatchType.CONTAINS, filter_type=EditorScriptingFilterType.INCLUDE) 141 | 142 | by_class(cls, target_array, object_class, filter_type=EditorScriptingFilterType.INCLUDE) 143 | 144 | by_actor_tag(cls, target_array, tag, filter_type=EditorScriptingFilterType.INCLUDE) 145 | 146 | by_actor_label(cls, target_array, name_sub_string, string_match=EditorScriptingStringMatchType.CONTAINS, filter_type=EditorScriptingFilterType.INCLUDE, ignore_case=True) 147 | 148 | """ 149 | 150 | AutomationLibrary = unreal.AutomationLibrary 151 | """ 152 | take_high_res_screenshot(cls, res_x, res_y, filename, camera=None, mask_enabled=False, capture_hdr=False, comparison_tolerance=ComparisonTolerance.LOW, comparison_notes="") 153 | 154 | take_automation_screenshot_of_ui(cls, world_context_object, latent_info, name, options) 155 | 156 | take_automation_screenshot_at_camera(cls, world_context_object, latent_info, camera, name_override, notes, options) 157 | 158 | take_automation_screenshot(cls, world_context_object, latent_info, name, notes, options) 159 | 160 | set_scalability_quality_to_low(cls, world_context_object) 161 | 162 | set_scalability_quality_to_epic(cls, world_context_object) 163 | 164 | set_scalability_quality_level_relative_to_max(cls, world_context_object, value=1) 165 | 166 | get_stat_inc_max(cls, stat_name) 167 | 168 | get_stat_inc_average(cls, stat_name) 169 | 170 | get_stat_exc_max(cls, stat_name) 171 | 172 | get_stat_exc_average(cls, stat_name) 173 | 174 | get_stat_call_count(cls, stat_name) 175 | 176 | get_default_screenshot_options_for_rendering(cls, tolerance=ComparisonTolerance.LOW, delay=0.200000) 177 | 178 | get_default_screenshot_options_for_gameplay(cls, tolerance=ComparisonTolerance.LOW, delay=0.200000) 179 | 180 | enable_stat_group(cls, world_context_object, group_name) 181 | 182 | disable_stat_group(cls, world_context_object, group_name) 183 | 184 | automation_wait_for_loading(cls, world_context_object, latent_info) 185 | 186 | are_automated_tests_running(cls) 187 | 188 | add_expected_log_error(cls, expected_pattern_string, occurrences=1, exact_match=False) 189 | """ 190 | 191 | LevelLibrary = unreal.EditorLevelLibrary 192 | """ 193 | spawn_actor_from_object(object_to_use, location, rotation=[0.000000, 0.000000, 0.000000]) -> Actor 194 | spawn_actor_from_class(actor_class, location, rotation=[0.000000, 0.000000, 0.000000]) -> Actor 195 | set_selected_level_actors(actors_to_select) -> None 196 | set_level_viewport_camera_info(camera_location, camera_rotation) -> None 197 | set_current_level_by_name(level_name) -> bool 198 | set_actor_selection_state(actor, should_be_selected) -> None 199 | select_nothing() -> None 200 | save_current_level() -> bool 201 | save_all_dirty_levels() -> bool 202 | replace_mesh_components_meshes_on_actors(actors, mesh_to_be_replaced, new_mesh) -> None 203 | replace_mesh_components_meshes(mesh_components, mesh_to_be_replaced, new_mesh) -> None 204 | replace_mesh_components_materials_on_actors(actors, material_to_be_replaced, new_material) -> None 205 | replace_mesh_components_materials(mesh_components, material_to_be_replaced, new_material) -> None 206 | pilot_level_actor(actor_to_pilot) -> None 207 | new_level_from_template(asset_path, template_asset_path) -> bool 208 | new_level(asset_path) -> bool 209 | merge_static_mesh_actors(actors_to_merge, merge_options) -> StaticMeshActor or None 210 | load_level(asset_path) -> bool 211 | join_static_mesh_actors(actors_to_join, join_options) -> Actor 212 | get_selected_level_actors() -> Array(Actor) 213 | get_level_viewport_camera_info() -> (camera_location=Vector, camera_rotation=Rotator) or None 214 | get_game_world() -> World 215 | get_editor_world() -> World 216 | get_all_level_actors_components() -> Array(ActorComponent) 217 | get_all_level_actors() -> Array(Actor) 218 | get_actor_reference(path_to_actor) -> Actor 219 | eject_pilot_level_actor() -> None 220 | editor_set_game_view(game_view) -> None 221 | editor_play_simulate() -> None 222 | editor_invalidate_viewports() -> None 223 | destroy_actor(actor_to_destroy) -> bool 224 | create_proxy_mesh_actor(actors_to_merge, merge_options) -> StaticMeshActor or None 225 | convert_actors(actors, actor_class, static_mesh_package_path) -> Array(Actor) 226 | clear_actor_selection_set() -> None 227 | """ 228 | 229 | SequenceBindingLibrary = unreal.MovieSceneBindingExtensions 230 | """ 231 | set_parent(binding, parent_binding) -> None 232 | remove_track(binding, track_to_remove) -> None 233 | remove(binding) -> None 234 | is_valid(binding) -> bool 235 | get_tracks(binding) -> Array(MovieSceneTrack) 236 | get_possessed_object_class(binding) -> type(Class) 237 | get_parent(binding) -> SequencerBindingProxy 238 | get_object_template(binding) -> Object 239 | get_name(binding) -> str 240 | get_id(binding) -> Guid 241 | get_display_name(binding) -> Text 242 | get_child_possessables(binding) -> Array(SequencerBindingProxy) 243 | find_tracks_by_type(binding, track_type) -> Array(MovieSceneTrack) 244 | find_tracks_by_exact_type(binding, track_type) -> Array(MovieSceneTrack) 245 | add_track(binding, track_type) -> MovieSceneTrack 246 | """ 247 | 248 | SequenceFolderLibrary = unreal.MovieSceneFolderExtensions 249 | """ 250 | set_folder_name(folder, folder_name) -> bool 251 | set_folder_color(folder, folder_color) -> bool 252 | remove_child_object_binding(folder, object_binding) -> bool 253 | remove_child_master_track(folder, master_track) -> bool 254 | remove_child_folder(target_folder, folder_to_remove) -> bool 255 | get_folder_name(folder) -> Name 256 | get_folder_color(folder) -> Color 257 | get_child_object_bindings(folder) -> Array(SequencerBindingProxy) 258 | get_child_master_tracks(folder) -> Array(MovieSceneTrack) 259 | get_child_folders(folder) -> Array(MovieSceneFolder) 260 | add_child_object_binding(folder, object_binding) -> bool 261 | add_child_master_track(folder, master_track) -> bool 262 | add_child_folder(target_folder, folder_to_add) -> bool 263 | """ 264 | 265 | SequencePropertyLibrary = unreal.MovieScenePropertyTrackExtensions 266 | """ 267 | X.set_property_name_and_path(track, property_name, property_path) -> None 268 | X.set_object_property_class(track, property_class) -> None 269 | X.get_unique_track_name(track) -> Name 270 | X.get_property_path(track) -> str 271 | X.get_property_name(track) -> Name 272 | X.get_object_property_class(track) -> type(Class) 273 | """ 274 | 275 | SequenceSectionLibrary = unreal.MovieSceneSectionExtensions 276 | """ 277 | set_start_frame_seconds(section, start_time) -> None 278 | set_start_frame_bounded(section, is_bounded) -> None 279 | set_start_frame(section, start_frame) -> None 280 | set_range_seconds(section, start_time, end_time) -> None 281 | set_range(section, start_frame, end_frame) -> None 282 | set_end_frame_seconds(section, end_time) -> None 283 | set_end_frame_bounded(section, is_bounded) -> None 284 | set_end_frame(section, end_frame) -> None 285 | get_start_frame_seconds(section) -> float 286 | get_start_frame(section) -> int32 287 | get_parent_sequence_frame(section, frame, parent_sequence) -> int32 288 | get_end_frame_seconds(section) -> float 289 | get_end_frame(section) -> int32 290 | get_channels(section) -> Array(MovieSceneScriptingChannel) 291 | find_channels_by_type(section, channel_type) -> Array(MovieSceneScriptingChannel) 292 | """ 293 | SequenceLibrary = unreal.MovieSceneSectionExtensions 294 | """ 295 | set_work_range_start(sequence, start_time_in_seconds) -> None 296 | set_work_range_end(sequence, end_time_in_seconds) -> None 297 | set_view_range_start(sequence, start_time_in_seconds) -> None 298 | set_view_range_end(sequence, end_time_in_seconds) -> None 299 | set_tick_resolution(sequence, tick_resolution) -> None 300 | set_read_only(sequence, read_only) -> None 301 | set_playback_start_seconds(sequence, start_time) -> None 302 | set_playback_start(sequence, start_frame) -> None 303 | set_playback_end_seconds(sequence, end_time) -> None 304 | set_playback_end(sequence, end_frame) -> None 305 | set_display_rate(sequence, display_rate) -> None 306 | make_range_seconds(sequence, start_time, duration) -> SequencerScriptingRange 307 | make_range(sequence, start_frame, duration) -> SequencerScriptingRange 308 | make_binding_id(master_sequence, binding, space=MovieSceneObjectBindingSpace.ROOT) -> MovieSceneObjectBindingID 309 | locate_bound_objects(sequence, binding, context) -> Array(Object) 310 | is_read_only(sequence) -> bool 311 | get_work_range_start(sequence) -> float 312 | get_work_range_end(sequence) -> float 313 | get_view_range_start(sequence) -> float 314 | get_view_range_end(sequence) -> float 315 | get_timecode_source(sequence) -> Timecode 316 | get_tick_resolution(sequence) -> FrameRate 317 | get_spawnables(sequence) -> Array(SequencerBindingProxy) 318 | get_root_folders_in_sequence(sequence) -> Array(MovieSceneFolder) 319 | get_possessables(sequence) -> Array(SequencerBindingProxy) 320 | get_playback_start_seconds(sequence) -> float 321 | get_playback_start(sequence) -> int32 322 | get_playback_range(sequence) -> SequencerScriptingRange 323 | get_playback_end_seconds(sequence) -> float 324 | get_playback_end(sequence) -> int32 325 | get_movie_scene(sequence) -> MovieScene 326 | get_master_tracks(sequence) -> Array(MovieSceneTrack) 327 | get_marked_frames(sequence) -> Array(MovieSceneMarkedFrame) 328 | get_display_rate(sequence) -> FrameRate 329 | get_bindings(sequence) -> Array(SequencerBindingProxy) 330 | find_next_marked_frame(sequence, frame_number, forward) -> int32 331 | find_master_tracks_by_type(sequence, track_type) -> Array(MovieSceneTrack) 332 | find_master_tracks_by_exact_type(sequence, track_type) -> Array(MovieSceneTrack) 333 | find_marked_frame_by_label(sequence, label) -> int32 334 | find_marked_frame_by_frame_number(sequence, frame_number) -> int32 335 | find_binding_by_name(sequence, name) -> SequencerBindingProxy 336 | delete_marked_frames(sequence) -> None 337 | delete_marked_frame(sequence, delete_index) -> None 338 | add_spawnable_from_instance(sequence, object_to_spawn) -> SequencerBindingProxy 339 | add_spawnable_from_class(sequence, class_to_spawn) -> SequencerBindingProxy 340 | add_root_folder_to_sequence(sequence, new_folder_name) -> MovieSceneFolder 341 | add_possessable(sequence, object_to_possess) -> SequencerBindingProxy 342 | add_master_track(sequence, track_type) -> MovieSceneTrack 343 | add_marked_frame(sequence, marked_frame) -> int32 344 | """ 345 | 346 | SequenceTrackLibrary = unreal.MovieSceneTrackExtensions 347 | """ 348 | remove_section(track, section) -> None 349 | get_sections(track) -> Array(MovieSceneSection) 350 | get_display_name(track) -> Text 351 | add_section(track) -> MovieSceneSection 352 | """ 353 | 354 | SequenceTools = unreal.SequencerTools 355 | """ 356 | render_movie(capture_settings, on_finished_callback) -> bool 357 | is_rendering_movie() -> bool 358 | import_fbx(world, sequence, bindings, import_fbx_settings, import_filename) -> bool 359 | get_object_bindings(world, sequence, object, range) -> Array(SequencerBoundObjects) 360 | get_bound_objects(world, sequence, bindings, range) -> Array(SequencerBoundObjects) 361 | export_fbx(world, sequence, bindings, override_options, fbx_file_name) -> bool 362 | export_anim_sequence(world, sequence, anim_sequence, binding) -> bool 363 | cancel_movie_render() -> None 364 | """ 365 | 366 | LevelSequenceLibrary = unreal.LevelSequenceEditorBlueprintLibrary 367 | """ 368 | set_lock_level_sequence(lock) -> None 369 | set_current_time(new_frame) -> None 370 | play() -> None 371 | pause() -> None 372 | open_level_sequence(level_sequence) -> bool 373 | is_playing() -> bool 374 | is_level_sequence_locked() -> bool 375 | get_current_time() -> int32 376 | get_current_level_sequence() -> LevelSequence 377 | close_level_sequence() -> None 378 | """ 379 | 380 | PathLib = unreal.Paths 381 | """ 382 | video_capture_dir() -> str 383 | validate_path(path) -> (did_succeed=bool, out_reason=Text) 384 | split(path) -> (path_part=str, filename_part=str, extension_part=str) 385 | source_config_dir() -> str 386 | should_save_to_user_dir() -> bool 387 | shader_working_dir() -> str 388 | set_project_file_path(new_game_project_file_path) -> None 389 | set_extension(path, new_extension) -> str 390 | screen_shot_dir() -> str 391 | sandboxes_dir() -> str 392 | root_dir() -> str 393 | remove_duplicate_slashes(path) -> str 394 | project_user_dir() -> str 395 | project_saved_dir() -> str 396 | project_plugins_dir() -> str 397 | project_persistent_download_dir() -> str 398 | project_mods_dir() -> str 399 | project_log_dir() -> str 400 | project_intermediate_dir() -> str 401 | project_dir() -> str 402 | project_content_dir() -> str 403 | project_config_dir() -> str 404 | profiling_dir() -> str 405 | normalize_filename(path) -> str 406 | normalize_directory_name(path) -> str 407 | make_valid_file_name(string, replacement_char="") -> str 408 | make_standard_filename(path) -> str 409 | make_platform_filename(path) -> str 410 | make_path_relative_to(path, relative_to) -> str or None 411 | launch_dir() -> str 412 | is_same_path(path_a, path_b) -> bool 413 | is_restricted_path(path) -> bool 414 | is_relative(path) -> bool 415 | is_project_file_path_set() -> bool 416 | is_drive(path) -> bool 417 | has_project_persistent_download_dir() -> bool 418 | get_tool_tip_localization_paths() -> Array(str) 419 | get_restricted_folder_names() -> Array(str) 420 | get_relative_path_to_root() -> str 421 | get_property_name_localization_paths() -> Array(str) 422 | get_project_file_path() -> str 423 | get_path(path) -> str 424 | get_invalid_file_system_chars() -> str 425 | get_game_localization_paths() -> Array(str) 426 | get_extension(path, include_dot=False) -> str 427 | get_engine_localization_paths() -> Array(str) 428 | get_editor_localization_paths() -> Array(str) 429 | get_clean_filename(path) -> str 430 | get_base_filename(path, remove_path=True) -> str 431 | generated_config_dir() -> str 432 | game_user_developer_dir() -> str 433 | game_source_dir() -> str 434 | game_developers_dir() -> str 435 | game_agnostic_saved_dir() -> str 436 | file_exists(path) -> bool 437 | feature_pack_dir() -> str 438 | enterprise_plugins_dir() -> str 439 | enterprise_feature_pack_dir() -> str 440 | enterprise_dir() -> str 441 | engine_version_agnostic_user_dir() -> str 442 | engine_user_dir() -> str 443 | engine_source_dir() -> str 444 | engine_saved_dir() -> str 445 | engine_plugins_dir() -> str 446 | engine_intermediate_dir() -> str 447 | engine_dir() -> str 448 | engine_content_dir() -> str 449 | engine_config_dir() -> str 450 | directory_exists(path) -> bool 451 | diff_dir() -> str 452 | create_temp_filename(path, prefix="", extension=".tmp") -> str 453 | convert_to_sandbox_path(path, sandbox_name) -> str 454 | convert_relative_path_to_full(path, base_path="") -> str 455 | convert_from_sandbox_path(path, sandbox_name) -> str 456 | combine(paths) -> str 457 | collapse_relative_directories(path) -> str or None 458 | cloud_dir() -> str 459 | change_extension(path, new_extension) -> str 460 | bug_it_dir() -> str 461 | automation_transient_dir() -> str 462 | automation_log_dir() -> str 463 | automation_dir() -> str 464 | """ 465 | 466 | SystemLib = unreal.SystemLibrary 467 | """ 468 | unregister_for_remote_notifications() -> None 469 | unload_primary_asset_list(primary_asset_id_list) -> None 470 | unload_primary_asset(primary_asset_id) -> None 471 | transact_object(object) -> None 472 | sphere_trace_single_for_objects(world_context_object, start, end, radius, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 473 | sphere_trace_single_by_profile(world_context_object, start, end, radius, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 474 | sphere_trace_single(world_context_object, start, end, radius, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 475 | sphere_trace_multi_for_objects(world_context_object, start, end, radius, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 476 | sphere_trace_multi_by_profile(world_context_object, start, end, radius, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 477 | sphere_trace_multi(world_context_object, start, end, radius, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 478 | sphere_overlap_components(world_context_object, sphere_pos, sphere_radius, object_types, component_class_filter, actors_to_ignore) -> Array(PrimitiveComponent) or None 479 | sphere_overlap_actors(world_context_object, sphere_pos, sphere_radius, object_types, actor_class_filter, actors_to_ignore) -> Array(Actor) or None 480 | snapshot_object(object) -> None 481 | show_platform_specific_leaderboard_screen(category_name) -> None 482 | show_platform_specific_achievements_screen(specific_player) -> None 483 | show_interstitial_ad() -> None 484 | show_ad_banner(ad_id_index, show_on_bottom_of_screen) -> None 485 | set_window_title(title) -> None 486 | set_volume_buttons_handled_by_system(enabled) -> None 487 | set_user_activity(user_activity) -> None 488 | set_suppress_viewport_transition_message(world_context_object, state) -> None 489 | set_gamepads_block_device_feedback(block) -> None 490 | retriggerable_delay(world_context_object, duration, latent_info) -> None 491 | reset_gamepad_assignment_to_controller(controller_id) -> None 492 | reset_gamepad_assignments() -> None 493 | register_for_remote_notifications() -> None 494 | quit_game(world_context_object, specific_player, quit_preference, ignore_platform_restrictions) -> None 495 | quit_editor() -> None 496 | print_text(world_context_object, text="Hello", print_to_screen=True, print_to_log=True, text_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=2.000000) -> None 497 | print_string(world_context_object, string="Hello", print_to_screen=True, print_to_log=True, text_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=2.000000) -> None 498 | not_equal_soft_object_reference(a, b) -> bool 499 | not_equal_soft_class_reference(a, b) -> bool 500 | not_equal_primary_asset_type(a, b) -> bool 501 | not_equal_primary_asset_id(a, b) -> bool 502 | normalize_filename(filename) -> str 503 | move_component_to(component, target_relative_location, target_relative_rotation, ease_out, ease_in, over_time, force_shortest_rotation_path, move_action, latent_info) -> None 504 | make_literal_text(value) -> Text 505 | make_literal_string(value) -> str 506 | make_literal_name(value) -> Name 507 | make_literal_int(value) -> int32 508 | make_literal_float(value) -> float 509 | make_literal_byte(value) -> uint8 510 | make_literal_bool(value) -> bool 511 | load_interstitial_ad(ad_id_index) -> None 512 | load_class_asset_blocking(asset_class) -> type(Class) 513 | load_asset_blocking(asset) -> Object 514 | line_trace_single_for_objects(world_context_object, start, end, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 515 | line_trace_single_by_profile(world_context_object, start, end, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 516 | line_trace_single(world_context_object, start, end, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 517 | line_trace_multi_for_objects(world_context_object, start, end, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 518 | line_trace_multi_by_profile(world_context_object, start, end, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 519 | line_trace_multi(world_context_object, start, end, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 520 | launch_url(url) -> None 521 | un_pause_timer_handle(world_context_object, handle) -> None 522 | un_pause_timer_delegate(delegate) -> None 523 | un_pause_timer(object, function_name) -> None 524 | timer_exists_handle(world_context_object, handle) -> bool 525 | timer_exists_delegate(delegate) -> bool 526 | timer_exists(object, function_name) -> bool 527 | set_timer_delegate(delegate, time, looping, initial_start_delay=0.000000, initial_start_delay_variance=0.000000) -> TimerHandle 528 | set_timer(object, function_name, time, looping, initial_start_delay=0.000000, initial_start_delay_variance=0.000000) -> TimerHandle 529 | pause_timer_handle(world_context_object, handle) -> None 530 | pause_timer_delegate(delegate) -> None 531 | pause_timer(object, function_name) -> None 532 | is_valid_timer_handle(handle) -> bool 533 | is_timer_paused_handle(world_context_object, handle) -> bool 534 | is_timer_paused_delegate(delegate) -> bool 535 | is_timer_paused(object, function_name) -> bool 536 | is_timer_active_handle(world_context_object, handle) -> bool 537 | is_timer_active_delegate(delegate) -> bool 538 | is_timer_active(object, function_name) -> bool 539 | invalidate_timer_handle(handle) -> (TimerHandle, handle=TimerHandle) 540 | get_timer_remaining_time_handle(world_context_object, handle) -> float 541 | get_timer_remaining_time_delegate(delegate) -> float 542 | get_timer_remaining_time(object, function_name) -> float 543 | get_timer_elapsed_time_handle(world_context_object, handle) -> float 544 | get_timer_elapsed_time_delegate(delegate) -> float 545 | get_timer_elapsed_time(object, function_name) -> float 546 | clear_timer_handle(world_context_object, handle) -> None 547 | clear_timer_delegate(delegate) -> None 548 | clear_timer(object, function_name) -> None 549 | clear_and_invalidate_timer_handle(world_context_object, handle) -> TimerHandle 550 | is_valid_soft_object_reference(soft_object_reference) -> bool 551 | is_valid_soft_class_reference(soft_class_reference) -> bool 552 | is_valid_primary_asset_type(primary_asset_type) -> bool 553 | is_valid_primary_asset_id(primary_asset_id) -> bool 554 | is_valid_class(class_) -> bool 555 | is_valid(object) -> bool 556 | is_unattended() -> bool 557 | is_standalone(world_context_object) -> bool 558 | is_split_screen(world_context_object) -> bool 559 | is_server(world_context_object) -> bool 560 | is_screensaver_enabled() -> bool 561 | is_packaged_for_distribution() -> bool 562 | is_logged_in(specific_player) -> bool 563 | is_interstitial_ad_requested() -> bool 564 | is_interstitial_ad_available() -> bool 565 | is_dedicated_server(world_context_object) -> bool 566 | is_controller_assigned_to_gamepad(controller_id) -> bool 567 | hide_ad_banner() -> None 568 | get_volume_buttons_handled_by_system() -> bool 569 | get_unique_device_id() -> str 570 | get_supported_fullscreen_resolutions() -> Array(IntPoint) or None 571 | get_soft_object_reference_from_primary_asset_id(primary_asset_id) -> Object 572 | get_soft_class_reference_from_primary_asset_id(primary_asset_id) -> Class 573 | get_rendering_material_quality_level() -> int32 574 | get_rendering_detail_mode() -> int32 575 | get_project_saved_directory() -> str 576 | get_project_directory() -> str 577 | get_project_content_directory() -> str 578 | get_primary_assets_with_bundle_state(required_bundles, excluded_bundles, valid_types, force_current_state) -> Array(PrimaryAssetId) 579 | get_primary_asset_id_list(primary_asset_type) -> Array(PrimaryAssetId) 580 | get_primary_asset_id_from_soft_object_reference(soft_object_reference) -> PrimaryAssetId 581 | get_primary_asset_id_from_soft_class_reference(soft_class_reference) -> PrimaryAssetId 582 | get_primary_asset_id_from_object(object) -> PrimaryAssetId 583 | get_primary_asset_id_from_class(class_) -> PrimaryAssetId 584 | get_preferred_languages() -> Array(str) 585 | get_platform_user_name() -> str 586 | get_platform_user_dir() -> str 587 | get_path_name(object) -> str 588 | get_outer_object(object) -> Object 589 | get_object_name(object) -> str 590 | get_object_from_primary_asset_id(primary_asset_id) -> Object 591 | get_min_y_resolution_for_ui() -> int32 592 | get_min_y_resolution_for3d_view() -> int32 593 | get_local_currency_symbol() -> str 594 | get_local_currency_code() -> str 595 | get_game_time_in_seconds(world_context_object) -> float 596 | get_gamepad_controller_name(controller_id) -> str 597 | get_game_name() -> str 598 | get_game_bundle_id() -> str 599 | get_frame_count() -> int64 600 | get_engine_version() -> str 601 | get_display_name(object) -> str 602 | get_device_id() -> str 603 | get_default_locale() -> str 604 | get_default_language() -> str 605 | get_current_bundle_state(primary_asset_id, force_current_state) -> Array(Name) or None 606 | get_convenient_windowed_resolutions() -> Array(IntPoint) or None 607 | get_console_variable_int_value(variable_name) -> int32 608 | get_console_variable_float_value(variable_name) -> float 609 | get_console_variable_bool_value(variable_name) -> bool 610 | get_component_bounds(component) -> (origin=Vector, box_extent=Vector, sphere_radius=float) 611 | get_command_line() -> str 612 | get_class_from_primary_asset_id(primary_asset_id) -> type(Class) 613 | get_class_display_name(class_) -> str 614 | get_ad_id_count() -> int32 615 | get_actor_list_from_component_list(component_list, actor_class_filter) -> Array(Actor) 616 | get_actor_bounds(actor) -> (origin=Vector, box_extent=Vector) 617 | force_close_ad_banner() -> None 618 | flush_persistent_debug_lines(world_context_object) -> None 619 | flush_debug_strings(world_context_object) -> None 620 | execute_console_command(world_context_object, command, specific_player=None) -> None 621 | equal_equal_soft_object_reference(a, b) -> bool 622 | equal_equal_soft_class_reference(a, b) -> bool 623 | equal_equal_primary_asset_type(a, b) -> bool 624 | equal_equal_primary_asset_id(a, b) -> bool 625 | end_transaction() -> int32 626 | draw_debug_string(world_context_object, text_location, text, test_base_actor=None, text_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000) -> None 627 | draw_debug_sphere(world_context_object, center, radius=100.000000, segments=12, line_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000, thickness=0.000000) -> None 628 | draw_debug_point(world_context_object, position, size, point_color, duration=0.000000) -> None 629 | draw_debug_plane(world_context_object, plane_coordinates, location, size, plane_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000) -> None 630 | draw_debug_line(world_context_object, line_start, line_end, line_color, duration=0.000000, thickness=0.000000) -> None 631 | draw_debug_frustum(world_context_object, frustum_transform, frustum_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000, thickness=0.000000) -> None 632 | draw_debug_float_history_transform(world_context_object, float_history, draw_transform, draw_size, draw_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000) -> None 633 | draw_debug_float_history_location(world_context_object, float_history, draw_location, draw_size, draw_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000) -> None 634 | draw_debug_cylinder(world_context_object, start, end, radius=100.000000, segments=12, line_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000, thickness=0.000000) -> None 635 | draw_debug_coordinate_system(world_context_object, axis_loc, axis_rot, scale=1.000000, duration=0.000000, thickness=0.000000) -> None 636 | draw_debug_cone_in_degrees(world_context_object, origin, direction, length=100.000000, angle_width=45.000000, angle_height=45.000000, num_sides=12, line_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000, thickness=0.000000) -> None 637 | draw_debug_cone(world_context_object, origin, direction, length, angle_width, angle_height, num_sides, line_color, duration=0.000000, thickness=0.000000) -> None 638 | draw_debug_circle(world_context_object, center, radius, num_segments=12, line_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000, thickness=0.000000, y_axis=[0.000000, 1.000000, 0.000000], z_axis=[0.000000, 0.000000, 1.000000], draw_axis=False) -> None 639 | draw_debug_capsule(world_context_object, center, half_height, radius, rotation, line_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000, thickness=0.000000) -> None 640 | draw_debug_camera(camera_actor, camera_color=[0.000000, 0.000000, 0.000000, 0.000000], duration=0.000000) -> None 641 | draw_debug_box(world_context_object, center, extent, line_color, rotation=[0.000000, 0.000000, 0.000000], duration=0.000000, thickness=0.000000) -> None 642 | draw_debug_arrow(world_context_object, line_start, line_end, arrow_size, line_color, duration=0.000000, thickness=0.000000) -> None 643 | does_implement_interface(test_object, interface) -> bool 644 | delay(world_context_object, duration, latent_info) -> None 645 | create_copy_for_undo_buffer(object_to_modify) -> None 646 | convert_to_relative_path(filename) -> str 647 | convert_to_absolute_path(filename) -> str 648 | conv_soft_obj_path_to_soft_obj_ref(soft_object_path) -> Object 649 | conv_soft_object_reference_to_string(soft_object_reference) -> str 650 | conv_soft_class_reference_to_string(soft_class_reference) -> str 651 | conv_soft_class_path_to_soft_class_ref(soft_class_path) -> Class 652 | conv_primary_asset_type_to_string(primary_asset_type) -> str 653 | conv_primary_asset_id_to_string(primary_asset_id) -> str 654 | conv_interface_to_object(interface) -> Object 655 | control_screensaver(allow_screen_saver) -> None 656 | component_overlap_components(component, component_transform, object_types, component_class_filter, actors_to_ignore) -> Array(PrimitiveComponent) or None 657 | component_overlap_actors(component, component_transform, object_types, actor_class_filter, actors_to_ignore) -> Array(Actor) or None 658 | collect_garbage() -> None 659 | capsule_trace_single_for_objects(world_context_object, start, end, radius, half_height, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 660 | capsule_trace_single_by_profile(world_context_object, start, end, radius, half_height, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 661 | capsule_trace_single(world_context_object, start, end, radius, half_height, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 662 | capsule_trace_multi_for_objects(world_context_object, start, end, radius, half_height, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 663 | capsule_trace_multi_by_profile(world_context_object, start, end, radius, half_height, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 664 | capsule_trace_multi(world_context_object, start, end, radius, half_height, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 665 | capsule_overlap_components(world_context_object, capsule_pos, radius, half_height, object_types, component_class_filter, actors_to_ignore) -> Array(PrimitiveComponent) or None 666 | capsule_overlap_actors(world_context_object, capsule_pos, radius, half_height, object_types, actor_class_filter, actors_to_ignore) -> Array(Actor) or None 667 | can_launch_url(url) -> bool 668 | cancel_transaction(index) -> None 669 | box_trace_single_for_objects(world_context_object, start, end, half_size, orientation, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 670 | box_trace_single_by_profile(world_context_object, start, end, half_size, orientation, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 671 | box_trace_single(world_context_object, start, end, half_size, orientation, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> HitResult or None 672 | box_trace_multi_for_objects(world_context_object, start, end, half_size, orientation, object_types, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 673 | box_trace_multi_by_profile(world_context_object, start, end, half_size, orientation, profile_name, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 674 | box_trace_multi(world_context_object, start, end, half_size, orientation, trace_channel, trace_complex, actors_to_ignore, draw_debug_type, ignore_self, trace_color=[0.000000, 0.000000, 0.000000, 0.000000], trace_hit_color=[0.000000, 0.000000, 0.000000, 0.000000], draw_time=5.000000) -> Array(HitResult) or None 675 | box_overlap_components(world_context_object, box_pos, extent, object_types, component_class_filter, actors_to_ignore) -> Array(PrimitiveComponent) or None 676 | box_overlap_actors(world_context_object, box_pos, box_extent, object_types, actor_class_filter, actors_to_ignore) -> Array(Actor) or None 677 | begin_transaction(context, description, primary_object) -> int32 678 | add_float_history_sample(value, float_history) -> DebugFloatHistory 679 | """ 680 | --------------------------------------------------------------------------------