Blender 2.9 + скрипт Python - нужна помощь в добавлении нескольких клипов действий / полос действий на дорожку NLA
Как можно добавить несколько клипов действий к одной дорожке NLA в Blender 2.9 с помощью скрипта Python?
Я пытаюсь просмотреть файл со строками:
frame_number=X, object_name=Y, animation=Z
например
frame_number=1235, object_name=31, animation=action_off
Я хотел бы просмотреть эти строки в цикле и сделать следующее:
- Выберите в
frame_number
- Выбрать
PianoKeyAnimations
NLATrack.- Если
action_on
добавить анимацию. Еслиaction_off
добавить анимацию.- Отменить выбор
PianoKeyAnimation
NLATrack,KeyPress
/KeyRelease
анимации иobject_name
в коллекции сцен.
Я установил следующие клипы / ленты NLA:
- KeyPress: Duration of 1 frame
- KeyRelease: Duration 1 frame
Вот часть сценария, с которой я борюсь:
# Select Nlatrack based on name
def nlaselect(trackName):
ob = C.object
ad = ob.animation_data
if ad:
for i, track in enumerate(ad.nla_tracks):
# Find NLA track
track.select = track.name.startswith(trackName)
# make active track if in pos 0
if track.select and not i:
ad.nla_tracks.active = track
all_tracks = {DATA_HERE}
current_area = bpy.context.area.ui_type
bpy.context.area.ui_type = 'NLA_EDITOR'
current_frame = 0
frames_delay = 240 # Delay animation by 4 seconds in 60 fps render
for row in all_tracks:
current_frame += row.frame_number
C.view_layer.objects.active =
D.collections['INSTRUMENT'].all_objects[str(row.object)]
C.object.select_set(True)
bpy.context.area.ui_type = 'NLA_EDITOR'
C.object.animation_data.nla_tracks.active = None
C.scene.frame_set( current_frame + frames_delay )
if row.animation == 'action_on':
nlaselect('PianoKeyAnimations')
bpy.ops.nla.actionclip_add(action='KeyPress')
if row.animation == 'action_off':
nlaselect('PianoKeyAnimations')
bpy.ops.nla.actionclip_add(action='KeyRelease')
bpy.context.area.ui_type = current_area
C.object.select_set(False)
Похоже, это создает несколько треков NLATracks с выбранными объектами.
Смотрите скриншоты:
Есть ли у кого-нибудь совет, как это решить? Спасибо!