[mel] scriptEditorから覚えるmel講座 その4 基本的なお約束と変数の話

間が少し開いてしまいましたが 前回の続きです。
 前回で スクリプトエディタからコマンドをコピペ→読んでみる→整理してみる→日本語にしてみる までをやって
ようやくここからが本番です。

カーブを選択する
選択したカーブのCVの数分 下の処理を繰り返す
  CVにクラスターを作る
  ロケーターを作る
  ロケーターをCVの位置に合わせる
  クラスターをロケーターにポイントコンストレインする
作成したクラスターとロケーターをグループにまとめる

前回、処理を日本語にしてみたのが ↑
これを実際にmelに書いていくわけですが
書くにしても知っておかなければ どうにもこうにも無理!! というおやくそくがmelには存在します。
なので今回(と次回)は、melを書くために必要な 「おやくそく」 を説明していきます。

1つめが melを書く上での基本ルールです。
これは、日本語の文章を書くときの 文の最後には。をつけます とかと同様にその言語に決められたお約束事です。
これがわからないと そもそも書けないお約束事なのできっちり抑えておきましょう。
詳しい説明は、今後実例の中で改めて書くので とりあえず箇条書きで書きます。

1 コマンドの終わりに ; をつける。
2 コマンドの実行結果を取得したい時は コマンドを で囲む。
3 変数の頭には $ をつける。
4 コマンド内で変数を使った計算(文字列の足し算を含む)をするときは () で式を囲む
5 変数の型 $変数名(配列の場合は[]) = 値 ;
6 変数へのセットは = を挟んで 右 を 左の変数名に セットする。
7 文字列は “” で囲う
8 配列をまとめてセットするときは {値,値….} のように {} で囲い、中に入れる値を,で区切って書く 

たぶん、現状だと なんのこっちゃwwというのが多いとおもいますが これを覚えた上で人のスクリプトを読むと
理解しやすいので、最初に脳みその端っこにでも入れておきましょう。

2つめが 変数 と呼ばれるものです。

変数というのは いわゆる【入れ物】です。
文字であったり、数字であったり なにかしらのものを 一時的に入れておいて コマンド中で 入れておいた文字や数字と置き換えたり
することができる というのが変数の機能になります。

詳しい説明をするまえに 実例を紹介します。

string $selectNode[] = ls -sl;

ls -sl というのは、 選択しているノードをリストする というmelのコマンドです。
これをスクリプトエディタで実行してみると、 選択しているノード名(cube1 と cube2 を選択しているのなら cube1 cube2)
が表示されたと思います。
ですが、スクリプトを書くときは コマンドを実行した 結果を使いたい わけです。
そういう時、コマンドの結果を 変数に入れて その結果を使えるようにします。

変数には、いくつか種類があります。
int(整数)   float(少数)  string(文字列) vector(ベクトル) と、Mayaの場合はこの4種類です。
この種類 というのは、 () 内にあるように、入れる値がなにかによって変わります。
1 2 3 4 のような、整数 なら、 int
0.1  0.2 のような、少数なら 、float
あいうえお のような、文字列なら string
RGB XYZ のような、ベクトルなら vector
これに+ して、配列 といって、 連続した 箱のようなものが存在します。

[a] 

 ↑ 箱が一つだけ

a [1] [2] [3] … 

  ↑ 箱が並べられている

たとえば、 a という変数をつくったとします。
普通の変数の場合、入れ物は1つなので、いれられる値も 1つだけになります。
しかし、配列の場合 a の 何番目の箱に入っているもの のように
並んでいる箱のなかに値を入れることができます。

それを踏まえてもう一度、実例をみてみます。

string
$selectNode[] = ls -sl;

変数を作る場合は、

変数の型 $変数名(配列の場合は[]) = 値 ;

の順で書きます。(順番をよーく覚えてください)


これは、意味とかではなく 絶対的なルール なので、そのまま まる覚えしてしまいましょう。

試しに、スクリプトエディタでどうなっているのか 簡単なコマンドを実行して
どうなるか見てみましょう。
print ~ というのは、変数の中にセットされている値がなにかを 表示することができるコマンドです。

1つめ

string $test = “aiueo”;
print $test;

2つめ

int $a = 10;
pirnt $a;
$a       = $a + 1;

3つめ

string $moji[] = {“a”,”b”,”c”};
print $moji;
print $moji[1];

4つめ

int $num   =  10;
int $numB = 30;
print ($num + $numB);

$num         =  $num + 5;
print $num;
それぞれを 1行づつスクリプトエディタで実行してみます。
実行してその結果をみたら、今度は
= の 右側   “aiueo”; とか 10; のようになってるところの数字や文字を変えて実行してみましょう。
変えたことによって print される文字はどう変わったでしょうか。

この 変数というものは、はじめて見ても 例えを聞いても はじめはなかなかピンと来ないものですが、
実行して ちょっと数字とかを変えてみて 再度t実行するとか 組み合わせるとか
した時どうなるのか よーく 見てみると 意味がわかってくると思うので 恐れずに↑のような簡単なコマンドを
実行してみていじくり回してみると なんとなーく 意味がわかってくるんじゃないかと思います。

そんなこんなでまとめ。
これだけは抑えておきたい お約束事

1 コマンドの終わりに ; をつける。
2 コマンドの実行結果を取得したい時は コマンドを で囲む。
3 変数の頭には $ をつける。
4 コマンド内で変数を使った計算(文字列の足し算を含む)をするときは () で式を囲む
5 変数の型 $変数名(配列の場合は[]) = 値 ;
6 変数へのセットは = を挟んで 右 を 左の変数名に セットする。
6 文字列は “” で囲う
7 配列をまとめてセットするときは {値,値….} のように {} で囲い、中に入れる値を,で区切って書く 

大切なので2度書きました。

ここに書いてあるのは 考えず 【そういうものなんだ】 と思いましょう。
あるいは、 【ふーん】と思って、脳みその端っこにでも入れておいてください。

随分と長くなってしまいました。
この量を一気に覚えるのは難しいと思うので、いきなりぜんぶ覚える必要はありません。
作業しながら、お約束事のメモを出しておくとかしてもOKです。

次回から よーやく実践というか 書いてみよう編です。
次の内容を読んだあとに、もう一度今回のを読みなおしたりして、どんなルールがあって どういうふうに書けばいいのか
実例をみつつ 基本的な「おやくそく」を 覚えられればよいのかなーと思います。

おまけ。

このへんのmelのお約束事はMayaヘルプの ユーザ ガイド > スクリプティング >  MEL とエクスプレッション にすべて書かれています。
今回のは 【値と変数】 という部分と 【構文】 のなかから、最低限 書くために知っておいたほうが良いことを抜粋していってるんですが…が。
ざっくり読むと勉強になるよ!!
とか言おうとしたんですが、 これから勉強するよって人には 説明書の説明が説明になってねぇwww 状態でした。はい。
私も、できるだけ簡単な言葉を選ぶようにしていますが ここがわからん!! というのがあったら、遠慮なくコメントとかでツッコミを入れてもらえると助かります。

そして、スクリプト本体を書く前で Blogエントリーが4つ目とか 前置き長いですが そのへんは許して下さいorz
全部書いたらまたいろいろ加筆修正するかもしれません(´・ω・`)

コメントを残す

メールアドレスが公開されることはありません。


*