[unity3D]TPSカメラの方向を基に移動操作する超シンプルなコード例を紹介!!

TPSのキャラ移動操作をプログラミングする時、もっとシンプルに分かりやすく書けないかなと思い、色々試行錯誤してみました

その経験を皆さんと共有できれば思い、この記事を書くことにしました

ちなみに、使用しているUnityのバージョンは「2022.3.24f1」です

コード例

using UnityEngine;

public class PlayerController2 : MonoBehaviour
{
    protected float speed = 0.1f//移動速度

    void Start()
    {
    }


    //angleは移動方向を度数で指定
    //moveAmountは移動量。
    void Run(float anglefloat moveAmount)
    {
        //カメラ向きの角度取得
        Vector3 cameraAngle = Camera.main.transform.localEulerAngles;
        
        //カメラの向きを基準に、プライヤーの向きを引数angle分回転
        transform.localEulerAngles = new Vector3(0cameraAngle.y + angle0);

        //プレイヤーの向いてる方向に引数moveAmmountだけ移動
        transform.Translate(00moveAmount);
    }


    void Update()
    {
        //押されたキー取得
        bool w = Input.GetKey(KeyCode.W);
        bool a = Input.GetKey(KeyCode.A);
        bool s = Input.GetKey(KeyCode.S);
        bool d = Input.GetKey(KeyCode.D);

        //押されたキーに応じた方向に移動
        if (w && dRun(45speed); //右上
        else if (w && aRun(-45speed); //左上
        else if (s && dRun(135speed); //右下
        else if (s && aRun(-135speed); //左下
        else if (wRun(0speed); //上
        else if (sRun(180speed); //下
        else if (aRun(-90speed); //左
        else if (dRun(90speed); //右
    }
}

以上のコードを記述した「PlayerController.cs」ファイルを作り、操作したいキャラに追加すると以下のようになります

解説

Update関数

1. 押されたキーを取得

2. 押されたキーに応じて、run関数の引数にわたす値を変える

以上がUpdate関数でやっていることです

Run関数

コメントに書いてある通り

1. カメラ向きの角度取得

2. カメラの向きを基準に、プレイヤーの向きを引数angle分回転

3. プレイヤーの向いてる方向に引数moveAmmountだけ移動

という処理が書いてあります

以上がRun関数でやっていることです

まとめ

いかがだったでしょうか?

この記事が皆さんのお役に立てたら嬉しいです

ではまた!

次の記事

準備中