删除多余的轨道
import unreal
def execute():movie_scene_actors = []sequence_assets = []data = 0.0lib = unreal.EditorUtilityLibrary()selected_assets = lib.get_selected_assets()for asset in selected_assets:if asset.get_class() == unreal.LevelSequence().get_class():asset = unreal.MovieSceneSequence.cast(asset)movie_scene_actors.append(asset)for movie_scene in movie_scene_actors:sequence_assets.clear()tracks = movie_scene.get_tracks()sequence_assets.append(movie_scene)for track in tracks:sections = track.get_sections()for section in sections:if isinstance(section, unreal.MovieSceneSubSection):path = section.get_sequence().get_path_name()if "vCam_VP_" in path or "MainStage_Floor_" in path:print(f"Found path: {path}")if section in sections:print(f"Removing section with path: {path}")track.remove_section(section) else:print(f"Section with path {path} is no longer valid or has already been removed.")
移动sequence时间从0开始
import unrealdef execute():def set_playback_time(_movie_scene, new_start_frame):playback_star = _movie_scene.get_playback_start()playback_end = _movie_scene.get_playback_end()_duration = playback_end - playback_star_movie_scene.set_playback_start(new_start_frame)_movie_scene.set_playback_end(new_start_frame + _duration)def start_conversion(_sequence_assets, _data):for _movie_scene in _sequence_assets:_movie_scene.set_read_only(False)set_playback_time(_movie_scene, _data)for __bind in _movie_scene.get_bindings():for __track in __bind.get_tracks():for __section in __track.get_sections():start_frame = __section.get_start_frame()end_frame = __section.get_end_frame()duration = end_frame - start_frameif _data > start_frame:__section.set_end_frame(_data + duration)__section.set_start_frame(_data)else:__section.set_start_frame(_data)__section.set_end_frame(_data + duration)duration_key = _data - start_framefor _channel in __section.get_all_channels():for key in _channel.get_keys():key.set_time(unreal.FrameNumber(key.get_time().frame_number.value + duration_key))_tracks = _movie_scene.get_tracks()for __track in _tracks:__sections = __track.get_sections()for __section in __sections:start_frame = __section.get_start_frame()end_frame = __section.get_end_frame()duration = end_frame - start_frameif _data > start_frame:__section.set_end_frame(_data + duration)__section.set_start_frame(_data)else:__section.set_start_frame(_data)__section.set_end_frame(_data + duration)movie_scene_actors = []sequence_assets = []data = 0.0lib = unreal.EditorUtilityLibrary()selected_assets = lib.get_selected_assets()for asset in selected_assets:if asset.get_class() == unreal.LevelSequence().get_class():asset = unreal.MovieSceneSequence.cast(asset)movie_scene_actors.append(asset)for movie_scene in movie_scene_actors:sequence_assets.clear()tracks = movie_scene.get_tracks()sequence_assets.append(movie_scene)for track in tracks:sections = track.get_sections()for section in sections:if isinstance(section, unreal.MovieSceneSubSection):path = section.get_sequence().get_path_name()sequence_assets.append(unreal.load_asset(path))start_conversion(sequence_assets, data)
移动vCam_VP轨道时间LTC
import unreal
def execute():def set_playback_time(_movie_scene, new_start_frame):playback_star = _movie_scene.get_playback_start()playback_end = _movie_scene.get_playback_end()_duration = playback_end - playback_star_movie_scene.set_playback_start(new_start_frame)_movie_scene.set_playback_end(new_start_frame + _duration)def start_conversion(_sequence_assets, _data, sub_signal):for _movie_scene in _sequence_assets:_movie_scene.set_read_only(False)set_playback_time(_movie_scene, _data['LTC'])for __bind in _movie_scene.get_bindings():for __track in __bind.get_tracks():for __section in __track.get_sections():start_frame = __section.get_start_frame()end_frame = __section.get_end_frame()duration = end_frame - start_frameif _data['LTC'] > start_frame:__section.set_end_frame(_data['LTC'] + duration)__section.set_start_frame(_data['LTC'])else:__section.set_start_frame(_data['LTC'])__section.set_end_frame(_data['LTC'] + duration)duration_key = _data['LTC'] - start_framefor _channel in __section.get_all_channels():for key in _channel.get_keys():key.set_time(unreal.FrameNumber(key.get_time().frame_number.value + duration_key))_tracks = _movie_scene.get_tracks()for __track in _tracks:__sections = __track.get_sections()for __section in __sections:start_frame = __section.get_start_frame()end_frame = __section.get_end_frame()duration = end_frame - start_frameif _data['LTC'] > start_frame:__section.set_end_frame(_data['LTC'] + duration)__section.set_start_frame(_data['LTC'])else:__section.set_start_frame(_data['LTC'])__section.set_end_frame(_data['LTC'] + duration)if sub_signal:for _movie_scene in _sequence_assets:pack = '/'.join(str(_movie_scene.get_path_name()).split('/')[:-1])name = "vCam_VP_" + _data["VPTakeName"] + ".vCam_VP_" + _data["VPTakeName"]unreal.EditorAssetLibrary.rename_asset(_movie_scene.get_path_name(), f"{pack}/{name}")_movie_scene.set_read_only(True)movie_scene_actors = []sequence_assets = []sequence_sub_assets = []data = {}lib = unreal.EditorUtilityLibrary()selected_assets = lib.get_selected_assets()for asset in selected_assets:if asset.get_class() == unreal.LevelSequence().get_class():asset = unreal.MovieSceneSequence.cast(asset)movie_scene_actors.append(asset)for movie_scene in movie_scene_actors:data.clear()sequence_assets.clear()sequence_sub_assets.clear()tracks = movie_scene.get_tracks()if len(tracks) == 0:sequence_sub_assets.append(movie_scene)bindings = movie_scene.get_bindings()for binding in bindings:if binding.get_display_name() == 'vCam_VP':for _track in binding.get_tracks():for _section in _track.get_sections():for channel in _section.get_all_channels():if _track.get_display_name() == 'VPTakeName':data["VPTakeName"] = channel.get_default()if channel.get_keys():keys = channel.get_keys()[0]if _track.get_display_name() == 'LTC':data['LTC'] = keys.get_value()elif _track.get_display_name() == 'STC':data['STC'] = keys.get_value()else:sequence_assets.append(movie_scene)for track in tracks:sections = track.get_sections()for section in sections:if isinstance(section, unreal.MovieSceneSubSection):path = section.get_sequence().get_path_name()sequence_sub_assets.append(unreal.load_asset(path))if track.get_display_name() != 'vCam_VP':continuefor bind in section.get_sequence().get_bindings():sequence = bind.sequencefor _bind in sequence.get_bindings():for _track in _bind.get_tracks():for _section in _track.get_sections():for channel in _section.get_all_channels():if _track.get_display_name() == 'VPTakeName':data["VPTakeName"] = channel.get_default()if channel.get_keys():keys = channel.get_keys()[0]if _track.get_display_name() == 'LTC':data['LTC'] = keys.get_value()elif _track.get_display_name() == 'STC':data['STC'] = keys.get_value()if not data:unreal.log_error('你的关卡序列中不存在vCam_VP蓝图 或者 不存在LTC和STC属性!')returnstart_conversion(sequence_assets, data, False)start_conversion(sequence_sub_assets, data, True)
移动vCamWithHud_PC轨道时间轴STC
import unrealdef execute():def set_playback_time(_movie_scene, new_start_frame):playback_star = _movie_scene.get_playback_start()playback_end = _movie_scene.get_playback_end()_duration = playback_end - playback_star_movie_scene.set_playback_start(new_start_frame)_movie_scene.set_playback_end(new_start_frame + _duration)def start_conversion(_sequence_assets, _data, sub_signal):for _movie_scene in _sequence_assets:_movie_scene.set_read_only(False)set_playback_time(_movie_scene, _data['STC'])for __bind in _movie_scene.get_bindings():for __track in __bind.get_tracks():for __section in __track.get_sections():start_frame = __section.get_start_frame()end_frame = __section.get_end_frame()duration = end_frame - start_frameif _data['STC'] > start_frame:__section.set_end_frame(_data['STC'] + duration)__section.set_start_frame(_data['STC'])else:__section.set_start_frame(_data['STC'])__section.set_end_frame(_data['STC'] + duration)duration_key = _data['STC'] - start_framefor _channel in __section.get_all_channels():for key in _channel.get_keys():key.set_time(unreal.FrameNumber(key.get_time().frame_number.value + duration_key))_tracks = _movie_scene.get_tracks()for __track in _tracks:__sections = __track.get_sections()for __section in __sections:start_frame = __section.get_start_frame()end_frame = __section.get_end_frame()duration = end_frame - start_frameif _data['STC'] > start_frame:__section.set_end_frame(_data['STC'] + duration)__section.set_start_frame(_data['STC'])else:__section.set_start_frame(_data['STC'])__section.set_end_frame(_data['STC'] + duration)if sub_signal:for _movie_scene in _sequence_assets:pack = '/'.join(str(_movie_scene.get_path_name()).split('/')[:-1])name = "vCamWithHud_PC_" + _data["VPTakeName"] + ".vCamWithHud_PC_" + _data["VPTakeName"]unreal.EditorAssetLibrary.rename_asset(_movie_scene.get_path_name(), f"{pack}/{name}")_movie_scene.set_read_only(True)movie_scene_actors = []sequence_assets = []sequence_sub_assets = []data = {}lib = unreal.EditorUtilityLibrary()selected_assets = lib.get_selected_assets()for asset in selected_assets:if asset.get_class() == unreal.LevelSequence().get_class():asset = unreal.MovieSceneSequence.cast(asset)movie_scene_actors.append(asset)for movie_scene in movie_scene_actors:data.clear()sequence_assets.clear()sequence_sub_assets.clear()tracks = movie_scene.get_tracks()if len(tracks) == 0:sequence_sub_assets.append(movie_scene)bindings = movie_scene.get_bindings()for binding in bindings:if binding.get_display_name() == 'vCamWithHud_PC':for _track in binding.get_tracks():for _section in _track.get_sections():for channel in _section.get_all_channels():if _track.get_display_name() == 'VPTakeName':data["VPTakeName"] = channel.get_default()if channel.get_keys():keys = channel.get_keys()[0]if _track.get_display_name() == 'LTC':data['LTC'] = keys.get_value()elif _track.get_display_name() == 'STC':data['STC'] = keys.get_value()else:sequence_assets.append(movie_scene)for track in tracks:sections = track.get_sections()for section in sections:if isinstance(section, unreal.MovieSceneSubSection):path = section.get_sequence().get_path_name()sequence_assets.append(unreal.load_asset(path))if track.get_display_name() != 'vCamWithHud_PC':continuefor bind in section.get_sequence().get_bindings():sequence = bind.sequencefor _bind in sequence.get_bindings():for _track in _bind.get_tracks():for _section in _track.get_sections():for channel in _section.get_all_channels():if _track.get_display_name() == 'VPTakeName':data["VPTakeName"] = channel.get_default()if channel.get_keys():keys = channel.get_keys()[0]if _track.get_display_name() == 'LTC':data['LTC'] = keys.get_value()elif _track.get_display_name() == 'STC':data['STC'] = keys.get_value()if not data:unreal.log_error('你的关卡序列中不存在vCamWithHud_PC蓝图 或者 不存在LTC和STC属性!')returnstart_conversion(sequence_assets, data, False)start_conversion(sequence_sub_assets, data, True)