諸事情によりMMDのキャラクターをUnityで動かさなくてはならない。かなり苦戦したのでメモを残す。
- 前提
MMD for Unityでミクさんとケロリン町を周るお話 その1をひと通り終わらせていること。上記リンク先は初音ミクだが、私は東方キャラクターの魔理沙を動かすことにします。
- 確認
・魔理沙はfbxになっているか
・RigはHumanoidになっているか
あとは忘れた。
- Animator Controllerの作成。
とりあえず魔理沙を走らせてみる。
Projectビューを右クリックしてAnimator Contorollerを作成。
「右クリック>Create State>Empty」で空のステイトを作成。Inspectorビューで名前を変更。「Marisa@Walk」にする。
「Motion」にアニメーションをセットする。突然だけどAssetsに「Locomotion Setup/Locomotion/Animations」にたくさんアニメーションがあるでしょ。
Locomotionてなんだよ。
たぶんここを参照してダウンロードしたと思うんですけど(うろ覚え)。
とにかくその中に「Walk」ってアニメーションファイルを「Motion」にセットする。
同様にして「Marisa@Idle」も作る。
ちなみに↓のような画面(遷移状態は適当)。
左下に「Parameters」ってのがあるから「+」をクリックしてパラメーターを追加、「Bool」を選択する。名前を「isWalking」にする。これは歩かせたりするときの条件分岐に使ったりパラメータ。今回はBool値で管理します。他にもint型やfloat型があるので、お好みで。ちなみに「-」でパラメータを消せる。
ステイトは右クリックの「Set As Default」でデフォルトを変えられる。「Marisa@Idle」をデフォルトする。
「MakeTransform」で状態遷移を追加できる。アイドル状態から歩かせたり、歩いている状態からアイドルにさせるので、双方向に矢印を追加する。
- ステイトの遷移条件の設定
矢印をクリックすると、InspectorビューのConditionsで状態遷移の遷移条件を設定できる。isWalkingがtrueになったら歩くモーションをして欲しいので、「Marisa@Idle→Marisa@Walk」の矢印をクリック、isWalkingをTrueにする。
だいたいこんな感じ。
- 「Animator」コンポーネントの追加
Hierarchyに動かしたいキャラクターを追加した状態で(今回は魔理沙)、そのキャラにAnimatorコンポーネントを追加する。
Controllerに先ほど作ったAnimator Controllerを、Avatarに動かすキャラクターのアバターを張り付けます。
こんな感じになってます。
Apply Root Motionのチェックはここでは外して置いてください。理由は僕にもわかりません。
- スクリプトを書く。
最小のスクリプトだけ載せる。
private Animator animator;
void Start(){
animator = GetComponent<Animator>();
}
void Update(){
if(Input.GetButton("Horizontal") || Input.GetButton("Vertical")){
animator.SetBool("isWalking",true);
}
else{
animator.SetBool("isWalking",false);
}
このような感じでアニメーションのパラメータ管理ができます。当然スクリプトはキャラクターに貼り付ける。
- おわり
あとなにか細かいことをした気がするが、申し訳ないが忘れてしまった。