ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

Unityで魔理沙を動かす(Animator)

諸事情により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」も作る。

ちなみに↓のような画面(遷移状態は適当)。

 

f:id:takeg:20140810192712p:plain

左下に「Parameters」ってのがあるから「+」をクリックしてパラメーターを追加、「Bool」を選択する。名前を「isWalking」にする。これは歩かせたりするときの条件分岐に使ったりパラメータ。今回はBool値で管理します。他にもint型やfloat型があるので、お好みで。ちなみに「-」でパラメータを消せる。

ステイトは右クリックの「Set As Default」でデフォルトを変えられる。「Marisa@Idle」をデフォルトする。

「MakeTransform」で状態遷移を追加できる。アイドル状態から歩かせたり、歩いている状態からアイドルにさせるので、双方向に矢印を追加する。

  • ステイトの遷移条件の設定

矢印をクリックすると、InspectorビューのConditionsで状態遷移の遷移条件を設定できる。isWalkingがtrueになったら歩くモーションをして欲しいので、「Marisa@Idle→Marisa@Walk」の矢印をクリック、isWalkingをTrueにする。

だいたいこんな感じ。

 

Hierarchyに動かしたいキャラクターを追加した状態で(今回は魔理沙)、そのキャラにAnimatorコンポーネントを追加する。

Controllerに先ほど作ったAnimator Controllerを、Avatarに動かすキャラクターのアバターを張り付けます。

こんな感じになってます。

f:id:takeg:20140810193709p:plain

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);

}

このような感じでアニメーションのパラメータ管理ができます。当然スクリプトはキャラクターに貼り付ける。

 

  • おわり

あとなにか細かいことをした気がするが、申し訳ないが忘れてしまった。