![スクリーンショット_2019-05-09_04](https://assets.st-note.com/production/uploads/images/11559295/rectangle_large_type_2_935d524e4f22952992889ed715c7b0f7.png?width=1200)
[2.8]「こっち見んな」を3行で
「たくさんの同じような処理をプログラムに任せて楽をしよう」と思ったことはありませんか?
BlenderはAdd-onとかたくさんあるって聞いたしなんとかなるんじゃない?って思ったものの、自分のやりたいことにドンピシャでハマるAdd-onはそうそうなかったりします。またはものすごくニッチなケースだったり。
そういった場合にPythonでチャチャっと書けたらいいのにな、ということでよく考えずにチャチャっと書いたメモを残しておきます(?)
多くの目玉が対象を見る
「多くの目玉が対象を見る」というのを作ります。
・ UV Sphere オブジェクトの目玉 がたくさん
・ Empty オブジェクトを対象に向きを変える
手作業でやるとすると、(1)Track Toコンストレイントを追加(2)対象ターゲットオブジェクトを指定、これを各オブジェクトごとに行うということになります。
オブジェクトの設置
UV Sphere をシーン上に追加、目玉の模様をつけてください。目玉の瞳の向く方向が+Y方向、上が+Z方向になるようにします。
これを複製して並べます。さらに、視点の向き先となるEmpty を追加。オブジェクト名は Empty です。
次に Empty に向ける「目玉」のオブジェクトを選択します。
これでスクリプトを実行するための下準備はできました。
スクリプトの実行
「選択したものを」「Track To コンストレイントで」「対象は Emptyオブジェクト」にするスクリプトは3行でかけます。Interactive Console前提で、ですけど。
for obj in C.selected_objects:
a = obj.constraints.new('TRACK_TO')
a.target = D.objects['Empty']
上の3行をコピー、Interactive Console上にペースト、[Enter]キーを押します。
>>> for obj in C.selected_objects:
... a = obj.constraints.new('TRACK_TO')
... a.target = D.objects['Empty']
...
すると、3Dビュー上で empty オブジェクトとそれぞれのメッシュオブジェクトに青い点線が結ばれました。
向きも Empty オブジェクトに向いていますね。では Empty オブジェクトを動かしてみましょう。
アドホックなスクリプト
「目が Empty オブジェクトの方を向いた、わーい」って喜んでみたものの、これは前提として必要な操作を正しく行って初めてうまく動く類の、アドホックなスクリプトであることに気がついたことでしょう。
実は、 Empty オブジェクトの名前が「 "Empty" でない」、というだけでこのスクリプトは正しく実行されません。そういった部分を「良い感じにする」ためには、もっと多くの考慮事項が出てくることになります。作るとしたらもっと時間も必要ですね。
とはいうものの
「トータルでかかる手間」を考えると「早く終わる方」を選択した方がどうしても賢いので、「自分でスクリプト書いて解決しようとして結局長い時間かかった」ということは避ける方向で。
将来的に、というのであればそれはそれで別途考える時間を設けましょう。
お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!