UnityでMMDモデルを動かすための手順などを紹介します。
②:プログラムを書くことに興味がある・どうやって動かすか詳しく知りたいという方
モデルへのモーションの設定手順、キーボードから入力を受け付けてモデルを動かす手順などを紹介していきます。
モーションはユニティちゃんのものを拝借します。
下記画面のように、Projectビュー内のAassets内で右クリックをして、Create > Animator Controllerを選択します。
するとAssets内にNew Animator Controllerというファイルができるので、適当な名前に変更しておきます。
ここで注意点ですが、ファイル名はアルファベットだけで付けた方が無難です(日本語を使うと思わぬ動作につながる可能性があるため)。
他のモデルにもつかえるかなと考えていますので自分はmmd_model_animator_controllerと付けました。
次は作成したファイルをダブルクリックで開いての中身を作っていきます。
Animator Controllerを開くと下記画面のように、Any Stateだけの画面が表示されると思います。
下部にある+をクリックし、Floatを選択します。
するとParametersに追加されるので名前をspeedとしておきましょう。
ちなみに、+をクリックした際に出てきた英語を解説するとプログラミングの変数宣言で使われる単語で、それぞれ下記の意味を持ちます。
Float:小数型(主に小数を扱う際に用いられる。)
Int:整数型(主に整数を扱う際に使われる)
Bool:真偽値(条件を満たしているか、例:空中にいる、地面に接しているなど)
Trigger:トリガー(そのままの意味でがある瞬間に動作を行いたい場合に使われる、例:キーが押された時にジャンプするなど)
次に下記画面のように、Animatorビューの何もないところで右クリックし、Create State > Emptyを選択します。
するとNew Stateが追加されるので、それをクリックしてInspectorビューから名前をWaitに変更します。
さらに作成したStateにモーションを割り当てます。
下記画面のように、Stateを選択してInspectorビューのMotionの○ポをクリックしてSelect MotionのAssetsタブからWAIT01を選択します。
同様に、もう一つステートを作成してください。ステート名はWalk_FでMotionはWALK00_Fを選択してください。
これで待機と歩きのステートができました。次に作成したステートを繋ぎます。
下記画面のように、Waitを右クリックし、Make Transitionを選択し、伸びた矢印をWalk_Fに繋ぎます。
同様にようにWalk_FからもWaitに矢印を繋ぎます。
次に繋いだステートを遷移する条件を設定していきます。
WaitからWalk_Fに伸ばした矢印をクリックし、InspectorビューのConditionsで条件を設定します。
要素はspeedを選択、条件はGreater、値は0.1を設定してください。
同様にWalk_FからWaitに伸ばした矢印にも条件を設定してください。
要素はspeed、条件はLess、値は0.1を設定です。
ちなみに下記に設定した条件を解説しておきます。
WaitステートからWalk_Fステート:speedが0.1以上のとき、Walk_Fに遷移
Walk_FステートからWaitステート:speedが0.1以下のとき、Waitに遷移
これでAnimator Controllerの設定は完了です。Sceneビューに戻って作成したAnimator Controllerをモデルにセットしましょう
Hierarchyでモデルを選択します。InspectorビューのAnimator内にあるControllerの右の○ポチをクリックします。
下記画面のように、Select RuntimeAnimatorControllerウィンドウが現れるので、Assets内の先ほど作成したAnimator controllerを選択します。
さて、次で最後です、もう一息なので頑張りましょう。
キーボードから入力を受け付けてモデルを動かすスプリクトを作成していきます。
Hierarchyでモデルを選択します。下記画像のように、Inspectorビューの一番下にあるAdd Componentをクリックします。
New Scriptを選択し、Nameは適当な名前に(自分はmmd_model_controllerと付けました。)、
LangageはJava Scriptを選択してCreate and Addをクリック
ScriptのコンポーネントができるのでScript中をダブルクリックします。
しばらく待つとMonoDebelopが起動すると思います。
なにやらよくわからない文字列が出てきましたね?はい、これからプログラムを書いていきます。
とは言ってもとりあえずは記述するプログラムを理解する必要ないので下記のように書いてみましょう。
プログラムは一文字間違えるだけで動作しなくなるので確認しながら進めましょう・・・
#pragma strict private var anim : Animator; function Start () { anim = GetComponent(Animator); } function Update () { var v : float; v = Input.GetAxis("Vertical"); anim.SetFloat("speed",v); }
プログラムを書き終えたら画面左上のFileからSaveを選択して保存しましょう。
保存が終わればMonoDebelopは必要ないので閉じてもらって構いません。
はい、これで設定が完了しました。実際に動かしてみましょう。
画面上部中央にあるスタートボタンをクリックすることでスタートします。
操作方法を一応説明しておきます。
上キーまたはWキーでキャラクターが歩く動作をします。
止まるとキャラクターがポーズ(待機姿勢)をとります
いかがでしたか?これでMMDのモデルをUnityで動かす事ができるようになりました。
今回は歩くモーションしか入れてないので実際には歩いているように見えて移動はしていません。
今後、他のモーションや移動なども入れていきたいと思います。
動かすだけなら他に紹介しているユニティちゃんのスプリクトを使って動かした方が簡単ですが、モデルの移動を学ぶにはいい勉強になったと思います。
自分の好きなキャラクターが自分の手で動かせるのって感激しますね。
MMDにはキャラクターのモデルがたくさんあるのに、Unityはモデルがなかなかないので、
これでMMDモデルのある好きなキャラクターでゲームを作れるようになると思います。
ただし、今回の紹介で使用したモデル(艦隊これくしょんの大鳳)ですが、モデルの製作者様が商用利用を禁止しており、
そもそも艦隊これくしょんの運営はゲーム性のあるものの二次創作・商用利用は認めていません。
外部にゲームとして利用できる状態で公開する際や商用利用したい際は著作権などを侵害しないようにしましょう。