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