【Unity】プロ生ちゃんを動かす!(Unity4) 
2015/06/21 Sun [edit]
モデルによっては元々 MMD のものでも、Unity 用のパッケージも同梱されているものもあり、せっかくなので、そのまま unitypackage 版を使って、ユニティちゃんやクエリちゃん付属のモーションとスクリプトを使って動かしてみたいと思った。細かい不具合は色々あるだろうが、いつものただのテストなのであまり気にしない(笑)。
※この記事はプロ生ちゃんモデル「Unity 4 & 5 向け(2015/9/20 以前)」でやっているので、「Unity 5 向け(Ver. 2 モデル、2015/9/20 以降)」の場合は「SDプロ生ちゃんを動かす!」を参照して下さい。標準サイズモデルでもやり方は同じです。
これからやる方法は公式や他のブログなどの情報の寄せ集めだが、いくつもページやサイトをまたがって調べる必要があったので、とりあえず必要なものだけをまとめたという感じ。スクリプトやアニメーターなどは基本部分は使いまわしで、少しばかり修正を加えたものばかりだ。なので、もっとこだわりたい人は各自で改造して欲しい。
※ Unity 4.6.5f1 / Windows8.1(x64) で確認
■まずはインポートから
1.はじめに「暮井 慧(プロ生ちゃん) MMD & Unity 公式データ」をダウンロードしよう(掲載時点:Unity 4 & 5 向け(2015/9/20 以前)。
※2015/9/20 以降のモデルははじめからセットアップされているのがいくつか入っているので、「プロ生ちゃんを動かす!」まで読み飛ばして良い。以下のURLはその情報。
[3Dモデル情報]
プロ生ちゃん(暮井 慧) 3D モデル一覧
[2015/9/20 以降のモデル]
プロ生ちゃん Unity 向け 3D モデル (ver. 2) の使い方
ニコニコのアカウントが必要なので、無ければ適当にアカウントを作れば良い。右側にある「ダウンロード」ボタンを押せば、zip がダウンロードできる。ダウンロードが完了したら解凍して、「Pronama-chan>unity」フォルダにある「PronamaChan_s.unitypackage」を新しいプロジェクトにでもインポートしよう。ちなみに「Pronama-chan>unity-user-model」にある「PronamaChan_standard.unitypackage」でも良いが、こちらは Unity5 用である。今回は Unity4 でも使えるようにしたいので、わざわざ「PronamaChan_s.unitypackage」の方を使った。
2.次にモデルを動かすために、ユニティちゃんのオフィシャルサイトからユニティちゃんモデルのパッケージをダウンロードしよう。右上の「DATA DOWNLOAD」を押して、キャラクター利用のガイドラインの一番下まで行き、「ユニティちゃんライセンス」に同意すればダウンロードページへ行ける。ここから「ユニティちゃん 3Dモデルデータ」(掲載時点 Version 1.2 [UnityChan_1_2.unitypackage])をダウンロードする。これも同じようにプロジェクトへインポートしよう。
3.準備ができたら、とりあえず動き回れる床を作りたいので、「GameObject」メニューから「Plane」や「Cube」などで床を作ろう。テクスチャなどはユニティちゃんときと同じように適当で良い。また、このままだと真っ暗なので(Unity4 の場合)、「GameObject>Light」から「Directional Light」を追加しておく。設定は適当で良い。

4.次にプロ生ちゃんのモデルを配置しよう。しかしその前に、プロ生ちゃんのスケールを少しだけ小さくして置くと良い。そのままだとユニティちゃんや他のキャラに比べて、少し大き目になってしまう。プロジェクトエクスプローラで「PronamaChan>Prefab」を開き、「pronamachan.prefab」または「pronamachan_s.prefab」を見つけたらクリックし、インスペクターで Scale を調整しよう。その後、ヒエラルキーにドラッグ&ドロップする。ちなみに「~_s」の付いている方はスパッツバージョンらしい。今回は履いてない方を使っている。どちらでも構わない。


5.モデルを配置したら、スケールなどを変更していることもあり、少々扱いが面倒なので、空の GameObject の子要素にして、動かすことにする。またこの方が、モデルを入れ替えるときもラクだからだ。「GameObject」メニューから「Create Empty」で空オブジェクトを作り、適当に名前を付け、Position を原点に合わせよう。そしたらこの中に、先ほど配置したモデル「pronamachan」をヒエラルキーでドラッグ&ドロップして子要素にする。空オブジェクト(親)の名前は「PronamaChan_Locomotion」にしておいた。


6.また、カメラが少し遠いので、位置も調整しておこう。ここでは正面からにしておいた。シーンは適当な名前で保存しておく。


■シェーダーを変更する(2015/9/20 以前モデル)
動かすこととは直接関係ないのだが、モデルを配置してみて気になるのは、雰囲気がイラストっぱくないことだろう。これはシェーダー(陰影)の関係だ。シェーダー自体は好みで構わないのだが、とりあえず今回はユニティちゃんのシェーダーを使うこととする。他には「Standard Assets」の「Toon」なども、いかにもアニメっぽい感じになって良い。やり方は公式サイトに掲載してある。
(参考)
・暮井 慧(プロ生ちゃん)Unity 3D モデルにユニティちゃんシェーダーを適用する
・[Unity] プロ生ちゃんをトゥーンレンダリング
ここではもう少し具体的に解説してみよう。やり方がわかっている人は「■プロ生ちゃんを動かす!」まで読み飛ばしても良い。
1.ヒエラルキーで「PronamaChan_Locomotion」(名前を付けたモデルの親オブジェクト)の▼を開いて、「pronama>SkinnedMesh」をクリックし、インスペクターを表示しよう。

2.ここから、例えば「Tex_skin」の「Shader」のドロップタウンリストから「UnityChan>Skin」を選択しよう。するとインスペクターが更新されて「Falloff Control」と「RimLight Control」が設定できるようになるので、右側の「select」ボタンから、公式サイトにある設定例のように、それぞれ「Falloff Control」に「FO_SKIN1」、「RimLight Control」に「FO_RIM1」を設定する。

3.あとは同じように設定する。「Tex_eyelight」のみ「Skin – Transparent」を設定するとあるので、そこだけ注意する。分かりやすいように一覧にしておこう。
●ユニティちゃんシェーダー設定例
Material | Shader | Falloff Control | RimLight Control |
---|---|---|---|
Tex_skin | UnityChan/Skin | FO_SKIN1 | FO_RIM1 |
Tex_Dress | UnityChan/Skin | FO_CLOTH1 | FO_RIM1 |
Tex_eyes | UnityChan/Skin | FO_SKIN1 | FO_RIM1 |
Tex_eyelight | UnityChan/Skin - Transparent | FO_SKIN1 | FO_RIM1 |
Tex_face | UnityChan/Skin | FO_SKIN1 | FO_RIM1 |
eye_white | UnityChan/Skin | FO_SKIN1 | FO_RIM1 |
Tex_hair | UnityChan/Skin | FO_SKIN1 | FO_RIM1 |
tokei | UnityChan/Skin | FO_CLOTH1 | FO_RIM1 |


4.シェーダーをユニティちゃん用にした場合は、プロジェクトエクスプローラから「UnityChan>Prefabs」内にある「Directional light for UnityChan」をヒエラルキーにドラッグ&ドロップしよう。ちなみにこのライトはユニティちゃんシェーダーが良い感じになる光源だ。普通に使うにはかなり明るい気がする。先に置いた通常の「Direction light」は無効にするか、削除してしまっても良い。これで見た目が変わったハズだ。

ついでに「トゥーンシェーダー」をもう1つ別に設定する方法を書いておこう。
1.トゥーンシェーダーは「Assets」メニューから「Import Package>Toon Shading」を実行すると、インポートできる。素材は「Standard Assets>Toon Shading」に追加される。

2.プロジェクトエクスプローラで「PronamaChan>Models>Materials」フォルダを開いて、各マテリアル(~.mat)を見てみると、先ほど設定したものが反映しているのがわかるだろう。だから別のシェーダーを比較したい場合はこれを複製して使うのが良い。あらかじめ新しく「Toon」用のフォルダでもを作っておいて、「Materials」フォルダにある「~.mat」ファイルを全選択して複製([Ctrl - D])しよう。複製したマテリアルを、「Toon」用フォルダにまとめて移動しておくと分かりやすい。

3.次にヒエラルキーにあるモデル「PronamaChan_Locomotion」を複製([Ctrl - D])する。モデルを複製したら、▼を開いて、「pronama>SkinnedMesh」をクリックし、インスペクターを表示しよう。インスペクターで「Skinned Mesh Renderer」の「Materials」の▼を開き、先ほど複製したマテリアル(自動リネームなら、末尾に番号がついている)をプロジェクトエクスプローラからドラッグ&ドロップで登録する。

4.あとはインスペクターを下の方へスクロールさせ、トゥーンシェーダーを設定する。やり方はユニティちゃんシェーダーを設定したときと同じだ。これも公式サイトの設定をそのまま使い、ドロップタウンリストから、「Tex_eyelight」のみ「Transparent/Diffuse」または「UnityChan/Skin - Transparent」(「Directional light for UnityChan」を使っている場合はこっちの方が良い(?))に設定する。他は「Toon/Basic」(別のものでも良い)に設定してみよう。これでモデルを2つ並べてみれば、比較できる。

●シェーダーの比較

(左)ユニティちゃんシェーダー / (右)トゥーンシェーダー
■プロ生ちゃんを動かす!
ここまでくれば、あともうひと息だ。ユニティちゃんパッケージには移動用アニメーターとスクリプトが付いているので(※要インポート)、これを改造したものを使ってプロ生ちゃんを動かしてみよう。
1.まずはアニメーターから設定する。ヒエラルキーから配置したモデル「PronamaChan_Locomotion」の子要素「pronamachan」をクリックし、インスペクターの「Animator>Controller」に「UnityChanLocomotions」(移動用アニメーター)を設定しよう。これはユニティちゃん用だが、表情レイヤー以外ならそのまま使える(今回は表情は固定のまま)。また「Applay Root Motion」のチェックは外しておく。

2.次にスクリプトを設定しよう。ダウンロードしたサンプルの中に「UnityChanControlScriptWithRgidBodyForAny.cs」というファイルがある。これをインポートして、ヒエラルキーのモデルの親要素「PronamaChan_Locomotion」にドラッグ&ドロップしよう。これはユニティちゃん用のスクリプトを少しばかり改造したものだ。内容的にはアニメーターの取得方法と衝突判定を無視するレイヤーの設定、ジャンプカメラの無効化くらいで、基本はほとんど変わってない。

3.スクリプトを追加したら、「Capsule Collider」も自動的に追加されたと思うが、インスペクターで「Center>Y」と「Height」だけは調整しておこう。値は好きにして構わない。

4.次にインスペクターで「Rigidbody」の「Constraints」の▼を開き、「Freeze Rotation」を全てチェックを入れておこう。これを入れておかないと、移動したとき、コケる(笑)。

5.ここで試しに再生してみるとわかるのだが、プロ生ちゃんの髪やスカートが爆発したり、どこかにすっ飛んで行ってしまったりと大変なことになる(笑)。これはプロ生ちゃんのプレファブに初めから組み込まれているコライダと、先ほど追加された「Capsule Collider」が互いに干渉しあっているためだ。この修正方法は公式サイトに掲載されている「物理設定の修正」のやり方で直せる。とりあえずここに載っているようにインスペクターの上にある「Layers」から「Edit Layers...」を実行し、「User Layer 8」に適当な名前を付けよう。そして再びヒエラルキーで、モデル「pronamachan」をクリックし、インスペクターの「Layer」に先ほど付けた名前のレイヤー(ここでは「pronama」)を選択する。すると「Change Layer」のダイアログが出るが、「Yes, change children」を押して、モデル内のレイヤーも一緒に変更する。親オブジェクト「PronamaChan_Locomotion」のレイヤーは「Default」のままで良い。これで衝突判定が別々のレイヤーに設定されたので、再生してもプロ生ちゃんが普通に立っているハズだ。そしてこれは「Unity Chan Control Script With RgidBody For Any(Script)」の「Ignore Collision Layer」の番号にデフォルト設定(8)してある。「User Layer 8」は既に使っているなら、別のレイヤー「User Layer 9」などでも良い。その場合は「Ignore Collision Layer」の番号(9)も合わせる。


●作ったレイヤーをモデルに設定する

●モデルの子要素も同時にプロ生ちゃん用レイヤーに設定する

●スクリプトとレイヤーの番号を合わせる

6.最後に、カメラは固定で移動するとプロ生ちゃんが見えなくなってしまうので、カメラをキャラに追従させよう。一番簡単な方法は「Main Camera」を「PronamaChan_Locomotion」の子要素にしてしまう方法だ。ヒエラルキーで「Main Camera」を「PronamaChan_Locomotion」にドラッグ&ドロップして、カメラの位置を調整するだけで良い。こうするとプロ生ちゃんと一緒にカメラも動く。これでとりあえずは目的達成だ。


ついでにクエリちゃんのモーションも使ってみよう。スクリプトも同じように改造してある。ユニティちゃんモーションとあまり変わらないので、大雑把に説明する。だいたい想像つくのなら、「■スカートに足がめり込むのを修正する」まで読み飛ばしても構わない。
1.まずは Asset Store から、クエリちゃんのモデルをインポートしよう。

2.ダウンロードしたサンプル内にクエリちゃん用スクリプトを改造した「QueryLocomotionControllerForAny.cs」が入っているので、プロジェクトにインポートしたら、モデルの親オブジェクト「PronamaChan_Locomotion(PQ)」にドラッグ&ドロップして追加する。

3.スクリプトを追加したら、「CharacterController」も自動的に追加されるので、インスペクターで「Center>Y」と「Height」だけは調整しておこう。値は適当で良い。

4.次にアニメーターを設定しよう。ヒエラルキーから配置したモデル「PronamaChan_Locomotion(PQ)」の子要素「pronamachan」をクリックし、インスペクターの「Animator>Controller」に「PQchan_Movement」(クエリちゃん用移動アニメーター)を設定する。また「Applay Root Motion」のチェックは外しておく。ついでにレイヤーもプロ生ちゃん用に設定しておこう。ダイアログは「Yes, change children」にする。これでクエリちゃんモーションで動くようになったと思う。


同じやり方で他のキャラも同様に動かせる。モデルの中身を入れ替えるだけでOKだ。
■スカートに足がめり込むのを修正する(2015/9/20 以前モデル)
ここまででとりあえずは動かすのは成功したのだが、少しばかり足がスカートにめり込むのが気になったのではないだろうか?凝ろうと思えばいくらでもできるのだろうが、今回は手を抜いて、元々設定されているコライダを少しばかり調整して、その場しのぎをしようと思う。
1.ヒエラルキーで配置したモデル「PronamaChan_Locomotion」の▼を次々と展開していこう。「pronamachan>root0_Arm>root>center>lower_body」まで開くと、各パーツのコライダーが見えてくる。太もものコライダは「lower_body」以下の「foot_L>coll_foot_L」(左足)と「foot_R>coll_foot_R」(右足)となる。少しばかり両足の「Capsule Collider」の「Rudius」(半径)を大きくしよう。



2.あとは足がぶつかりそうなスカートの前部分をいくつか調整しておこう。「lower_body」以下の「skirt_0_0」(手前)、「skirt_0_1」(左前)、「skirt_0_11」(右前)を展開して、同じようにコライダを調整する。「skirt_0_0>skirt_1_0>skirt_2_0>phys_skirt_2_0」(手前の上から3段目)まで開いたら「Box Collider」の「Z」を少し大きくする。同じように「skirt_0_1>skirt_1_1>skirt_2_1>phys_skirt_2_1」(左前の上から3段目)、「skirt_0_11>skirt_1_11>skirt_2_11>phys_skirt_2_11」(右前の上から3段目)の「Box Collider」の「Z」も同じように調整しておく。これで少しだけ「まし」になる(完全に突き抜けなくなるわけではない)。スカートの上から2段目なども調整しても良いかもしれないが、それほど代わり映えはしない。とりあえずはこれで完成だ。



まだまだジャンプしたとき、スカートがめくり上がったままになったり、コライダを大きくしたため、スカートが微妙に広がったりと問題はあるだろうが、その辺りは各自で研究して欲しい。ユニティちゃんのプレファブを見てみると「Spring Manager(Script)」「Spring Bone(Script)」というものを使っていて、「Spring Collider(Script)」で髪や服などの衝突判定をしているようだ(「UnityChan>Prefabs」にある「unitychan_dynamic_locomotion」をヒエラルキーにドラッグ&ドロップして、中身を見てみるとわかる)。これは髪を綺麗になびかせたり、伸縮してより自然に動くようにしたりするスクリプトだが、たぶんこれを使った方がより良い感じになるのだろうが、自分で設定するには結構手間がかかりそうだ。「揺れもの」として試している記事やサンプルなどもあったので、参考に色々やってみて欲しい。上手くいったらプレファブでも公開してくれるとありがたい(笑)(→「プロ生ちゃん(暮井 慧) ユニティちゃんライセンス版」(ユニティちゃんライセンスに準拠すれば無料利用可)には「揺れもの」セットアップ済みが入っている)。
(揺れものなど)
・プロ生ちゃんの髪やスカートをユニティちゃんの揺れものでセットアップしてみた
・Unityで揺れものを揺らす
>>完成サンプル Unity5 (別ウィンドウ) [WebGL (Chrome, Firefox)]
(※) Unity5 版は「SDプロ生ちゃんを動かす!」の方法で作ってある。
(※) カメラ追従は「SmoothFollow に回転アングルと距離の遠近機能を付けたもの」を使っている。
(関連記事)
【Unity】SDプロ生ちゃんを動かす!
【Unity】プロ生ちゃんを飛行させる!
【Unity】SDクエリちゃんを動かす!
【Unity】クエリちゃんを動かす!
【Unity】SDユニティちゃんを動かす!
【Unity】【C#】ユニティちゃんをサクっと簡単に動かす!
【Unity】【C#】SmoothFollow に回転アングルと距離の遠近機能を付けてみる


| h o m e |