2017-09-30 34 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