Zpluginの作り方
ものすごく基本のところですが、日本語で説明してる文書が見つからなかったので。
あったらごめんなさい。見つけ次第ここにリンク書きます。📝
認識が間違っていたら申し訳ないですが、
結局の所Zpluginは、マクロのテキストから生成されたZSCファイルが正体です。
要はソースコードを隠して、商材として使えるようにしてるのでしょう。
自分でサブパレットを作る1文をマクロの本文内に追加して、
ボタンに対してフルパスをぴちっと記述すれば、
そのままプラグイン(風?)になります。🤔
では、一例として、実際にプラグインを作ってみましょう。
まず、STW0.txt
というファイルをマクロフォルダに用意して、
//ZBRUSH MACRO - Recorded in ZBrush version 2020
[ISubPalette, "ZPlugin:STW0 Tools"]
[ISubPalette, "ZPlugin:STW0 Tools:Tools2"]
//この辺が生成されたマクロ、普通は[IButton,???, とか書いてあるはずです
[IButton,"Zplugin:STW0 Tools:Hello1","say hello1",
[Note, "Hello1"]
] //End of IButton
[IButton,"Zplugin:STW0 Tools:Tools2:Hello2","say hello2",
[Note, "Hello2"]
] //End of IButton
みたいな感じで記しましょう。
これ説明しますと、生成されたマクロの一番てっぺんに、
[ISubPalette, "ZPlugin:STW0 Tools"]
という感じで、サブパレットを生成するための文言をフルパスで置きます。
パレットを入れ子にしたいなら、
[ISubPalette, "ZPlugin:STW0 Tools:Tools2"]
のようにコロンで区切って、文字を付け足していきます。
次に、マクロの「???」部分をボタンを置きたい場所のフルパスに書き直します。
全てのボタンにおいて、フルパスで名前が書かれていなければなりません。
これを一旦マクロフォルダに置いて、ZBrushでマクロを読み込みます。
すると、
「STW0.zsc」
というファイルがマクロのtxtと同じ場所に生成されます。
あとは、プラグインを一度でもインストールしたことがある人ならご存知、
いつものあの場所(\ZStartup\ZPlugs64)にこれを放り込めばいいのです。
これで、STW0 Tools謹製、「ハロー!」と叫ぶプラグインが完成しました。🤣
いい感じのマクロが組めたら、2~3文書き加えて、Plugin化するのもオツではないでしょうか。
自分の書いたマクロをまとめて、「なんとかTools」とかネーミングして、
名だたるプラグイン達に仲間入りしちゃいましょう
ボタンの自在性
他のプラグインでもチラチラ見かけますが、
ボタンのパスはかなり柔軟で、Zplugin内に置く必然性はないらしく、
[IButton,"Draw:Hello in draw","say hello!",
[Note, "Hello from Draw palette!"]
]
なんて書けば、ドローパレット内にボタンを潜り込ませることも簡単です。
どこのボタンがどんなパスなのかは、ボタンの上でCtrlを押すと表示されるので、
プラグインパレット以外にボタンを置きたいときはそれが重宝するでしょう。
ボタンをフルパスで書かないとどうなるか?
[IButton,"Hello there","say hello there",
[Note, "Hello there"]
]
例えばこれをSTW0.txtに付け足すと分かりますが、ZBrushの下に居座っている、
「チュートリアル表示」ことスクリプトウィンドウ
のところに追い込まれてしまいます。
スクリプトの方から再生を行っていた人には、お馴染みの場所ですね。
マクロのボタンに名前をつけようとして、「???」を書き換えてしまい、
「あれ、マクロパレットに居ねぇ!ボタンどこ行った!?!?」
となった人は多いのではないでしょうか。😂
(なんでファイル名がそのままボタン名なの?なんて思った方も。)
「???」は結局、「マクロのフォルダ構造そのままの場所に、ファイル名でボタンを置け」
と言うコマンドのようなものなのだと思います。
だから、1ボタン1ファイルなんですね。
フルパスでボタンを書く方法を使えば、1ファイル1ボタンの必要もないですし、
ファイル名も好きな名前でつけることができ、管理が楽になります。
メモ群
マクロの再読み込みだけでOKな部分と、
ZBrush自体を再起動しないと反映されない部分がある。
少なくとも、サブパレットやボタンの位置や画像変更みたいなのは要再起動。
ボタンの設置順序は、スクリプトが読み込まれた順序そのまま。
ファイル名でのソートや、ファイル内で記述する際、順番をを考えないといけない。
(と思う。ボタンの位置を繰り上げるようなコマンドがないように見えます。)
処理のちょっとした高速化
長いスクリプトを書いた際は、適時、[iFreeze]と[MergeUndo]を練り入れると、
処理の高速化と、履歴のコンパクト化ができる、はず。
ついでに、リバースエンジニアリング防止😂🤔
ボタンを好きな画像にして気分アップ
[IButton, "Zplugin:STW0 Tools:test", "Logo",
//Commands
[Note, "I am the LOGO!"]
//Commands
,0// Initially Disabled? (0:Enabled(ByDefault) NonZero:Disabled) //ただのロゴにしたいなら0以外、ボタンにしたいなら0か空欄
,0 //Button width in pixels (0:AutoWidth NonZero:Specified width)
, //Optional hotkey
, "フォルダ名/ファイル.psd"// (.psd .bmp + .pct for Mac Systems) //スクリプトフォルダから下に潜っていく。 上行きたい場合はフルパスで? 横幅160くらいが限界な気がする。ZBrush公式のやつはだいたい160x50の大きさ
,// Button height in pixels (0:AutoHeight NonZero:Specified height)
]
ノートに変数を出す
普通にやると、変数か、文字列のみのどちらかになってしまう。
StrMergeで変数と文字列をマージしたものを出力する
[Note,[StrMerge,"文字列", 変数, "文字列", 変数], 表示時間(0で待機、それ以外で秒)]
みたいな感じ。1StrMergeごとに255文字まで。
255文字以上を、例えばNoteに表示したい場合は、Noteコマンドを追記型にするとよい。
ノートコマンドの最後に、,表示時間(省略可),-1(追記型)
[Note,長いの,,-1][Note,長いの2,,-1][Note,長いの3]
注意:あくまでも、頭がBASIC止まりで、
オブジェクト指向がどうとか、ポインタがどうとか、
もう聞きたくないレベルの人が苦心して書いてるので、
間違っていたら申し訳ないの一言です。