Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity】2D Animation SpriteResolverで表情を変更する

Unity 2021.1.0f1 Personal(2021年4月)
f:id:hiyotama:20210406014407p:plain

前回の続きです!
今回はSprite Resolverという機能を使いアニメーション中にキャラクターの表情を変更します。

表情のレイヤーを用意する

前回まではpsbファイルに表情のレイヤーを用意していませんでした。
今回はface_normalface_funnyという表情レイヤーを用意します。

f:id:hiyotama:20210406013334p:plain
face_normal

f:id:hiyotama:20210406013352p:plain
face_funny

表情レイヤーを追加したpsbファイルをUnityに追加し、
Sprite Editor > Skinning Editorにて
メニューからBone Influenceを選択しSpriteをダブルクリックするとSpriteは選択できるので、各表情Spriteに共通のBoneを設定します。
Boneを設定したらその状態のままAuto GeometryにてGeometryも設定します。

f:id:hiyotama:20210406013937p:plain
face_normalにBoneを設定

f:id:hiyotama:20210406014232p:plain
face_funnyにBoneを設定

カテゴリーとラベルの設定

続いてSkinning Editor > Visibilityにて、face_normal・face_funnyのSpriteにカテゴリーとラベルを設定します。
カテゴリーは共通にしラベルを分けます。

f:id:hiyotama:20210406014407p:plain
カテゴリーとラベルを設定

設定できたらApplyボタンを押し編集を反映します。

Sprite Resolver

Hierarchyにて作成したキャラクターオブジェクトを確認すると、カテゴリー名のオブジェクトが生成されています。

f:id:hiyotama:20210406014730p:plain
「Face」というカテゴリーと同名のオブジェクト

Inspectorを確認するとSprite Resolverというコンポーネントが付いています。
Labelを変更すると表情が変わります。

f:id:hiyotama:20210406014922p:plain

Animator ControllerでSprite Resolverを制御する

Animator Controllerをレコードモードにした状態でSprite ResolverのLabelを変更するとアニメーションが記録されます。
しかしこの状態でアニメーションを実行してもまだ表情は変化しません。
各フレームにて右クリックし、Both Tangents > Constantに変更するとアニメーションするようになります。

f:id:hiyotama:20210406015516p:plain

f:id:hiyotama:20210406015749g:plain

無事表情を変更するアニメーションを実装することができました。

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オブジェクトを指定します。

f:id:hiyotama:20210406020847p:plain

uGUIのButtonを作成し、ChangeFaceメソッドを実行するよう設定します。

f:id:hiyotama:20210406021027p:plain
ButtonのOnClickにAnimController.ChangeFaceメソッドを指定

以上で準備完了です。

f:id:hiyotama:20210406021425g:plain

無事Scriptから表情を変更できました。


今回は以上になります。
ありがとうございました〜。