unityでplayerのアニメーションを作ろう[FPS視点]

今回はplyaerの動きや視点移動を実装できたけど、動きを付けたいという方向けにunityのAnimationの使い方を詳しく画像付きで解説していきます。

完成目標

・止まってるときのゆっくりとした視点上下(Idle状態)

停止状態のAnimation作成

まず今回の状況は次の通りです。[Player]オブジェクトの下にCameraの追従先となる[CameraPoint]を付けています。全く同じような状況でなくても、カメラがplyaerの目線の位置にあるようなケースであれば大丈夫です。

1.動かしたいオブジェクトを選択した状態で、Windows→Animation→Animatorを選択します。するとAnimationが起動するので、NewCreateから名前をつけAnimationsフォルダーをAssets内に作成し保存します。(「Player_Idle」という名前にしました)

また、歩いているときの動きもつけたいため同じ流れで「Player_walk」も作成しました。

2.動きを記録していきます。開いたAnimationの録画ボタンを押します。

3.まずは0.1秒目の目盛りを選択し、ここでここでCameraの位置を0.05だけ下げます。(もともとのCameraの位置をY=1.7にしてました)

4.同様に0.3秒目の目盛を選択し、ここはCamerの位置を1.75に、そして0.4秒目の目盛りを選択し1.7にしました。これで以下のようにキーができているはずです。

0.0s→Y=1.7

0.1s→Y=1.65,

0.3s→Y=1.75

,0.4s→Y=1.7

tips

0sの時と終わりの時の状態が同じでないとカクカクした動きの原因になります。

5.キーをすべて選択し、右クリック

[Both Tangent]→[Liner]を選択します。滑らかになるはずです。これで息遣いをしてるような視点の上下ができました。

Animaionを適応させる

このままではゲームをスタートしても動きがつきません。これを動かすにはAnimatorを使っていきます。[Window]→[Animation]→[Animator]を開きます。ここでも先ほどAnimationを作ったオブジェクトを選択した状態でAnimatorを開くことを忘れないでください。

1.Animatorを開くと次のような画面がでます。ここで右クリックをしIlde→walkへ矢印を作成します。逆も作ります。ここの矢印を実行する条件を設定するためにParametersから[+]→[Floart]を選択し、「moveSpeed」を作成します。

2.Idle状態からwalk状態へは右下の[conditions]で設定できます。ここではmovespeedが1より小さいときに移行する。という設定にしました。

3.つぎにplayerにアタッチするコード内でこのparamator[moveSpeed]を設定する必要があります。

Set.Foalt(“moveSpeed”.これに入れたい数値)でanimatorのparamatorに数値をいれることができます。(赤文字参照)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerController1 : MonoBehaviour
{

    private Vector3 moveInput;


    public Animator anim;//これを忘れない様に。
 void Update()
    {
        //moveInput.x = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
        //moveInput.z = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;


        //store y velocity 
        float ystore = moveInput.y;

        Vector3 verMove = transform.forward * Input.GetAxis("Vertical");
        Vector3 horiMove = transform.right * Input.GetAxis("Horizontal");

        moveInput = horiMove + verMove;
        moveInput.Normalize();
        if (Input.GetKey(KeyCode.LeftShift))
        {
            moveInput = moveInput * runSpeed;
        }
        else 
        { 
        moveInput = moveInput * moveSpeed;
        }
        moveInput.y = ystore;
        moveInput.y += Physics.gravity.y * gravityModifier*Time.deltaTime;

      
        anim.SetFloat("moveSpeed", moveInput.magnitude);//設定したparametorと同じ名前に。animatorのFalotの値をmoveInput。(移動速度)
        //moveInputは灰色の部分で定義した移動速度。
    }
}

4.InspectorのAnimにすぐ下にある[Animator]をアッタチしてあげれば完成です。

コメント

タイトルとURLをコピーしました