MAYA 2020将几何ID赋值给aiUserDataInt默认值报类型转换错误如何解决
Maya 2020 MEL脚本问题解决
错误原因
你代码的核心逻辑错误有两处:
- 循环变量调用错误:你通过
for ($node in $Selected)遍历选中对象数组,每次循环拿到的单个几何体对象存储在$node变量中,但你赋值时直接调用数组本身$Selected.id,MEL无法识别字符串数组的属性调用,尝试强制转换数组为float类型失败,因此触发了你遇到的报错:
// Error: Line 2.37: Cannot cast data of type string[] to float. //
- 属性值获取方式错误:MEL中不能直接通过
节点变量.属性名的方式拿到属性的实际值,需要用getAttr命令获取属性数值。
修复后的代码
场景1:仅给固定的aiUserDataInt1节点赋值,取第一个选中几何体的ID属性
string $Selected[] = `ls -selection`; // 先判断是否有选中对象 if(size($Selected) > 0) { // 取第一个选中的几何体,获取它的ID属性值 float $idValue = `getAttr ($Selected[0] + ".ID")`; // 赋值给aiUserDataInt1的default属性 aiUserDataInt1.default = $idValue; }
场景2:选中多个几何体,每个几何体对应创建一个aiUserDataInt节点并赋值ID
string $Selected[] = `ls -selection`; for($node in $Selected) { // 先判断当前几何体是否存在ID属性 if(`attributeExists "ID" $node`) { float $idValue = `getAttr ($node + ".ID")`; // 创建新的aiUserDataInt节点 string $aiNode = `createNode "aiUserDataInt"`; // 赋值默认值 setAttr ($aiNode + ".default") $idValue; // 可选:给节点重命名方便识别 rename $aiNode ($node + "_aiUserDataID"); } }
注意事项
运行脚本前请确认你选中的几何体已经提前创建了名为ID的自定义属性,否则会触发属性不存在的报错。
内容的提问来源于stack exchange,提问作者Guillermo Vaca Núñez
相关产品推荐
相关产品推荐

