2017-09-30 47 views
0

有人可以帮助我这个简单的脚本。颜色值在一个循环maya

我只想应用数组中的材质颜色。

以下是我对现在。 我如何链接,以便我的素材两个(“色彩2”)查找值$dp_matColor[3],$dp_matColor[4],$dp_matColor[5]

它看起来像我需要一个if语句,但不知道我需要添加什么条件。

BTW,我将有两个以上的材料

我的最终目标是建立一个基于$list_of_names[]按钮,并从$dp_matColor[]获得背景色。 当我点击时,它会通过使用相同的数组创建基于以下for循环的材料。

目前,我可以通过对每种颜色都有一个程序来实现这一点,但是有很多重复的脚本。

string $list_of_names[] = {"color1", "color2"}; 
float $dp_matColor[] = { 1.0, 0.5, 0.5,0.5, 0.5, 1.0}; 

for ($eachName in $list_of_names){ 
    shadingNode -asShader VRayMtl -n $eachName; 
    setAttr ($eachName + ".color") -type double3 $dp_matColor[] $dp_matColor[] $dp_matColor[]; 
} 

回答

0

如果你使用Python,你可以通过它构建你的数据更容易循环是这样的:

import maya.cmds as mc 

data = [('color1', (1.0, 0.5, 0.5)), ('color2', (0.5, 0.5, 1.0))] 

for name, values in data: 
    shader = mc.shadingNode(asShader='VRayMtl', n=name) 
    mc.setAttr('%s.color' %shader, values, type='double3') 

我没有测试,为了确保它的作品...你可能需要将这些值分开放置,即:values[0], values[1], values[3]。你也可以使用字典来存储数据,或者创建2个彼此同步的列表......并且开启和关闭(这么多选项...)

但是要尝试与mel,这可能会奏效(自从我使用mel以来已经有一段时间了......所以如果它不起作用,原谅我......但是概念在那里......):

string $list_of_names[] = {"color1", "color2"}; 
float $dp_matColor[] = { 1.0, 0.5, 0.5,0.5, 0.5, 1.0}; 

for (i=0;i<size($list_of_names);i++){ 
    shadingNode -asShader VRayMtl -n $list_of_names[i]; 
    int $index = i * 3; 
    setAttr ($list_of_names[i] + ".color") -type double3 $dp_matColor[$index] $dp_matColor[($index+1)] $dp_matColor[($index+2)]; 
} 
+0

谢谢你这样,我能够在你的帮助下实现结果。我做了一些改变。现在,我不知道如何让每个按钮的程序运行。我做了一个不同的帖子。 https://stackoverflow.com/questions/46530691/link-procedure-to-each-button-command-maya – skb