Unity FPSゲームやバイオで見るようなカメラとラジコン操作
あいさつ
どうも、はかせです。
今日は趣味のDirectX12ではなく
誘われたプロジェクトの作業してました。
今回はその中で実装してみた
簡単にできるFPSとかバイオで見る感じのラジコン操作を
紹介します。
カメラ移動
今回はFPSカメラということでマウスの動きに応じて
カメラを回転させます。
using UnityEngine; public class MouseCamera : MonoBehaviour { public Transform YAxis; public Transform XAxis; public float XSpeed = 1.0f; public float YSpeed = 1.0f; private void Start() { //マウスカーソル消したければこのコメントアウトを外す //Cursor.lockState = CursorLockMode.Locked; //Cursor.visible = false; } // Update is called once per frame void Update() { float xRotation= Input.GetAxis("Mouse X") * XSpeed; float yRotation= Input.GetAxis("Mouse Y") * YSpeed; YAxis.transform.Rotate(0, -xRotation, 0); XAxis.transform.Rotate(yRotation, 0, 0); } }
Input.GetAxisでマウスの移動量が取得できるので
そこに速度を掛け合わせて各軸での回転を計算します。
あとは計算した値を使ってtransform.Rotate関数で
回転させるだけですね。
X軸Y軸をそれぞれ別のTransformにしている理由は
同じTransformでX軸Y軸を回転させるとZ軸までズレてしまうからです。
これは3次元回転の性質上仕方のないことみたいです。
なのでそれぞれ別のTransformを回転させて
このズレが起きないよう誤魔化しています。
ラジコン操作
操作するキャラの視点で操作する方法ですね。
バイオなんかの動きがイメージしやすいと思います。
using UnityEngine; public class Move : MonoBehaviour { public float XSpeed = 1.0f; public float YSpeed = 1.0f; // Update is called once per frame void Update() { var pos = transform.position; pos += transform.right * Input.GetAxis("Horizontal") * XSpeed; pos += transform.forward * Input.GetAxis("Vertical") * YSpeed; transform.position = pos; } }
ラジコン操作は操作するキャラクターの視点での操作になります。
なので移動量を計算しその移動量を
キャラクターから見たベクトルに変換してやる必要があります。
キャラクターの前はtransform.forwardで
キャラクターの右はtransform.rightで
それぞれ正規化されたベクトルを得られます。
あとはそのベクトルに計算した移動量をかけてやれば
その方向にそれだけ移動するベクトルができます。
最後に計算した前移動のベクトルと左右移動のベクトルを
原点に足してやればラジコン移動の完成です。
あとがき
今回はFPSゲームやバイオで見るようなカメラとラジコン操作を
Unityの機能を使ってなるべく簡単に実装してみました。
一応それっぽい動きとかはUnityの
Standard Assetsにあるっちゃあるんですが、
のべたに使うとZ軸ズレとか起こるんで
あくまで参考程度にするのがいいと個人的には思っています。
今回の記事が良ければスターやコメント等よろしくお願いします。
それでは今回はこの辺でノシ