UnityでFPS視点のPlayerを作る方法

今回は、FPS視点のPlayerの動きを制御していきます。
どういことかと言うと、
・回転操作
・直進操作
を別々に制御するということです。

以前、CameraをPlayer視点に紐付ける方法を紹介しました。
これだけでは、FPS的な動きを制御することは出来ず、Playerの動きも制御して上げる必要があります。

PCで制御することを前提に、コードを紹介します。
矢印Keyを読み取る、x・ z 変数を用意します。
最終的にやりたいのは、
・xのとき(矢印キーでいう左右)は、Playerの向きをコントロール
・zのとき(矢印キーでいう上下)は、Playerの前進・後退をコントロール
するということです。

x = Input.GetAxisRaw("Horizontal");
z = Input.GetAxisRaw("Vertical");

(1):矢印キーの左右に対して、Playerの向きをコントロールする。

float x = Input.GetAxis("Horizontal");
transform.Rotate(0,x,0, Space.World);

以前、UnityのRotateについて記事を書いたのでご確認ください。
y軸を回転させることで、x軸・z軸との面に対して回転します。

(2): 矢印キーの上下に対して、Playerの向きを前進と後退を制御する

    float z = Input.GetAxis("Vertical");

矢印キーの上下インプットを取得します。
重要なことは、 矢印キーの上下に対してPlayerが向いている方向に対して前進・後退をする必要があります。
sin cos を用いて、velocityを制御していくことで実現させます。
幾つかのステップに分けて説明していきます。

(a):Playerの向いている角度をsin,cosのΘの変化に対応するように調整
(b): オイラー角度 → ラジアンへ変更
(c): velocityへx軸、z軸方向へ代入

(a):Playerの向いている角度をsin,cosのΘの変化に対応するように調整

float angleY = ((360 - transform.eulerAngles.y) + 90) % 360;

transform.eulerAngles.y でPlayerが向いているオイラー角度を出力します。
ここで確認したいことは、Playerが向いている角度と、角度の変化です。

sin cos を利用していきます。
高校の数学で学んだ、あれです。
右向きにx軸・上向きにy軸・反時計回りにΘが増加していく、あれです。

Unity上でのPlayerの向いている角度を  transform.eulerAngles.y で確認すると
時計回りに角度が増加していきます。
なので、ここを修正すると
360 - transform.eulerAngles.y //①
z軸の方角が角度が0になっており、x軸に対して角度を0に変えたいので
(360 - transform.eulerAngles.y) + 90)//②
ただ、これだと、90~450度の範囲内になるので
((360 - transform.eulerAngles.y) + 90) % 360//③

(b): オイラー角度 → ラジアンへ変更

    float radian = angleY * Mathf.Deg2Rad;

(c): velocityへx軸、z軸方向へ代入

float sin = Mathf.Sin(radian);     
float cos = Mathf.Cos(radian);     
rb.velocity = new Vector3(cos, 0, sin);

これで、向いてる角度に前進、後退をするPlayerができます。

コメントを残す

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