プレイヤーが向いている方向に移動する

前回のUnityでオブジェクトを操作する | それとこれとあれかどれかと (andandor.com)では、向きに関係のない移動を行いました。今回はカメラやプレイヤーの向いている方向に移動する処理を作っていこうと思います。

プレイヤーが向いている向きに移動させるもっとも簡単な方法の一つが、正面方向の単位ベクトルを用いる方法です。今回はこの方法でプレイヤーを前に進む処理を作っていきます。

移動させるスクリプトを作る

移動させるスクリプトを作っていきます。今回は、最初にそのスクリプトを提示しようと思います。

プレイヤーを移動させるスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Article004PlayerScript : MonoBehaviour
{
Rigidbody playerRigidbody;
Transform playerTransform;
// Start is called before the first frame update
void Start()
{
playerRigidbody = this.GetComponent();
playerTransform = this.GetComponent();
}

private void FixedUpdate()
{
playerRigidbody.MoveRotation(playerRigidbody.rotation * Quaternion.Euler(0, Input.GetAxis(“Horizontal”) * 3.0f, 0));
playerRigidbody.velocity = new Vector3(0, playerRigidbody.velocity.y , 0) + playerTransform.forward * Input.GetAxis(“Vertical”) * (-3.0f);
}
}

画像の8,9行目では、必要なコンポーネントをFixedUpdate()関数で毎回GetComponentしなくてもよいように、あらかじめ変数を定義しておき、Start()であらかじめ用意しておいた変数に簡単にアクセスするための準備をしています。

ここまでは、この記事の本質的な内容ではなくて、必須ではないですが基本的に、GetComponentは、Startでやっておいたほうが良いでしょう。

画像の19行目の処理は、プレイヤーを回転させて正面方向を変更するための処理です。これによってプレイヤーは前後移動だけで目的の場所にたどり着けるようになります。ゲーム性によっては、カニ歩きができる必要がある場合もありますが、一つの移動の考え方ということです。

20行目が正面方向への移動です。new Vector3(0, playerRigidbody.velocity.y , 0) + は、落下速度をそのまま適用することができるように上下方向の速度を上書きする処理です。正面に進むだけなら、playerTransform.forwardに速さをかけてあげればそれだけで正面方向に勧めるようになります。

(-3.0f)は速度を少し早くするのと、プレハブのプレイヤーを手前側を向いている形で作ってしまっていたので、をかけております。プレハブのプレイヤー自体を回転させてしまってもよいです。オブジェクトに作成したスクリプトをアタッチすれば、きちんと動くようになるでしょう。

ついでにカメラを追加する

プレイヤーがうまく動くようになりましたので、ついでにプレイヤーを追尾するカメラを追加してしまいましょう。

やり方は簡単で、プレイヤーの体や目のあるのと同じ階層にカメラを追加するだけです。プレイヤーの中にカメラを入れてしまえば、プレイヤーの移動に合わせてカメラも動いてくれます。ただし、プレイヤーの全体を移すようにカメラの位置は調整しましょう。

終わりに

プレイヤー移動の基礎の基礎だけを解説していきました。プレイヤーの移動は数学なので、数学を理解すればよりキャラクターを自由自在に動かせるようになるでしょう。ただ、わかっている範囲で作っていけば、いずれ理解できる時も来ると思うので、とにかく数学なんて考えずに、どんどん作っていくのも数学をうまく扱えるようになるための一つの方法だと思っています。ゲーム制作で数学を避けることはできませんが、詳しい理論を知るのは後でもいいのでとりあえずいろいろと作っていくことをお勧めします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA