MMD4Mecanimの表情をUnityのMecanimで制御する | Unity3D
MMD4Mecanimモデルの表情をUnityのMecanim機能で制御できるようになるアセット「MMD4MecanimFaciemForMecanim」です。Mecanimで制御できるという事はBlendTreeを利用できるという事なので、たとえば「笑っている表情」と「怒っている表情」をfloat値によってブレンド出来るようになります。
必要なもの
- MMD4Mecanim
- MMD4MecanimFaciem (最新版を使用してください)
- MMD4MecanimFaciemForMecanim (本アセット)
ダウンロード(Beta版)
MMD4MecanimFaciemForMecanim
(2015/11/29 リンク先を変更しました)
コンポーネントの説明
FaciemForMecanimコンポーネント
MMD4Mecanimモデルにアタッチして使用します。
■Use Official Morph Helper
チェックするとMMD4MecanimのMorpHelperを介して表情を制御します。デフォルトはオフでMorpHelperを使用せず、FaciemForMecanim内部からモデルのモーフを直接制御します。
■Override Weight
MMD4MecanimのMorpHelperのOverride Weightと同様の機能です。
■(Re)Create Object For Animation ボタン
表情オブジェクトを作成します。
Weightコンポーネント
FaciemForMecanimの"(Re)Create Object For Animation"ボタンで作成される表情オブジェクトに最初からアタッチされています。
■Weight
表情のWeight値です。最小値は0で表情が反映されません。最大値は1です。
■Create AnimationClip File ボタン
Weightがプロパティとして設定されたAnimationClipファイルをAssets配下に作成します。設定されるWeight値は1です。
使い方 (How to)
- MMD4Mecanimで作成したモデルをHierarchyに配置します。
- 配置したモデルにFaciemDatabaseコンポーネントとFaciemForMecanimコンポーネントをアタッチしてください。
- MMD4MecanimModelのMorphタブからMorph値を変更して表情を作成し、FaciemDatabaseで表情を保存してください。(下記画像では"にっこり"と"おこ"の2つの表情を作成)
- FaciemForMecanimの"(Re)Create Object For Animation"ボタンを押してください。するとモデルの1階層下にFaciemオブジェクトが追加され、さらにその下には表情名のオブジェクトが作成されます。
- 作成された表情名のオブジェクトにはWeightスクリプトがアタッチされていて、そのスクリプトにはValueが設定できるようになっています。
- この時点で試しにシーンを再生し、WeightスクリプトのValue値を0以上に変更してみてください。値が1に近づくにつれ表情が変わることが確認できると思います。また、複数の表情オブジェクトのWeightスクリプトのValue値に0以上の値を設定すると、その値に従い表情がブレンドされます。確認ができたらシーンを停止してください。
- つまり、このValue値をAnimationClipで動かしてやれば表情が変わるわけです。AnimationClipで表情を変更できるということは、Mecanimでの表情ブレンドが可能ということです。
- 表情オブジェクトにアタッチされたWeightコンポーネントの"Create AnimationClip File"ボタンでAnimationClipファイルが作成できます。Assets配下に作成されます。
ただAnimatorの設定にコツがいりますので、それについて以下に記述します。Animatorには表情制御用のレイヤーが必要になります。またそのレイヤーは最上部に位置する必要があります。こんな感じ。(ここではFaceレイヤーとしました)元からあったBase LayerのWeight値が0になってたりする場合があるので、1であることを確認してください。2つのレイヤー共にBlendingは「Override」でOK。- (2015.09.20 追記)Animatorでの表情の制御に関するレイヤー分けと設定については、ユニティちゃんアセットに付属しているシーン"ActionCheck"のAnimatorのように、AvatarMaskを使用するのが正しい作法な気がします。
以上です。あとはBlendTreeなどで表情のブレンドなどを行ってみてください。
補足説明
- 表情のモーフ値変更は表情オブジェクトの再作成を必要としません。
- 表情を追加、削除した場合は"(Re)Create Object For Animation"ボタンで表情オブジェクトを再作成してください。
- 表情名の変更をした後に"(Re)Create Object For Animation"を実行しても既に作成された表情オブジェクトの名前は変わりません。これはAnimationClipとのリンク切れを防ぐためです。AnimationClipとリンクが切れるのを覚悟の上で名前を変更したい場合は、該当の表情オブジェクトを手動で削除した後に"(Re)Create Object For Animation"を実行してください。
- 同一名称の表情オブジェクトが複数存在しても正しく動作します。内部的にはGUIDで管理しているためです。
- Mecanimにおける表情制御では、FaciemDatabaseで設定したSpeed値は全く影響を及ぼしません。
- 同様にMecanimにおける表情制御では、FaciemDatabaseでのDefault表情指定は影響を及ぼしません。
制限事項
- FaciemController及びFaciemBlinkとの併用はできません。(エラーにはなりませんが、Controller及びBlinkは動作しません)