[Unity] Mecanimを使ってユニティちゃんを動かしてみた、で出た疑問点を解消していく

前回の記事で足跡を付けるためにユニティちゃんを動かしてたのですが、「第 1 回・Unity / Mecanimでユニティちゃんを歩かせる」をそのまま使わせていただきました。

Unityを使うからにはやっぱり3Dモデルを自由自在にアニメーションさせたい!と思い勉強することにしました。この記事ではUnity4で追加されたMecanimを使ってユニティちゃんを動かしていく過程で、疑問に思った点、うまくいかなかった点、などをメモしていきます。

 

 

 

環境

Unity 5.0.1f1

 

参考サイト

第 1 回・Unity / Mecanimでユニティちゃんを歩かせる

 

ユニティちゃんのAnimation Type

Mecanim関係でよく目にするのがAnimation Typeの種類の話。無勉強だとGenericとHumanoidの違いがわからず。

Mecanim におけるジェネリックアニメーション(公式ドキュメント) や ヒューマノイドアニメーションでの作業(公式ドキュメント) を読むと

ヒューマノイドモデルは、人体の主要なパーツ(胴体、頭、手足)が関節で結合された、同じ基本構造を持つことが期待されます。

と記述があります。要はモデルデータとモーションデータを同じHumanoidタイプにしておけば、構造が同じなのでモーションをモデルに使うことができると理解しました。

mecanim_animation_type_humanoid

Mecanim により解釈されるシンプル化したヒューマノイドボーン構造と、スケルトンの中に表現される実際のボーンとの間の、マッピングを構築することです。Mecanim の用語では、このマッピングのことを Avatar (アバター)と呼びます。

さらにAvatorとは?と思っていた疑問点もここで解消。すっきり。

 

Animatorウィンドウのスクロール方法

数分悩んだ・・・。Animatorウィンドウにはスクロールバーが付いていません。画面内の表示をスクロールする方法は「マウスの中ボタンドラッグ」でした。

 

Animatorへパラメーターを追加

Unity5になってパラメータを追加する場所が変わったようです。

mecanim_add_parameter

Unity4.6の時は左下にParameters入力欄があったと思いますが、Unity5ではParametersタブとしてされて左上にありました。細かいことですがプラスボタン左側のエディットボックスは検索です。プラスボタンを押し、パラメーターを追加してから名前を付けるようです。ちょっと検索欄が紛らわしい。

 

Any Stateとは

アニメーションステート(公式ドキュメント) によると

現在どのステートにいるかに影響を受けることなく、特定のステートに遷移したい場合のために存在している。

とのこと。

例えば、Idleステート、Walkステートがあり、どちらの状態からもKickステートに遷移可能な場合、Any StateからKickステートにMake Transitionをすると、どのステート状態になっていようが条件さえ満たせばKickステートに遷移することができる。

mecanim_any_state

これでWalk中でもKick出来る。

 

ファイティングユニティちゃんアセットを使った時の作業

Mecanimでアニメーションを勉強しようと思っていたところに、タイミングよくこのキャンペーン。

早速使ってみました。上のほうでも書きましたが、モデルとモーションのAnimation Typeを同じにする必要がありそうです。【コラボ企画】「ファイティング ユニティちゃん」モーションパックで、ファイティングプロ生ちゃん! #unity3dにもあるようにAnimation Typeを更新しましょう。

mecanim_motion_humanoid

おー、動いた。

mecanim_kick

 

キックに音を付けてみる

キックに合わせて音を再生するには何をすればよいか調べてみました。キックを行うアニメーションと同時にキック音を再生にするにはState Machine Behaviour(公式ドキュメント)が使えそうです。

キック音再生用のスクリプトを作成してみました。

using UnityEngine;
using System.Collections;

public class AttackKickStateMachine : StateMachineBehaviour
{
  public AudioClip NormalKick;
  override public void OnStateEnter( Animator animator, AnimatorStateInfo stateInfo, int layerIndex )
  {
    AudioSource.PlayClipAtPoint(NormalKick, animator.gameObject.transform.position);
  }
}

このファイルを作成した後、Animator上にあるKickステートを選択。Add Behaviourボタンを押すと作成したスクリプトがリストに表示されるので選択。そのスクリプトはキック音のAudio Clipが必要なのでセット。

mecanim_state_machine_behaviour

実行してみるとKickステートになった時に音が鳴っています。これがState Machine Behaviourの一番簡単な使い方だと思われます。

ヘルプにも書いてありますが具体例は

  • ステートに入った、または出た時に音声を再生する
  • 一定のテスト(例:地面判定)を、適切なステートでのみ実行する
  • 特定のステートに関連している特別なエフェクトを有効化、管理する

いろいろと出来そうですね。

ちなみに State Machine Behaviour は Unity5.0の新しいアニメーション機能 によるとUnity5からの機能っぽいです。似たような名前で State Machine Transitions というのもあるのですがドキュメントがまだ英語だ!この機能はパスだな!(笑) という感じで、手をつけていません。

キック音は On-Jin ~音人~ さんの効果音を使いました。シュッ!

 

ユニティちゃんのアニメーションデータプレビュー

自分の環境だと./UnityChan/Animations の中身をプレビューすると顔だけの表示になってしまうのだけど・・・。何か設定ミスってるのかな・・・?

mecanim_unitychan_ques

プレビューしてもどんなモーションかわからず・・・。

 

ユニティちゃんライセンス

ユニティちゃんライセンス

このコンテンツは、『ユニティちゃんライセンス』で提供されています


希木小鳥

Diablo1でハクスラの世界に。今はBorderlands2をプレイ中。ぬるゲーマー。

あわせて読みたい