3Dゲームなどで、プレイヤーにまずは真っすぐにアニメ付きで歩いてもらう方法を紹介します。
イメージ

今回使っているアセットは、「Free Voxel Girl」という無料アセットですが、基本は一緒なので色々なアセットに応用がきくと思います。
シーンを準備する
とりあえずこんなシーンを作りました。(Terrainを使わずともPlaneなどで床を作ってもOKです)

プレイヤーにしたいキャラをドラッグ&ドロップで配置します。
Free Voxel Girlアセットの場合、フォルダ内にあるどの女の子キャラでもOKです。

シーンに配置したキャラの名前が〇〇〇Prefabなどと分かりにくいので、名前を「Player」に変更しておきます。

プレイヤーに歩くアニメを設定する
まずはアニメーション部分だけ設定します。
Assetsウインドウの何もない所で、右クリック > Create > Animator Controller を選択。

名前を「PlayerAnimation」とします。

キャラクタのアセットには大抵「歩く」とか「ジャンプ」「アイドル」(何もしない状態)などのアニメーションが同胞されています。
Free Voxel Girlにも「歩く」アニメーションが入っていますので、これを利用します。
アニメーションの設定について基本を知りたい方は以下をご覧ください。
PlayerAnimationをダブルクリックしてAnimatorタブを開きます。
Animatorタブで 右クリック > Create State > Empty を選択。

Inspectorタブで名前をWalkに変更します。

Motion項目の◎をクリック。

表示されたSelect Motionウインドウから「FreeVoxelGirl-walk」を選択してダブルクリック。

作成できたPlayerAnimationをHierarchyウインドウのPlayerにドラッグ&ドロップしてアタッチします。

うまくアタッチできれば、PlayerのInspectorウインドウのAnimator>Controller項目にPlayerAnimationが設定されているはずです。

これで「歩く」アニメが設定されました。
シーンに実行時の視点を合わせて(分からない方は→こちら)から、一度実行確認します。

プレイヤーを前に進ませる
歩いているアニメーションが設定できたので、あとはプレイヤーを前に進ませればそれらしく見えるはずです。
地面との当たり判定を設定しておく
プレイヤーのY座標が変化しないのであれば、問題ないですが、地形の起伏にそって移動させるには当たり判定が必須です。
プレイヤーにRigidbodyを追加します。
Playerが選択されている状態で、InspectorウインドウのAdd Componentボタンをクリックします。

Phisics > Rigidbody を追加します。

Rigidbodyが追加されたら、InspectorウインドウでConstraintsを開き、Freeze Rotation項目のXYZを全てチェックしてください。(これはキャラが変な方向に回転しないための設定です)

当たり判定のコライダーを追加します。
PlayerのAdd Componentボタンから Physics > Capsule Collider を追加します。

下の画像のようにコライダー(緑の枠線)がキャラとずれていたりする場合があります。

FreeVoxelGirlのキャラの場合、InspectorウインドウのCapsule ColliderのCenter項目のYの値を0.5とすればキャラサイズと一致します。(Heightは1のままで大丈夫です)

この時点で実行しても先ほどと同じでムーンウォーク(?)するだけです。
プレイヤーを前に進ませるイメージ
プレイヤーを前に進ませるには、プレイヤーの現在位置(transform.position)の値をキャラの進行方向(transform.forward)に向かって増分することになります。
C#スクリプトで表すとこんな感じです。
// 前に移動する
transform.position += transform.forward * speed * Time.deltaTime;
transform.positionが現在位置、transform.forwardが向いている方向へのベクトル、上記変数speedは、進む速さです。実際には5.0などの実数型の値が入ります。
C#スクリプトを作ってプレイヤーを前に進ませる
では、実際にスクリプトを作っていきます。
Assetsウインドウで 右クリック > Create > C# Script を選択。

名前をPlayerControlとします。

PlayerControlをダブルクリックして、VisualStudioを起動し、以下スクリプトのハイライト部分を入力してください。
PlayerControl
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControl : MonoBehaviour
{
// 移動スピード
public float speed;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// 前に移動する
transform.position += transform.forward * speed * Time.deltaTime;
}
}
作成したPlayerControlをHierarchyウインドウのPlayerにアタッチします。

アタッチ後、InspectorウインドウのSpeed項目に1を入力します。

実行してプレイヤーがゆっくりと前に歩けば成功です。

アニメと歩く速度の調整
アニメーションに合わせて歩く速度を調整してみます。
試しに早歩きっぽくしてみます。
PlayerAnimationをダブルクリックしてAnimatorを開きます。
Walkを選択するとSpeedという項目があります。これがアニメーションスピードです。3にしてみます。

次に実際に移動する速度です。
HierarchyウインドウのPlayerを選択して、InspectorウインドウにあるPlayerControlのSpeedを2とします。

実行してみます。

早歩きっぽくなったでしょうか?
思ったような歩きになるように調整してみてください。
以上、プレイヤーにまずは真っすぐにアニメ付きで歩いてもらう方法でした。
コメント