"""Run inside the Unreal Editor Python environment. Creates a Media Framework asset for 3099.mp4, builds an emissive screen material, and places the AGitWorldOpeningScene actor in the current level. """ import pathlib import unreal PROJECT_DIR = pathlib.Path(unreal.Paths.project_dir()) VIDEO_FILE = PROJECT_DIR / "ReferenceSource" / "Opening" / "3099.mp4" MEDIA_PATH = "/Game/GitWorld/Media" MATERIAL_PATH = "/Game/GitWorld/Materials" def create_asset(asset_tools, name, package_path, asset_class, factory): existing = unreal.EditorAssetLibrary.load_asset(package_path + "/" + name) if existing: return existing return asset_tools.create_asset(name, package_path, asset_class, factory) def create_media_assets(): if not VIDEO_FILE.is_file(): raise RuntimeError("Opening video not found: %s" % VIDEO_FILE) asset_tools = unreal.AssetToolsHelpers.get_asset_tools() source = create_asset( asset_tools, "MS_GitWorldOpening", MEDIA_PATH, unreal.FileMediaSource, unreal.FileMediaSourceFactoryNew(), ) source.set_editor_property("file_path", str(VIDEO_FILE)) unreal.EditorAssetLibrary.save_loaded_asset(source) player = create_asset( asset_tools, "MP_GitWorldOpening", MEDIA_PATH, unreal.MediaPlayer, unreal.MediaPlayerFactoryNew(), ) player.set_editor_property("loop", False) player.set_editor_property("play_on_open", True) player.set_editor_property("media_source", source) unreal.EditorAssetLibrary.save_loaded_asset(player) texture = create_asset( asset_tools, "MT_GitWorldOpening", MEDIA_PATH, unreal.MediaTexture, unreal.MediaTextureFactoryNew(), ) texture.set_editor_property("media_player", player) unreal.EditorAssetLibrary.save_loaded_asset(texture) return texture def create_screen_material(texture): asset_tools = unreal.AssetToolsHelpers.get_asset_tools() material = create_asset( asset_tools, "M_GitWorldOpeningScreen", MATERIAL_PATH, unreal.Material, unreal.MaterialFactoryNew(), ) material.set_editor_property("two_sided", True) material.set_editor_property("shading_model", unreal.MaterialShadingModel.MSM_UNLIT) sample = unreal.MaterialEditingLibrary.create_material_expression( material, unreal.MaterialExpressionTextureSampleParameter2D, -400, 0 ) sample.set_editor_property("parameter_name", "OpeningVideo") sample.set_editor_property("texture", texture) unreal.MaterialEditingLibrary.connect_material_property( sample, "RGB", unreal.MaterialProperty.MP_EMISSIVE_COLOR ) unreal.MaterialEditingLibrary.layout_material_expressions(material) unreal.EditorAssetLibrary.save_loaded_asset(material) return material def place_opening_actor(material): opening_class = unreal.load_class(None, "/Script/GitWorldUnreal.GitWorldOpeningScene") if not opening_class: raise RuntimeError("GitWorldOpeningScene class is unavailable; build the Unreal module first") actor = unreal.EditorLevelLibrary.spawn_actor_from_class( opening_class, unreal.Vector(0.0, 0.0, 1050.0), unreal.Rotator(0.0, 0.0, 0.0) ) actor.set_actor_label("GitWorld_Opening_3099") actor.set_editor_property("opening_video_file", "ReferenceSource/Opening/3099.mp4") actor.set_editor_property("screen_material", material) actor.set_editor_property("b_play_on_begin", True) return actor def run(): texture = create_media_assets() material = create_screen_material(texture) place_opening_actor(material) unreal.EditorLevelLibrary.save_current_level() unreal.log("GitWorld opening scene wired: 3099.mp4") run()