【UnityC#講座】ユニティちゃんの表情を替える【SetLayerWeight】



【Unityアセットストア公式】初購入特別キャンペーン

期間:日本時間 10月31日 17:00時まで
対象:アセットストアで初購入のユーザー限定
詳細:Unityアセットストアで初めてアセットを購入いただく方限定、アセット全品20%OFF


◆◆◆◆


Unity2018.1.5f1
Windows10

ユニティちゃん表情/トップ

今回はユニティちゃんアセットに付属している表情のアニメーションを使ってみました。

■まずアセットのサンプルを見てみる

FaceUpdateを見てみる

ユニティちゃんアセットには以下の3つのSceneがあります。

・ActionCheck
・ARPoseTest
・Locomotion

それらで表情を替えるのは全て「FaceUpdate」スクリプトが使われています。

Project > UnityChan > Scripts > FaceUpdate

その中を見て気になるのはこちらの関数です。

Animator.SetLayerWeight

public void SetLayerWeight(int layerIndex, float weight);

どうもlayerIndexがAnimatorControllerのレイヤーの数で、weightがレイヤーに寄せる比重の数値のようです。
FaceUpdateではマウス左クリックを押している時は表情は替わり、話すとweightが1から0に向かっていくようになっています。

ユニティちゃん表情/FaceUpdate/配列

そしてこのようにInspectorから配列に表情のアニメーションを登録しています。

AnimatorControllerを見る

次に付属のAnimatorControllerを見るのですが、3つともFaceレイヤーがあり、その中に乱雑にStateが置かれています。

ユニティちゃん表情/AnimatorControlle/サンプル

Faceレイヤーの歯車マークをクリックするとこのような画面が出ます。

ユニティちゃん表情/AnimatorControlle/歯車マーク

Maskの「face only mask」はアニメーションを顔だけに出すものです。
BlendingのOverrideはアニメーションを上書きします。
Syncにチェックを入れるとBase Layerと同期し、同じStateで別のアニメーションを入れられます。

ユニティちゃんの表情の種類

Project > UnityChan > FaceAnimation

こちらに12種類あります。

■疑問を確かめる

Q.なぜFaceUpdateのInspectorとAnimatorControllerの両方に表情のアニメーションを入れているの?

スクリプトのInspectorにアニメーションを登録しておけばAnimatorControllerにはいらないのではないかと思いました。
でも試してみると表情は替わりません。
スクリプトで指示するためにスクリプトに設置し、AnimatorControllerでアニメーションを実行するということでしょうか。

Q.Maskにface only mask入れないとどうなるの?

試してみたら入れなくても表情出ました。
もっと色んなアニメーションやレイヤーと併用すると大事になるのかもしれません。
あるいは入れておかないとより下のレイヤーのアニメーションが表に出るということでしょうか。

Q.SetLayerWeight(int layerIndex, float weight)のweightを減らすとどうなるの?

weightの値によって表情の変わり具合が変わります。

weight = 1f

ユニティちゃん表情/SetLayerWeight/1

weight = 0.7f

ユニティちゃん表情/SetLayerWeight/0.7f

weight = 0.5f

ユニティちゃん表情/SetLayerWeight/0.5f

weight = 0.3f

ユニティちゃん表情/SetLayerWeight/0.3f

そしてweight = 0fだといつものユニティちゃんの表情になります。

ユニティちゃん表情/SetLayerWeight/0f

スポンサーリンク

■ユニティちゃんに表情とポーズをつける

スクリプトを書く

さて今度は試しに表情とポーズを同時に替えてみます。
まずユニティちゃんを出してください。

Project > UnityChan > Models > unitychan

次にスクリプトを書きます。

Project > Create > C# Script

次は表情とポーズを同時に出すスクリプトを書きます。
名前は「FaceAndBody」です。

AnimatorControllerを設定する

Project > Create > Animator Controller

次はAnimatorControlleに表情とポーズのアニメーションをセットします。
名前は「FBAnime」です。

ユニティちゃん表情/AnimatorController/Faceレイヤー作る

まずはLayersをクリックし、目のマークの下にある+マークをクリックします。
そして「Face」と入力してクリックでFaceレイヤーができます。
そして使いたい表情を適当にドラッグ&ドロップしましょう。

Project > UnityChan > FaceAnimation

ユニティちゃん表情/AnimatorController/Faceレイヤーにセット

次はポーズをセットします。

Project > UnityChan > Animations

ユニティちゃん表情/アセット/ポーズアニメ

そこのunitychan_ARpose1とunitychan_ARpose2の三角マークをクリックすると開いてPoseアニメーションが出てきます。
それを適当に5つ選んで今度はBase Layerに放り込みましょう。

ユニティちゃん表情/AnimatorController/Base Layerにセット

Inspectorを設定する

FaceAndBodyとFBAnimeをそれぞれユニティちゃんにセットします。

ユニティちゃん表情/Animator

次にFaceAnimeとBodyAnimeのSizeを5にしてクリック。
出てきた欄に表情とポーズのアニメーションをそれぞれセットします。
AnimatorControlleにセットしたのと同じものでないと機能しません。

ユニティちゃん表情/FaceAndBody/Inspector

さてこれで無事動いたでしょうか?
WASDZキーで操作します。

ユニティちゃん表情/ポーズと表情変更

今回はこれで終わりです。
お疲れさまでした。

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

この作品はユニティちゃんライセンス条項の元に提供されています

■関連記事

【UnityC#講座】ユニティちゃんでもっとAnimator Controllerを上手く使いたい

【UnityC#講座】3D人型モデルを三人称視点で動かす【ユニティちゃん】

【UnityC#講座】AnimatorControllerを使いまわす【AnimatorOverrideController】

【UnityC#講座】AnimatorControllerの使い方

【UnityC#講座】ユニティちゃんたちをドラクエっぽく一列に移動や順番変更させる【List、for文、NavMeshAgent】

スポンサーリンク

目次に戻る


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください