2016-02-26 42 views
1

我有一个可以从1到50个键的动画。 50键后我想的钥匙,180度如何在所有选定的按键中旋转控制器90度在世界y轴在枢轴[5,6,7]?

我可以使用下面的命令中选择键1旋转1个控制器旋转

//mel 
rotate -y 50 -ws -p 5 6 7; 

而且是非常耗时的我怎么能做到这一点对所有选定的控制器和密钥?

所以它有一个直接的方法来执行键上的mel命令。以及如何继续做这样的事情?

+1

你好,你能告诉我们你到目前为止尝试过什么吗?你不是新来的,你可能知道,SO不是一个代码工厂。给我们一些你的研究,即使他们没有定论。 – DrHaze

+0

我是新来的玛雅和梅尔,执行命令,我尝试了各种方法来选择对象和键,但它的力量似乎工作,我看网上找不到,我可以选择所有的对象使用梅尔和旋转,但不会旋转他们的钥匙,我想知道是否有任何简单的选择过程中,我可以执行所有选定的关键旋转命令。 我只需要指出正确的方向,我可以制定出自己的代码 – Gkills

+0

我建议你在深入研究之前切换到Python - 实际的代码不会很难,但梅尔的版本将永远比字符维护更复杂并且比python更为复杂。 – theodox

回答

0

我在Python中这样做,因为它比Python更容易在Python中解决。这是很简陋,但它应该是一个很好的起点:

import maya.cmds as cmds  # cmds is the python version of mel's api 
obj = 'rig:rig:Root'   # your obj.. in real code you'd make a 
           # function and ask for an object name 
attributes = 'rx', 'ry', 'rz' # need to ask where the keys for on each channel 
rotation_keys = set() # this avoids duplications of key times 

# collect a list of all the frames which have any rotation key 
for attrib in attributes:  
    for key in cmds.keyframe(obj, attribute = 'rx', q=True, tc=True): 
     rotation_keys.add(key) 

# sort them by time, you now have a list of every rotate key time   
keyframe_list = sorted(rotation_keys) 

for key in keyframe_list: 
    if key > 50: 
     # scrub to the right time 
     cmds.currentTime(key) 

     # apply the rotation relatively 
     cmds.xform(obj, rotation = [0,180,0], ws =True, relative = True) 

     # get the channel values and make sure they are all keyed 
     for attrib in attributes: 
      new_value = cmds.getAttr(obj + "." + attrib) 
      cmds.setKeyframe(obj, attribute = attrib, time = key, value = new_value) 
0

简单的解决办法是将你的动画节点,并设置关键帧50

后旋转组如果这不是一个选项,有一种将累积分层动画的结果放到单个节点上的常用技术。它使用约束节点。你不需要做任何编程,但如果你喜欢,你可以编写脚本。

  1. 在原点创建一个定位器。
  2. 选择您的节点并移动选择定位器。
  3. 选择Constrain->东方
  4. 选择Constrain->点(不是必须的,但在视觉上有用)
  5. 只选择定位。
  6. 选择编辑 - >键 - > BakeSimulation [](由1从通道箱,样品 键,禁用隐式控制)
  7. HILIGHT平移和旋转在通道箱通道和击中 烘烤按钮。

定位器现在随您的节点移动并旋转。如果您的节点处于某个层次结构中,则关键值可能会不同,但运动应该一致。现在,你可以修改的议案,并用同样的过程传输回:

  1. 集团的定位,设置组枢轴与和动画组 直到定位有希望的运动。
  2. 删除节点上的密钥。
  3. 选择定位器并移动选择您的节点。
  4. 选择Constrain-> Orient,然后选择Constrain-> Point。

现在您的节点随着修改后的定位器运动而移动。在此阶段,您可以进一步修改定位器动画,调整,添加更多组转换等等。您的节点将更新。

最后,选择您的节点,然后使用与上面相同的选项选择Keys-> BakeSimulation,然后删除定位器组。