今回は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
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]をアッタチしてあげれば完成です。
コメント