マルチマテリアル内のマテリアルを切り替えるリグを作っていこうと思います。
- これから作るもの
- シーンの用意
- 切り替えスクリプトを書く場所を確保
- アトリビュートを追加する
- スクリプトコントローラー内に変数を用意する
- スクリプトで挙動を試してみる
- 用意した素材をスクリプトで繋げる
これから作るもの
アトリビュートの変更でマテリアルをチェンジするリグです。
シーンの用意
「Body」という名前のついたBoxを用意。
今回はこのボックスに貼り付けたマルチマテリアルの値を切り替えられるようにします。
適当にマテリアルを用意します。
赤枠内は「標準マテリアル」
それをバックアップ用のマルチマテリアルに接続し、
更にその出力を、「Body」オブジェクトに引っ付ける為のマルチマテリアルに接続します。
インデックスは3番目に接続。
切り替えスクリプトを書く場所を確保
Bodyオブジェクトのスケールコントローラーに「スケールスクリプト」を割り当てます。
下記スクリプトでもOKです。
$Body.scale.controller = Scale_Script();
※使用しないコントローラーであれば、スケールでなくても構いません。
アトリビュートを追加する
次にBodyを選択した状態で、モディファイヤパネルに切り替え、
「アトリビュートホルダー」モディファイや~を適用します。
ここに状態制御用のアトリビュートを追加します。
Bodyを選択した状態で、「Alt + 1」を押して、「パラメータ編集」ウィンドウを開きます。
下記画像のようにパラメータを追加します。
すると下記画像のようにアトリビュートが追加されました(๑´•.̫ • `๑)
これらの状態をスケールスクリプト内で制御します。
スクリプトコントローラー内に変数を用意する
①Bodyオブジェクトのスケールコントローラをダブルクリックして
Body\スケール ウィンドウを表示します。
②変数名を入力します「Body」じゃなくても大丈夫です。
③作成した変数を選択している状態で、「トラック割り当て」をクリック。
④「トラックビュー選択」ウィンドウで「Body」オブジェクトを選択。
同様に、「Change」変数も追加します。
これは、先程「アトリビュートホルダー」で追加した「Change」アトリビュートを格納するためのものです。
スクリプトで挙動を試してみる
割り当てた変数が機能するか試してみましょう(๑´•.̫ • `๑)
下記スクリプトを記述し、「評価」を押下。
mats = Body.material.materialList[3];
print mats;
この状態でタイムスライダーを動かすと、大量のマテリアル名が出力されます。
つまり、ちゃんと情報を拾えているということです!
次は「Change」変数にアクセスしてみましょう。
print Change;
タイムスライダーを動かすと、Changeアトリビュートの現在セットされている値が整数で出力されます!
用意した素材をスクリプトで繋げる
「ScriptController」は Mayaで言うところのエクスプレッションです。
後は下記コードを記述すれば完成です(๑´•.̫ • `๑)
mats = Body.material.materialList[3];
setMat = Body.material;
setMat.material1 = mats[Change];
[1, 1, 1]
実際の動作はこんな感じになります。
応用すれば色々出来ると思います(๑´•.̫ • `๑)