该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
【动画关键帧的设置和断开】
解决了节点的选择,接下来就是对所需属性的控制。
进行常规的软件操作测试,通过脚本编辑器中得到的反馈信息来完成语句编写,这在第一篇中已经说过,这里就不再重复演示。以下是控制笔刷大小和生长关键帧设置的函数语句。
def brushSize(arg):
sizeInput=float(py.textField('size',q=True,tx=True))
sels=py.listRelatives()
for sel in sels:
attr=py.connectionInfo(sel+'.brush',sfd=True)
brushName=attr[0:len(attr)-len(".outBrush")]
py.setAttr(brushName+'.brushWidth',sizeInput)
def grow(arg):
minInput=float(py.textFieldGrp('min',q=True,tx=True))
maxInput=float(py.textFieldGrp('max',q=True,tx=True))
sels=py.listRelatives()
for sel in sels:
py.setKeyframe(sel,at='mnc',v=minInput)
py.setKeyframe(sel,at='mxc',v=maxInput)
*语句中预先输入的几个未知变量(sizeInput,minInput,maxInput),是用于存储稍后编写的文本框中的数值。
为了还原设置,这里继续加入一个“断开动画关键帧”的函数语句。断开物体属性之间的链接,需要输入两个具体属性的完整名称。此处我继续使用connectionInfo函数获取上游节点属性,是为了预防多个属性连入的情况。例如本例中,如果你对属性设置关键帧,断开连接后再设置关键帧,你会发现maya将不断的生成新的节点,动画节点的名称是在变化的。所以利用唯一的输入属性来寻找输出属性是最安全的方法。
def breakGrow(arg):
sels=py.listRelatives()
for sel in sels:
attrConn=py.connectionInfo(sel+'.minClip',sfd=True)
py.disconnectAttr(attrConn,sel+'.minClip')
attrConn=py.connectionInfo(sel+'.maxClip',sfd=True)
py.disconnectAttr(attrConn,sel+'.maxClip')
出于python允许的规则,以及个人的偷懒,我重复使用了相同名称的变量。毕竟作为临时存储数据的变量而言,我不打算花心思去给它漂亮的命名。这个习惯在下一个步骤中再接再厉。