こんにちは、カバゴトです!今回は、プレイヤーをWASDキーでアニメーション付きで移動させる方法について超初心者向け解説していきたいと思います!
今回の記事は下の記事続きとなっていますので、もし前回の内容がわからない方は下のほうに記事がありますので、参考にしてください!
上の記事では、再生ボタンをクリックすると、すぐに直進するアニメーションが再生されます。今回は、再生ボタンを押したときは停止し、WASDキーで前後左右に歩行するアニメーションを作っていきたいと思います。
停止するアニメーション
まずは、停止しているときのアニメーションを作成します。
Mixamoからダウンロード
引用元:mixamo
Mixamoは、Adobeが提供しているオンラインのアニメーションプラットフォームです。Mixamoを使用すると、3Dキャラクターに対してアニメーションを適用したり、リギング(骨格の設定)を行ったりすることができます。また、Mixamoはアニメーションのオンラインライブラリを提供しており、様々なアニメーションを簡単にキャラクターに適用することができます。さらに、Mixamoは無料で利用できる点も特徴の一つです。
使い方は簡単です!
まずはサインインしましょう!
検索ボックスでstandingと検索し、立っているアニメーションを探します。見つけたら右側の「DOWNLOAD」をクリックしましょう。
ダウンロードが完了したら、プロジェクトビューにドラッグ&ドロップします。
アニメーションの設定
先ほどドラッグ&ドロップをしたものを選択し、右側の「Rig」→「Humanoid」をクリックします。
クリックしたら、すぐ下の「Apply」をクリックしましょう。
次に、「Animation」をクリックし、「Loop Time」にチェックします。
クリックしたら、すぐ下の「Apply」をクリックしましょう。
アニメーターの設定
再生ボタンの少し左下のAnimatorビューを選択します。先ほど下のプロジェクトビューに入れた停止アニメーションの三角形の部分をクリックし、上の画像のようなアイコンをドラッグ&ドロップします。名前がmixamo_comとなっていると思うので「standing」に名前を変えておきましょう。
先ほど作った「standing」を右クリック→「Set as Layer Default State」の順にクリックします。
次に、「standing」と「walking」を右クリック→「Make Transition」の順にクリックします。矢印が出てくると思うので、交互に矢印をつなげましょう。
次に、「Parameters」→「+」をクリックし、出てきたものに「walk」と名前を付けましょう。
「standing」から「walking」の矢印をクリックし、Conditionsの「+」をクリックして上のように設定します。
同じように反対側の矢印も設定します。(これはConditionsをwalk→falseにしています)
スクリプト作成
「Assets」→「Create」→「C#Script」でスクリプトを作成します。私は名前を「controller」にします。
using UnityEngine;
public class controller : MonoBehaviour
{
private Animator animator; // アニメーターコンポーネントへの参照
public float rotationAngle = 90.0f; // プレイヤーが回転する角度
void Start()
{
// アニメーターコンポーネントを取得
animator = GetComponent<Animator>();
}
void Update()
{
// キー入力に応じてプレイヤーの回転とアニメーションを制御する
if (Input.GetKeyDown(KeyCode.W))
{
RotateAndAnimate(0f); // 上キーが押されたとき、プレイヤーを前方に回転させる
}
else if (Input.GetKeyDown(KeyCode.A))
{
RotateAndAnimate(-rotationAngle); // 左キーが押されたとき、プレイヤーを左に回転させる
}
else if (Input.GetKeyDown(KeyCode.S))
{
RotateAndAnimate(-180f); // 下キーが押されたとき、プレイヤーを後方に回転させる
}
else if (Input.GetKeyDown(KeyCode.D))
{
RotateAndAnimate(rotationAngle); // 右キーが押されたとき、プレイヤーを右に回転させる
}
// wasdキーが離された瞬間に歩行アニメーションを停止する
if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.D))
{
animator.SetBool("walk", false); // 歩行アニメーションを停止
}
}
// プレイヤーの回転と歩行アニメーションの制御
void RotateAndAnimate(float angle)
{
transform.rotation = Quaternion.Euler(0f, angle, 0f); // プレイヤーを指定された角度に回転させる
animator.SetBool("walk", true); // 歩行アニメーションを開始
}
}
上のコードがプレイヤーをwasdキーで制御し、アニメーション付きで移動させるスクリプトです。
コピペが完了したら、保存(Ctrl+s)しましょう。
アニメーターのstandingとwalkingを選択し、右側のSpeedを好きな値にしましょう。
実際に動かしてみる!
動きました!自分で作ってみたのですが少し動きが重かったです….
後日談
上の動きが遅い原因が分かりました。
この「Has Exit Time」にチェックがついており、これにチェックを入れるとアニメーションが終了してから次のアニメーションに移動するという意味となるそうです。今回はこのチェックを消しておきましょう。
終わりに
最後まで読んでくださりありがとうございます!今回は、プレイヤーをWASDキーでアニメーション付きで移動させる方法について解説しました。もし、うまくいない場合や意見等あればコメントの方をよろしくお願いします!
この記事が参考になれば幸いです。また、次回のブログでお会いしましょう!
コメント