見出し画像

【Maya】カジュアルにスクリプトを書こう・前編【Python】

★この記事は「Maya Advent Calender2024」用に投稿しました。

3DCGデザイナーのたぶん、鵺です。
もう冬ですね。朝は冷え込み、布団が恋しい季節です。
ということで、冬っぽく「Freeze」の機能を使ったPythonスクリプトを書こうと思います。

この記事は以下の向けです。
・MayaでPython書きたいけど作りたいもの思いつかない人
・リガーでレベルアップしたい人
・普段の機能を楽にしたいなと考えてる人
・私が書きたいコードを書ける

いつものFreezeを…
ウィンドウで簡単に!

タイトルの通り、カジュアルにPythonを書こう!というのが目的です。
なるべく分かりやすく解説しますが、分からないところはググってみてください。

【基本情報】
バージョン:Maya2022(Python3)

【準備】スクリプトエディターを起動する

またはWindows> General Editors> Script Editor

アイコンを押してスクリプトエディターを起動してください。
別のウィンドウが出てきます。

コードを書くのは下画面です。

今回のコードはPythonタブで書く必要があるので+ボタンを押して「Python」を選択します。

【実践】コードを書こう!

まずはFreezeのAllの機能だけを書いてみましょう。
以下のコードをスクリプトエディターに書き込んでみてください。

import maya.cmds as cmds 

def All_freeze():
    selected_obj = cmds.ls(selection=True)
    cmds.makeIdentity(selected_obj, apply=True, t=True, r=True, s=True)
    
cmds.window(title='Freeze', w=200, h=120)
cmds.columnLayout()
cmds.button(label='All', w=200, command="All_freeze()")
cmds.showWindow()

書き終わったら、上の▶▶アイコンを押してください。

実行するとのウィンドウが出てくる

【解説】

0行目

import maya.cmds as cmds
Pythonを動かす為の呪文です。
これがないとPythonで書かれたスクリプトは動きません。
0行目に書いておくと一目でPythonと分かります。

2行目

def All_freeze():
これは関数です。
関数とは、命令をまとめた大きな塊と思ってください
関数内にある命令を全部まとめて処理、実行をしてくれる仕組みです。

def 〇〇 ():が関数の書き方になります。○○には名前を付けます。
このコードのAll_freezeが関数の名前です。

3行目

selected_obj = cmds.ls(selection=True)
このコードは選択したオブジェクトの情報をゲットする役割を持っています。
フリーズする時にまず対象のオブジェクトを選択しますよね、それがこのコードに当たります。

cmds.lsはオブジェクトの情報をゲットする機能しかありません。
対象のオブジェクトを選択する必要があるため、選択するという条件を付け加えます。それが(selection=True)です。

【cmds.○○について】
この後もcmds.〇〇という文字の並びを見ることになりますが、これはMayaの機能をPython用に書き換えたコマンドです。

(○○=True)はフラグと言います。
コマンドのオプションと思ってもらえれば良いと思います。

cmds.ls(selection=True) を活用するために、変数に保存します。
その変数に selected_obj という名前を付けています。

【変数について】
変数は、データを一時的に保存しておく「入れ物」です。
関数よりも小さな塊と思えば大丈夫です。
selected_obj と書くだけでcmds.ls(selection=True)の情報を参照することができます。 

4行目

cmds.makeIdentity(selected_obj, apply=True, t=True, r=True, s=True)
フリーズを行うコードです。

cmds.makeIdentityがフリーズの機能を指します。
()内にselected_objがありますね。

これは選択したオブジェクトの情報(トランスフォーム)を書き換えるために()内に入れました。

※トランスフォームとは位置、回転、拡縮の値のこと

後ろの(apply=True, t=True, r=True, s=True)について。
applyはワールド空間の位置で保持…その場でリセットする機能があります。
tはtranslate、rはrotate、sはscaleの略です。
(t=True, r=True, s=True)は各トランスフォームのリセットをするフラグとなっています。
省略せずに書くと以下のようになります。

cmds.makeIdentity(selected_obj, apply=True, translate=True, rotate=True, scale=True)

ちょっと長いですよね。
フラグはショートコードと言って、より短い形で書くことができます。

【ショートコードについて】
ショートコードの書き方はドキュメントに書いてあります

cmds.makeIdentityの場合
http://me.autodesk.jp/wam/maya/docs/Maya2009/CommandsPython/makeIdentity.html#hExamples

関数についてのまとめ

図にするとこんな感じ

関数については以上です。ここから先はGUIを設計します。

※GUIとは、操作する人に分かりやすいようにウィンドウやアイコンを用意すること

コードを実行すると出てくるGUI

6行目

cmds.window(title='Freeze', w=200, h=120)
ウィンドウを作るコマンドです。

7行目

cmds.columnLayout()
レイアウトを設定するためのコマンドです。
これを書かないとエラーが起きます。

8行目

cmds.button(label='All', w=200, command=All_freeze)
ボタンを作るコマンドです。
フラグのcommandで、ボタンを押すと関数が実行されるようにしました。

【'〇〇'と"○○"について】
これは文字列と言います。
'〇〇'か"○○"で囲めば、文字/テキストのデータとして扱われます。

9行目

cmds.showWindow()
このコードを書かないとウィンドウは出てきません
必ず書きましょう。

解説は以上です。

前編はここまで

実際に書いてみてどうでしょうか?
「スクリプトを作るのって意外と簡単かも」と思って貰いたく今回記事にしてみました。
とはいえ、Pythonの基礎をすっ飛ばして解説してるのでPythonist(パイソニスト=Pythonの使い手を指す言葉)が目にしたらツッコミを貰いそうですが、ご容赦ください…

次回は残りのFreeze機能と細かい調整の実装をしますよ!
ここまでご覧いただきありがとうございます。
お疲れ様でした!

▼後編はこちら

いいなと思ったら応援しよう!