Unity

【Unity】超優良アセット”Puppet Master”の使い方【モデルをくねくね(ラグドール)&掴む&Prop(武器)をもたせる】

本記事では、「Puppet Master」というアセットの使い方を綴ります。

私自身、まだまだ完璧に使いこなしているわけではありませんが、
①ラグドール、②キャラクター掴み、③Prop(道具)掴み
という機能を応用して、実際にゲームも開発できたので、
それら3つのやり方を紹介したいと思います。

この記事では、次の動画で示す挙動の方法を説明します↓

1.アセット「Puppet Master」とは

端的に言うと、
3Dモデルは通常アニメーションデータのようにしか動きませんが、
このアセットを適用すれば、
オブジェクトに衝突したときなど、
その影響が3Dモデルの動きに物理挙動的に反映させることができるのです。

実際には、それだけでなく、もっと色々な機能もあります。
例えば、他のキャラクターやオブジェクトを掴んだりする機能も加えることができます。

ただし、有料アセットで、価格はそれなりにしますが、
アセットの機能を上手く使うことができれば、
価格相応 もしくは、それ以上の価値があります。

これらの機能を自力で実装するには、
プロフェッショナルなスキルと労力が必要です。
※ちなみに、アセット開発者は、かの有名な「Final IK」も手掛けており、両アセットの相性も良い

さて、一体どんな感じのアセットなのか?
開発者のYouTubeをみると、アセットの各機能の実装方法が公開されています↓

英語の説明でよくわからん!という人は
日本語で分かりやすく紹介されている「UnityAssetStoreまとめ」の記事を参考にすると大まかな事はわかるでしょうね^^;

それらを見てもわからん!てなった方は、
以下に記載する内容が助けになるかもしれません。

2.3Dモデルにぐにゃらせ(ラグドール)を適用

PuppetMasterの各種機能を使う上で、初めの処理として、
各関節とそれに付随するメッシュが、
ぐにゃることができる状態(ラグドール)にする必要があります。

 

まず、シーンに3Dモデルを配置します。

ここでは例として
無料3Dモデルアセットの"Golem"を使います!
(無料のクオリティではない(@@;))

これをインポートしたら、「Prefabs」フォルダにある中の「PBR_Golem」を適当にCubeで地面を作っておいたシーンに配置します。

そのモデルには「Animator」しかもっていないので
「Rigidbody」と「Capsule Collider」をアタッチします。

実行すれば、地面に接地し、アニメーションします。

ここから、PuppetMasterを使います。

「PBR_Golem」のコンポーネントとして、「Biped Ragdoll Creator」をアタッチし、「Create a Ragdoll」をクリックします。

すると、「Options」が出てくるので、それも「Done」をクリック。

※すっ飛ばしてきましたが、
 細かく調整したい方は自由にいじって下さい^^

 

 

「Biped~」のコンポーネントがなくなりますので、
次に「Puppet Master」のコンポーネントを追加します。

その中の「Set Up PuppetMaster」をクリックで、処理は終了です!

すると、画像のように「Puppet Master」コンポーネントが変わります。
(緑になっているのは、私のゲーム実行中の仕様です^^;)

この処理だけを施した3Dモデルをゲームに使うだけで、
リアルタイムに物理的な接触を表現してくれるキャラクターができ上がります。

強いて言うなら、扱いたいパラメーターは、
「Pin Weight」と「Muscle Weight」でしょうか。

 

「Pin Weight」を0にすると、死体のように安定性がなくなり、倒れます。いわゆるラグドール。
「Muscle Weight」はアニメーションで動くボーンとメッシュとの関係性のようで、0に近いほど、メッシュがプルプル振動するようになります。

これらをゲーム内のスクリプトなどで制御すると、
よりリアルな挙動を示すゲームができるでしょう。

3.モノ・キャラクターをくっつける(掴む)

Puppet Masterの「Puppet Grabber.cs」を用いれば、
「2.」でラグドール化しているキャラクターをくっつけることができます。

