![見出し画像](https://assets.st-note.com/production/uploads/images/161870644/rectangle_large_type_2_fdf5a1eeb697db5ee7db43125ee13b64.png?width=1200)
3Dデザイナーがテクニカルアーティストを目指す話 #2
鵺と呼ばれている人です。
2024年3月から本格的にテクニカルアーティスト(以下、TA)になるために技術の習得を始めました。
今回はスクリプト制作編です。
内容は経験談ですが、将来TAを目指すデザイナーに向けて参考になるよう書き残しておきます。
作りたいものを考える
私は最初から作りたいスクリプトがありました。
ボタン1個でスナップするツールです。
モーション制作の話ですが、目印でロケーターを使う時に何個もスナップしたり…回転値をスクショでメモしたり……
面倒なのでなんとかできないのかなぁと考えました。
そして生まれたのが…………
Move Object to Selected
ダイレクトマーケティング
ということで、MoveObjecttoSelected(以下、MOtS)の制作過程を記していきます。
※このスクリプトはmaya.cmds(Python3)で書いてます。
※制作過程を書いてるので、コードの書き方を詳しく知りたい人は参考にならないと思います…スマンネ…
まずは書く
仕組みは簡単です。
ターゲットとなるオブジェクト、動かすオブジェクトの順に選択する→ターゲットのオブジェクトの情報を取得する→同じ値に移動する/回転する、これだけ。
しかし、選択したオブジェクトはどう読み取るのか、移動と回転はどう命令するのか、当時はさっぱりだったので調べました。
コマンドを知る
オブジェクトを読み取るコマンドはcmds.ls
選択したものを読み取りたいので、書き方は以下になります。
cmds.ls(select=True)
移動と回転の情報を取得するコマンドはcmds.getAttrを使用します。
#移動
cmds.getAttr()
#回転
cmds.getAttr()
コマンドが分かればあとは書くだけ……
どうやって書くの?
コマンドがわかっても書き方が分かりません。
とりあえずネットで検索かけて調べました、これに尽きます。
コマンドを使ったコード例を見ます。
変数 = コマンド()という形で書けば動く…
感覚的ですが、形で理解しました。
#こういう感じで書く
select_obj = cmds.ls(sl=True)
実行して結果を見ます。
エラーが出ました
世の中そんな上手くいきません。
エラーの原因を見ますが、解決方法が分かりません。Pythonが嫌いなシステムエンジニアの夫に相談して帰ってきた言葉が
「ChatGPTに聞いてみたら?」
ChatGPTから学ぼう
相談するまで知らなかったのですが、ChatGPTは書いたコードを添削し、改善を提案してくれるのです。(ただの大喜利ツールではないと)
早速書いたコードの添削をしてもらいます。
実際に聞いてみた
コードとエラー内容をコピペして聞きました。
![](https://assets.st-note.com/production/uploads/images/161837849/picture_pc_5ba14ff738c80d4c4f07ebac451d85b1.png?width=1200)
あとはChatGPTが答えてくれます。
![](https://assets.st-note.com/production/uploads/images/161842132/picture_pc_ff3e69f523fb3afd02862091aa0c69a6.png?width=1200)
【補足】
最後の行がprintなのは、数値が問題なく取得できているか確認するためです。
修正されたコードをスクリプトエディターに貼り付け実行します。
デバッグ作業みたいなものですね。
悔しいですが、ChatGPTに頼らないと綺麗なコードが書けないのが現状です。
でもこれって書いてることになるのか?という疑問が生まれます。
復習しよう
その都度、添削してもらったコードはなぜこういう書き方になったのか、このコマンドは何かChatGPTに細かく質問します。
「作って学ぶ」やり方を行っているので、書いて満足せず、しっかり聞きます。
![](https://assets.st-note.com/img/1731590906-HVcUkTsWEPihLAGN60gnlSeq.png?width=1200)
![](https://assets.st-note.com/production/uploads/images/161838968/picture_pc_033f5319fa639d8f4676bb9604df3fcf.png?width=1200)
おかげで新しい単語、エラーの起きないコードを学ぶことができました。
別のパターンを考える
最初に調べた時点で、オブジェクトの位置を取得する際のコマンドを「cmds.xform」か「cmds.getAttr」にするか悩みました。
最初は「cmds.getAttr」を採用していましたが、ChatGPTに質問したり、書いたコードを動かすうちに「cmds.xform」の方が良いという風になりました。
![](https://assets.st-note.com/production/uploads/images/161842973/picture_pc_8b1f8504fec26c11ae35c69253aa8e84.png?width=1200)
「別のパターン」を考えることで新しいコマンドを知るきっかけに繋がります。
作って学ぶコードの書き方とは?
ここまでのコードの書き方を振り返ります。
必要なコマンドを知らべる
何となくで良いのでとにかく書く
エラーが出たり思うように動かなかったりしたら、ChatGPTに聞く
修正されたコードを動かして結果をChatGPTに伝える
修正されたコードについて詳しく聞く (なんで?と思った箇所全部)
これを繰り返し行います。
何度も書き直しをして、ついにMOtSは完成しました。
まとめ
動作に必要なコマンドを知る
添削はChatGPTに聞く
作って満足せず、添削されたコードを見直す
別の書き方がないか調べる
余談ですが、投稿が半年くらい空いてしまいました………
なので見返してみると「すんごい初心者!」って思いましたw
今思い返せば、分からなくてもとにかく書くというのが大事だったなと感じてます。
これからPython書こうと考えてる人の参考になれば幸いです。
次回も同じく制作した時の話を書こうと思います。
お疲れ様でした!