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

Я хотел бы просмотреть эти строки в цикле и сделать следующее:

  1. Выберите в frame_number
  2. Выбрать PianoKeyAnimations NLATrack.
  3. Если action_onдобавить анимацию. Если action_off добавить анимацию.
  4. Отменить выбор 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 с выбранными объектами.

Смотрите скриншоты:

Есть ли у кого-нибудь совет, как это решить? Спасибо!

0 ответов

Другие вопросы по тегам