今、Golemに「Puppet Master」を適用されているので、このGolemを何かにくっつけることが可能ということです。

ここでは、適当なCubeで試してみましょう。

画像のように、くっつける側としてのCubeに
「Puppet Grabber」コンポーネントをアタッチします。

次に掴まれる側は、Puppet Masterが適用された3Dモデルであること。
その子オブジェクトの「PuppetMaster」に
「BehaviorPuppet」というコンポーネントを追加します。

これで出来上がりです。

早速、実行してみましょう!

くっつける側(Cube)の「Puppet Grabber」の「掴み可能フラグ」にチェックを入れた状態で、掴まれる側(3Dモデル)に触れると、くっつかせることができます。

離す場合は、「掴んでるかどうか」のチェックを外せばOK。

3Dモデルの手オブジェクトに「Puppet Grabber」をつけると、相手を掴むアクションを実装することもできます。

 

さらにCubeにくっつけて、2つの3Dモデルを吊り下げることも可能です。

さて、お気づきかと思いますが、
この掴み機能「Puppet Grabber」では
「Puppet Master」が適用された(ボーンの仕込まれた)3Dモデルしか「くっつける・掴む」ことができません。

つまり、ただの小道具や武器などのオブジェクトを3Dモデルが掴むことはできません。

武器を取得して、掴んで振り回せたら、最高ですよね!
そこで、本アセットにある「PropMuscle」といった機能を使います。

4.Prop(道具・武器など)を取得する

「2.」でラグドール化したキャラクター(Puppet Masterの処理を行ったモデル)を準備します。

まず、Propを取得した際、身体のどこでどのように所持するか、を設定します。

例えば、左手で持ちたいならば、
PuppetMaster配下の「LeftHand(左手の平)」オブジェクト
「PuppetMaster」オブジェクトのPropMuscleというボックスにもっていき、「Add Prop Muscle」をクリックします。

これにより、取得したPropをPinするオブジェクト(Prop固定用オブジェクト)が生成されますので、
その「Prop固定用オブジェクト」の位置・方向をお好みに調整します。

詳細はアセット開発者がその紹介動画を上げてます^^↓

 

Propオブジェクトの作成方法について、動画の内容をまとめると…

長方形の棒状のProp作成
①空のゲームオブジェクト「Prop」を作成、その配下に空のゲームオブジェクト「Mesh Root」を作成
②「MeshRoot」の配下に「Cube」を作成
③その「Cube」を複製したものを「Collider」と命名し、「Prop」の配下に入れて、MeshRendererコンポーネントは削除
④「Cube」はMeshRendererの役目だけなので、そのBox Colliderコンポーネントは削除
⑤「Prop」にPuppetMasterProp、Rigidbodyの2つのコンポーネントをアタッチ

オリジナルのPropを作る際、一から作るのは面倒なので、アセットにあるProp Meleeを引っ張ってきて、メッシュとコライダーを変更して作るのもあり^^;

「Prop固定用オブジェクト」と、「Propオブジェクト」ができたら、ゲームを実行してみましょう。

「Propオブジェクト」を、「Prop固定用オブジェクト」のProp MuscleコンポーネントにあるCurrent Propに入れれば、取得されます。

逆にCurrent Propnull(None)にすれば、Propをその場に手放します。

実際のゲーム開発では、これをスクリプトやボタンで制御していきます^^
(ここにひと工夫の余地あり?!)

※そのノウハウは、後日追記することにします~

ABOUT ME
いなも@システマライフハッカー
”仙豆”を開発することを夢見て、健康食品会社で働いていたものの、2016年に出会ったロシアの武術”システマ”こそ、その糸口があると感銘し、勝手にシステマ普及活動を始める。 一方で、クリエイティブなモノ作りが好きで、DX社会で楽しみを見出せる"Unity”を活かして、”スマートかつ快適な暮らし”のヒントを発信している。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA