代码之家  ›  专栏  ›  技术社区  ›  123iamking

Maya-如何解组动画并保留动画?

  •  0
  • 123iamking  · 技术社区  · 6 年前

    我想重用一些旧动画,但旧动画使用不同的轴(例如:旧:面负Z,Y向上;新:面Y,负Z(向上)。因此,我通过对动画进行分组并旋转该组使其面向右轴来修复此问题。但当我解组时,它只适用于当前帧(我打开“自动关键点”) 在…上 ).

    Grouping animated objects, Scaling, Ungrouping

    Need help maintaining offset during ungroup

    ungrouping but keeping animation

    对动画对象分组、缩放、解组

    但什么都不管用。

    1 回复  |  直到 6 年前
        1
  •  0
  •   123iamking    6 年前

    好的,当您解组时,它适用于当前帧。因此,要使其适用于整个动画,您可以分组&取消所有帧的组。当然我不会用手,但我会用脚本。

    proc GetPlaybackRange(string $bone, int $outStartEndTime[])
    {
        float $arrKey[] = `keyframe -q $bone`;
        $arrKeyLength=size($arrKey);
    
        $outStartEndTime[0] = floor($arrKey[0]);
        $outStartEndTime[1] = ceil($arrKey[$arrKeyLength-1]);
    }
    
    proc UngroupAndGroupNextFrame(int $frame, string $groupName, float $transform[])
    {
        currentTime $frame ;
        ungroup;
    
        currentTime ($frame + 1) ;
        group -n $groupName;
        xform -worldSpace -matrix 
        $transform[0]
        $transform[1]
        $transform[2]
        $transform[3]
        $transform[4]
        $transform[5]
        $transform[6]
        $transform[7]
        $transform[8]
        $transform[9]
        $transform[10]
        $transform[11]
        $transform[12]
        $transform[13]
        $transform[14]
        $transform[15]
        $groupName;
    }
    
    proc UnGroupForAnimation()
    {
        string $sel[]= `ls -sl`;
        string $groupName = $sel[0];
    
        float $transform[];
        $transform = `xform -q -worldSpace -matrix $groupName`;
    
        string $bone[] = `listRelatives -children $groupName`;
    
        int $startEndTime[];
        GetPlaybackRange($bone[0], $startEndTime);
    
        for($i = $startEndTime[0]; $i <= $startEndTime[1]; $i++)
        {
            UngroupAndGroupNextFrame($i, $groupName, $transform);
        }
        currentTime ($startEndTime[1] + 1) ;
        ungroup;
        timeSliderClearKey;
    
        print ($bone[0] + " range "+$startEndTime[0]+" : "+$startEndTime[1]);
    }
    
    UnGroupForAnimation();
    

    脚本的用法:

    步骤1.选择组(组的子项应为骨骼) MayaUngroupAnim.PNG

    步骤2.运行脚本。

    就这样。