Maya Python问题:遍历选择列表创建定位器时位置异常
问题原因
你的代码核心问题是循环中查询位置时传入了整个选择列表selection,而非当前迭代的单个项each:
- 选择多个对象(如球体)时,
mc.xform(selection, ...)会返回所有对象的位置值(格式为[x1,y1,z1,x2,y2,z2,...]),但你只取了前三个值,若第一个对象在原点,所有定位器都会被放到原点; - 选择多个顶点时,同样只会获取第一个顶点的位置,导致所有定位器重复放在该位置。
修正后的代码
import maya.cmds as mc selection = mc.ls(sl=True, long=True) # 使用long=True避免重名对象问题 for each in selection: newLoc = mc.spaceLocator() # 针对当前迭代的项查询世界空间位置 mySelPosition = mc.xform(each, q=True, ws=True, t=True) mc.move(mySelPosition[0], mySelPosition[1], mySelPosition[2], newLoc, ws=True)
额外优化说明
- 添加
long=True到mc.ls中:避免场景中存在重名对象时,Maya无法准确定位目标项; - 给
mc.move添加ws=True:明确指定在世界空间中移动定位器,避免因当前空间设置导致位置偏差。
内容的提问来源于stack exchange,提问作者Nico Corrao
相关产品推荐
相关产品推荐

