删除多余的轨道
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 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.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_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' : continue for 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属性!' ) return start_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' : continue for 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属性!' ) return start_conversion( sequence_assets, data, False ) start_conversion( sequence_sub_assets, data, True )