0

我试图通过 MAYA 中另一个对象的旋转来控制对象的挤出。但由于某种原因,它不起作用。它一直显示我收到语法错误。我不确定它有什么问题或如何解决它?

这是它的代码:

int $totalObjects = 1; 
polyPipe -n Rotator -ch on -o on -r 1.839239 -h 1.223879 ;
polyExtrudeFacet -constructionHistory 1 -keepFacesTogether 1 -pvx 0.07364761256 -pvy 0.6119394158 -pvz 4.019784712 -divisions 1 -twist 0 -taper 1 -off 0 -thickness 0 -smoothingAngle 30 Rotator.f[36];
setAttr "polyExtrudeFace1.localTranslate" -type double3 0 0 0.930651 ;


string $controlName = "Rotator";

float $spacing = 1.5;

for($i=1;$i<=$totalObjects;$i++)
{

 string $outName = ("twist_"+ $i);   
 string $outNameExtrude = ("ext_"+$i);
 float $extrusion = 0;

polyCube -n $outName -ch on -o on -w 12.009218 -h 7.720124 -d 0.755927 -cuv 4 ;
setAttr ($outName+".translateZ") ($spacing*$i);  


expression -s ($extrusion +"= Rotator.rotateY * 0.01*" + ($i*0.5) + ";")  -o "" -ae 1 -uc all ;


polyExtrudeFacet -n $outNameExtrude -constructionHistory 1 -keepFacesTogether 1 -pvx 0 -pvy 0 -pvz 4.0 -r $outName ;
setAttr $outNameExtrude + ".localTranslate" -type double3 0 $extrusion 0 ;


}

更新:

int $totalObjects = 1; 
polyPipe -n Rotator -ch on -o on -r 1.839239 -h 1.223879 ;
polyExtrudeFacet -constructionHistory 1 -keepFacesTogether 1 -pvx 0.07364761256 -pvy 0.6119394158 -pvz 4.019784712 -divisions 1 -twist 0 -taper 1 -off 0 -thickness 0 -smoothingAngle 30 Rotator.f[36];
setAttr "polyExtrudeFace1.localTranslate" -type double3 0 0 0.930651 ;


string $controlName = "Rotator";

float $spacing = 1.5;

for($i=1;$i<=$totalObjects;$i++)
{

 string $outName = ("twist_"+ $i);   
 string $outNameExtrude = ("ext_"+$i);
 float $extrusion = 0;

polyCube -n $outName -ch on -o on -w 12.009218 -h 7.720124 -d 0.755927 -cuv 4 ;
setAttr ($outName+".translateZ") ($spacing*$i);  



polyExtrudeFacet -n $outNameExtrude -constructionHistory 1 -keepFacesTogether 1 -pvx 0 -pvy 0 -pvz 4.0 $outName ;
setAttr ($outNameExtrude + ".localTranslate") -type double3 0 $extrusion 0 ;


expression -s ( $outNameExtrude + ".O[0]" +"= Rotator.rotateY * 0.01*" + ($i*0.5) + ";")  -o "" -ae 1 -uc all ;


}
4

2 回答 2

1

你的表情是

0= Rotator.rotateY * 0.01*0.5;

这是行不通的。你想要 ".O[0]" 代替吗?

您的 polyExtrudeFacet 中还有一个 -r 标志;我认为这行不通。

最后,你应该在最后一行用括号括起来 $outNameExtrude + ".localTranslate";

于 2013-11-24T02:50:23.120 回答
1

正如@theodox 指出的那样。您永远不应依赖 Maya 设置您告诉它设置的名称。因为如果 Maya 有命名冲突等,那么 Maya 会覆盖您,因此无论何时创建某些东西,总是会抓住名称。所以例如

polyExtrudeFacet -n $outNameExtrude 
                 -ch 1 -keepFacesTogether 1 
                 -pvx 0 -pvy 0 -pvz 4.0 $outName;

应该:

$tmp = `polyExtrudeFacet -n $outNameExtrude
                         -ch 1 
                         -keepFacesTogether 1 
                         -pvx 0 -pvy 0 -pvz 4.0 
                          $outName` ;
 $outNameExtrude = $tmp[0];

这可以避免您在脸上炸毁 Maya。所以你的代码看起来像:

proc makeCubesDrivenBy(
    string $controlName, int $totalObjects, float $spacing
    ){

    for($i=1;$i<=$totalObjects;$i++)
    {
        string $tmp[];
        string $outName = ("twist_"+ $i);   
        string $outNameExtrude = ("ext_"+$i);
        float $extrusion = 0;

        $tmp = `polyCube -n $outName -ch 1
                 -o on -w 12.009218 
                 -h 7.720124 -d 0.755927
                 -cuv 4`;
        $outname = $tmp[0];
        setAttr ($outName+".translateZ") ($spacing*$i);  

        $tmp = `polyExtrudeFacet -n $outNameExtrude
                                 -ch 1 
                                 -keepFacesTogether 1 
                                 -pvx 0 -pvy 0 -pvz 4.0 
                                 $outName` ;
        $outNameExtrude = $tmp[0];
        setAttr ($outNameExtrude + ".localTranslate") 
                  -type double3 0 $extrusion 0 ;


        expression -s ( $outNameExtrude + ".tz" +
                        "= Rotator.rotateY * 0.01*" +
                       ($i*0.5) + ";")  -o "" 
                       -ae 0 -uc all ;
    }
}

{
    string $pipe[], $facet[];
    int $totalObjects = 1; 
    $pipe = `polyPipe -n Rotator -ch 1 
             -o on -r 1.839239 
             -h 1.223879` ;
    $facet = `polyExtrudeFacet -ch 1 -keepFacesTogether 1
                     -pvx 0.07364761256 
                     -pvy 0.6119394158 
                     -pvz 4.019784712 
                     -divisions 1 -twist 0 
                     -taper 1 -off 0 
                     -smoothingAngle 30 Rotator.f[36]`;
    setAttr ($facet[0] + ".localTranslate") 
            -type double3 0 0 0.930651 ;
    makeCubesDrivenBy($pipe[0], 1 , 1.5);
}

无论如何,当您复制历史输入时,该过程本身并不是很正常,但我无法真正猜出您在追求什么。

PS:除非你真的需要,否则不要在表达式中使用 -ae 1 ,而且你不需要。

于 2013-11-24T19:19:50.973 回答