見出し画像

【Unity】ジョイスティックの操作とアニメーションを同期させる

やりたい事

日ごろお世話になっているAssetStoreのJoyStickPackを使ってスマホゲームを製作中、JoyStickの値とプレイヤーのアニメーションを同期させようとおもいます。こちら使用しているJoystickのアセット↓

今回はこれをHorizon(水平方向)の動作に固定して作ります。
ちょっと何がしたいかよく分からないかもなのでいきなり完成品がこちらです。↓

Animatorの設定

今回の例で説明すると、左から右への動作をひとつのアニメーションにまとめておきます。1フレーム目が右に傾いて最終フレームが左に、という感じ。
ステートはいたって単純です。↓

Stepステートに一連の動作のアニメーションが入ってる

スクリプト

それではスクリプトを書いていきます。↓

using UnityEngine;

public class OjiController : MonoBehaviour
{
    [SerializeField] private Animator anim;

    //ジョイスティック
    [SerializeField] private FixedJoystick joystick;

    private float joystickMagnitude;

    void Start()
    {
        //最初にアニメーションスピードを0にして停止させる
        anim.speed=0;
    }

    void Update()
    {
        //ジョイスティックの値を0~1に変換する
        joystickMagnitude=(joystick.Horizontal+1f)/2;
        
        //変換された値をアニメーションの再生位置へ反映させる
        anim.Play(0,-1,joystickMagnitude);
    }
}

FixedJoystickを使用しているのでメンバーで宣言しておいてインスペクターでアタッチしておきます。

ポイントはここです。

joystickMagnitude=(joystick.Horizontal+1f)/2;

JoystickのHorizontalは‐1~1の値を返してきますが、anim.Play()メソッドの第3引数では再生位置の取得で0~1を指定する必要があります。

-1~1の値を相対的に0~1にする。どうやるんだ?と一瞬考えましたが簡単です。負の値にならないように1を足して、2で割ってやればOKです。

あとはその値をanim.Play()の第3引数にあててやるだけです。↓

anim.Play(0,-1,joystickMagnitude);

以上です!

この記事が気に入ったらサポートをしてみませんか?