**
Maya对齐到地面-Python脚本
**
最近在学习Python for maya,想着写点什么小脚本呢? 在网上逛了逛,看到有人在小破站发了一个“Maya对齐地面小脚本”,于是决定自己来写一个。 废话不多说,先上脚本:
import maya.cmds as cm
obj=cm.ls(sl=1)
if obj:
for i in obj:
print("I'm ready!")
else:
cm.error("你没有对象!",noContext=True)
objY = cm.getAttr(obj[0] +'.ty')
temp = cm.xform(obj,query=True,bb=True)
cm.move(objY-temp[1],obj,y=True)
编码思路和过程
因为自己也才刚学,第一次写脚本。所以记录一下这个过程。
看到视频后开始整理思路: 首先是使用位移,让对象移动回地面,这个应该不难。(废话) 然后怎么让物体的轴心不论在哪里都让物体最底面接触地面呢? 我也不知道啊- -。。。
于是打开maya,既然是要移动轴心,不如运行了一下CenterPivot。在编辑器里找到了这个: Xform是个什么玩意? 不着急,问问Maya就知道: https://help.autodesk.com/view/MAYAUL/2020/CHS/?guid=__CommandsPython_index_html
此命令可用于查询/设置转换节点中的任何元素。它还可以用于查询一些不能直接设置的值,例如变换矩阵或边界框。它还可以将两个轴心点设置为方便的值。
顺着这个线索,终于找到了xform.boundingBox 原来在maya里还有边界框的概念啊 那么主角找到了,接下来就好办啦。(我以为) 因为才学了几天,第一次写脚本,过程还是遇到很多可能很基础的问题: 最开始我考虑,只要得到边界框的minY,把他按到地面不就完事了? 结果,boundingBox 只可以查询。 最初我还不知道怎么查询,print也打不出来,后来发现需要加“query=True”。
到这里,我以为移动对象就可以,结果发现移动的值是个绝对值,不能移动相对距离(或者可以,我没找到方法)。结果就用了个笨方法,getY轴的值做了个加减法。
最后,再附带一段将轴心重置到对象脚底的脚本:
import maya.cmds as cm
obj=cm.ls(sl=1)
if obj:
for i in obj:
print("I'm ready!")
else:
cm.error("你没有对象!",noContext=True)
temp = cm.xform(obj,query=True,bb=True)
objY = cm.getAttr(obj[0] +'.ty')
cm.xform(piv=(0,temp[1]-objY,0))
print (obj,temp[1])
总结一下
靠我这两天学习的有限的代码知识,加上各种查,总算完成了一个自己的脚本。虽然简单但是过程很有意思。脚本还不完善,需要在细化些内容。或许不用加减法就可以实现移动呢?
|