【プラグイン配布】Rootの位置を替えずに人物全体を移動するプラグインを作りました

Rootの位置を替えずに人物全体を移動するプラグインを作成したので配布します。

以前の記事でPose Presetの仕様や使用方法を解説しました。

新しい保存方式「Presets」の仕様と使用方法を解説

今回の記事に関わってくる部分があるので、軽く目を通すことをおすすめいたします。

また、ポーズそのものについても別記事で解説しています。この記事では専門用語を連発するので、ポーズについてまだ理解していない方はご一読ください。

Virt A Mateの操作解説:ポーズと物理演算編

扱いやすいポーズ集を作りたい!

以前のSave Poseでは、強制的にRootControlの座標も保存されてしまいました。

この仕様のせいで、ポーズを読み込むたびにキャラクターがあっちにいったりこっちに行ったりして、そのたびに位置の調節が必要でした。

いままでどのような非合理的な作業をしていたか振り返ってみましょう。

今までのポーズ読み込み

そうだ!ポーズを読み込もう!

ポチっ!

グチャグチャグチャグチャ!わぁ!崩壊した!

(この時点で保存していなかったすべての情報が失われる)

~後日~

そうだ!ポーズを読み込もう!

反省を活かし、物理崩壊を防ぐため、念の為先にシーンを保存する。

以前保存したポーズを読み込んで見る。

グチャグチャグチャグチャ!やっぱりぶっ壊れた!

物理崩壊した状態で、RootControlを移動して、安全な位置にキャラを移動してポーズを保存し直す。

シーンを再ロードする。

ポーズを再ロードする。

RootControlを移動し、キャラ位置を微調整する。

~以後繰り返し~


あまりに非合理的で笑えますね。

ちなみに、物理の崩壊を抑えるのには以下のSession Pluginがおすすめです。(超重要)

Explosion Limiter Plugin

さて、Pose Presetsの登場により、RootControlの座標を変えないでポーズを読み込める様になりました。

”RootControlの座標をキャラの接地面に傾きなく配置した状態で、かつ、RootControlとキャラがそこまで離れていない状態(以下、正しい状態と呼びます)”で新しくポーズを作ることができれば、RootControlの位置を参考に読み込むことができるので、再利用がかなりしやすくなったのです。

ただ、”正しい状態”を維持するのは結構めんどくさいです。

後々別角度から見てをみると、実は傾いてたなんてのはよくあることです。

これを後から修正する場合は、RootControlの向きを変えるか、すべてのパーツのControlを再調整しなければいけません。

前者の修正の場合は、Pose Presetsに保存されないので、読み込むたびに調整が必要になります。後者の場合は、ただただ面倒くさいです。

ただ、後者のめんどくささはちょっとした工夫で軽減が可能です。その工夫とは「体のどこかのControlに他のすべてのControlを親子付して、親のControlを位置調整する」という方法です。

この工夫をすることで、RootControlに触れずに、キャラクター全体のポーズを移動することができます。ただ、それでも面倒くさい。一度全部親子付した後で、親子付を解除し、以前のState(On,Off,ParentLink等)に戻さなくてはいけないからです。手間も頭も使うことになります。

また、以前の仕様で作ったポーズやコミュニティで配布されているポーズ集のほとんどは”正しい状態”ではないはずです。ですので、Pose Presetsに以前のポーズを移植対し場合は、同様の手間が発生します。

もうポーズを読み込むたびに位置調整なんてしたくない!扱いやすいポーズ集を作りたい!

そのために生まれたのが、今回のプラグインです。

プラグイン:MovePoseWithoutRoot

このプラグインを使えば、ボタン一つで、すべてのパーツのControlをchestControlに親子付けし、ボタン一つで以前のStateに戻すことができます。

Pluginを対象の人物Atomに読み込みます。

Open Custom UIでプラグインUIを開きます。あるのはLinkというボタンのみです。クリックすると、体のOff以外のすべてのパーツのControlがchestControlに親子付されます。その後、ボタンのラベルがReleaseに変わります。Releaseをクリックすると、保持されている以前のState(On,Off,Lock)等に戻ります。

便利!以上です!

なお、もしchestControlがOffでも一時的にOnになり、その後Offに戻ります。

もし特定のパーツのControlがすでにどこかに親子付けされている場合は、そのパーツはそのままになります。自分の体の一部以外に親子付されている場合(手が胸に親子付されている等)はうまく機能しますが、自分以外のなにかに親子付されている場合はそのパーツのControlは置き去りにされるのでご注意ください。

もしLinkした状態で別のポーズを読み込んでしまうと予期せぬ挙動になるのでご注意ください。

プラグインのダウンロード

Google Drive

VaMルートフォルダ\Custom\Scriptsに配置してください。

MovePoseWithoutRootを使って以前のポーズデータをPose Presetsに移植する

以前の仕様で作成したポーズデータをPose Presetsに移植してみましょう。

30秒で移植しな 貼れる動画の長さの関係上やけに手際が良い

ちょっと上の動画だと早すぎて何やっているかわからないと思うので解説いたします。

予めプラグインを読み込んでおいてください。また、床を(PositionもRotationも初期値で)用意してください。

ポーズを読み込む

移植したいポーズをLoad Poseから読み込みます。

RootControlの座標をリセットする

Moveタブに移動し、PositionとRotation計6つを0にする。

RootControlが”正しい状態”にもどり、キャラクターの位置が相対的におかしい位置に移動し、傾きます。

このタイミングでキャラが地面に突っ込んだりして作業が継続できない場合は、一旦床をOffにしてやり直してください。

プラグインで親子付けし、位置を調整する

プラグインUI画面でLinkボタンをクリックします。親子付けが完了します。

RootControlの向きに気をつけながら(青い矢印がこちらを向いている状態で正面になるように)、床に合わせてchestControlのPositonとRotationを調整します。

先程床をOffにしていた場合は、床にめり込まない高さまでchestControlを移動してから床をOnにしましょう。

カメラをぐるぐる回して、変に傾いてないか確認しておきましょう。

プラグインで親子付けを解除し、Pose Presetsを保存

プラグインUIを開いてReleaseボタンをクリックし、もとのStateに戻しましょう。

あとは保存するだけです。

まとめ

解説は以上になります。みんなこの規格でポーズ作って配布してくれたらハッピーですよね。

プラグインは作ったばかりでまだそこまで使い倒せていないので、バグが見つかる可能性は比較的高いです。なにかあったらこの記事のコメント欄にお願いいたします。