【Unity】2D Animation SpriteResolverで表情を変更する
Unity 2021.1.0f1 Personal(2021年4月)
前回の続きです!
今回はSprite Resolverという機能を使いアニメーション中にキャラクターの表情を変更します。
表情のレイヤーを用意する
前回まではpsbファイルに表情のレイヤーを用意していませんでした。
今回はface_normalとface_funnyという表情レイヤーを用意します。
face_normal
face_funny
表情レイヤーを追加したpsbファイルをUnityに追加し、
Sprite Editor > Skinning Editorにて
メニューからBone Influenceを選択しSpriteをダブルクリックするとSpriteは選択できるので、各表情Spriteに共通のBoneを設定します。
Boneを設定したらその状態のままAuto GeometryにてGeometryも設定します。
face_normalにBoneを設定
face_funnyにBoneを設定
カテゴリーとラベルの設定
続いてSkinning Editor > Visibilityにて、face_normal・face_funnyのSpriteにカテゴリーとラベルを設定します。
カテゴリーは共通にしラベルを分けます。
カテゴリーとラベルを設定
設定できたらApplyボタンを押し編集を反映します。
Sprite Resolver
Hierarchyにて作成したキャラクターオブジェクトを確認すると、カテゴリー名のオブジェクトが生成されています。
「Face」というカテゴリーと同名のオブジェクト
Inspectorを確認するとSprite Resolverというコンポーネントが付いています。
Labelを変更すると表情が変わります。
Animator ControllerでSprite Resolverを制御する
Animator Controllerをレコードモードにした状態でSprite ResolverのLabelを変更するとアニメーションが記録されます。
しかしこの状態でアニメーションを実行してもまだ表情は変化しません。
各フレームにて右クリックし、Both Tangents > Constantに変更するとアニメーションするようになります。
無事表情を変更するアニメーションを実装することができました。
ScriptからSprite Resolverを制御する
ScriptからSprite Resolverを制御することもできます。
まずは以下のScriptを作成し適当なオブジェクトに取り付けます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Experimental.U2D.Animation; public class AnimController : MonoBehaviour { [SerializeField] SpriteResolver resolver; public void ChangeFace() { switch (resolver.GetLabel()) { case "funny": resolver.SetCategoryAndLabel("Face", "normal"); break; case "normal": resolver.SetCategoryAndLabel("Face", "funny"); break; } } }
AnimController.cs
Sprite ResolverをScriptから呼び出すには
using UnityEngine.Experimental.U2D.Animation;
が必要です。
Inspectorに表示されるSpriteResolverにFaceオブジェクトを指定します。
uGUIのButtonを作成し、ChangeFaceメソッドを実行するよう設定します。
ButtonのOnClickにAnimController.ChangeFaceメソッドを指定
以上で準備完了です。
無事Scriptから表情を変更できました。
今回は以上になります。
ありがとうございました〜。