删除多余的轨道
import unreal
def execute():
movie_scene_actors = []
sequence_assets = []
data = 0.0
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:
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 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):
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_frame
if _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_frame
for _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_frame
if _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.0
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:
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_frame
if _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_frame
for _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_frame
if _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':
continue
for bind in section.get_sequence().get_bindings():
sequence = bind.sequence
for _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属性!')
return
start_conversion(sequence_assets, data, False)
start_conversion(sequence_sub_assets, data, True)
移动vCamWithHud_PC轨道时间轴STC
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['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_frame
if _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_frame
for _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_frame
if _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':
continue
for bind in section.get_sequence().get_bindings():
sequence = bind.sequence
for _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属性!')
return
start_conversion(sequence_assets, data, False)
start_conversion(sequence_sub_assets, data, True)