我创建了一个脚本,可以生成三种不同的多边形,其x
y
z
坐标随机化。当前代码根据需要生成这些代码,但每个代码始终生成40个。
下一步是使用整数作为random number generator
来生成每个多边形类型的随机数。这需要for
循环,其中包含一个if
语句,一个else-if
语句和一个else
语句。代码将完整地执行前面提到的参数(因为我已经取消了它们),除了它只执行一种类型的多边形(条纹不可触发)。
我对两件事情持怀疑态度:
1:如果int $rng=rand(1,4);
正确指定创建范围1-4以作为random numbers
使用。
2:如果需要for
循环带if-else
语句,则首先获取所有形状的随机数。
This is a desired result I'm trying to get. This is the most recently-executed result of the code.
int $num = 40 ;
int $rng = rand( 1, 4 ) ;
for ( $i = 1; $i <= $num; $i++ ) {
if ( $rng == 1 ) {
polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1 ;
int $xpos = rand( -20, 100 ) ;
int $ypos = rand( 20, 80 ) ;
int $zpos = rand( 20, 50 ) ;
move -r $xpos $ypos $zpos ;
print ( $i + "sphere \n" ) ;
}
else if ( $rng == 4 ) {
polyTorus -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1 ;
int $xpos = rand( -20, 100 ) ;
int $ypos = rand( 20, 80 ) ;
int $zpos = rand( 20, 50 ) ;
move -r $xpos $ypos $zpos ;
print ($i + "torus \n");
}
else {
polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1 ;
int $xpos = rand( -20, 100 ) ;
int $ypos = rand( 20, 80 ) ;
int $zpos = rand( 20, 50 ) ;
move -r $xpos $ypos $zpos ;
print ( $i + "cube \n" ) ;
}
}
答案 0 :(得分:0)
你需要将$rng
放在for循环中,否则它会选择一个随机几何体,只需创建40次而不是每次都选择一个随机数。
在这种情况下,您可以使用if
来确定不同的案例,而不是使用else
switch
。你也不需要重复获取位置并在所有情况下移动它们,因为它们正在做同样的事情。删除它们会使脚本变得不那么臃肿。
这是MEL中的一个例子:
int $num = 40;
for ($i = 0; $i < $num; $i++) {
int $rng = rand(0, 3);
float $xpos = rand(-20, 100);
float $ypos = rand(20, 80);
float $zpos = rand(20, 50);
switch ($rng) {
case 0:
polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1;
print ($i+1 + ": sphere \n");
break;
case 1:
polyTorus -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1;
print ($i+1 + ": torus \n");
break;
case 2:
polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1;
print ($i+1 + ": cube \n");
break;
}
move -r $xpos $ypos $zpos;
}
并且同样地,这里是Python中的相同代码,我推荐你选择,因为语言更灵活,社区更大,更容易学习:
import random
import maya.cmds as cmds
num = 40
for i in range(40):
rng = random.randint(0, 3)
xpos = random.uniform(-20, 100)
ypos = random.uniform(20, 80)
zpos = random.uniform(20, 50)
if rng == 0:
cmds.polySphere(r=1, sx=20, sy=20, ax=[0, 1, 0], cuv=2, ch=1)
print "{0}: sphere \n".format(i+1)
elif rng == 1:
cmds.polyTorus(r=1, sx=20, sy=20, ax=[0, 1, 0], cuv=2, ch=1)
print "{0}: torus \n".format(i+1)
else:
cmds.polyCube(w=1, h=1, d=1, sx=1, sy=1, sz=1, ax=[0, 1, 0], cuv=4, ch=1)
print "{0}: cube \n".format(i+1)
cmds.move(xpos, ypos, zpos, r=True)
不要忘记你的缩进和格式;你的代码目前有点难以阅读,因为它:)