を無視して、カメラに取り付けられている:プレーヤーは、このように、Yのaxizにカメラを回転させることができるので移動し、このコードは回転
transform.position += Input.GetAxis("Vertical") * transform.forward * mod;
transform.position += Input.GetAxis("Horizontal") * transform.right * mod;
Iはの.forwardと.RIGHTを使用しましたどの方向にカメラが前方キーに向いていても常にカメラを相対的に前方に移動させ、左側のキーはそれを相対的に左に移動させます。ちょうど明確にするために - 私はそれが現実空間ではなくローカル空間で動くようにします。それは、向きが向いているので、必ずしもVector3(0,0,1)ではありません。
カメラには無料のローミングがあり、親や対象はありません。
問題は、カメラの視線が45°であることです。 transform.forwardを使用すると、その高さが変更されます。また、高さを固定値に設定したくないので、カメラの高さを変更するスクロールコードもあります。移動をXとZのみに制限するにはどうしたらいいですか?
更新:このコードはうまくいきませんが、xyLe_が示唆しているように、Vector3.Projectを使用するより洗練されたソリューションがあると確信しています。もし私がそれを理解するなら、私は彼の答えに追加します。
mod = Time.deltaTime * 30;
float yPos = transform.position.y;
pos = transform.position;
pos += Input.GetAxis("Vertical") * transform.forward * mod;
pos.y = yPos;
pos += Input.GetAxis("Horizontal") * transform.right * mod;
pos += Input.GetAxis("Mouse ScrollWheel") * transform.up * mod * -30;
[Math.Clamp](https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html)が役に立ちます。 – Catwood
"ワールド"の順方向を使いたいですか?それがあなたの場合であれば、ワールド方向は一定です。Vector3.Up = new Vector3(0、1、0); –
'transform.forward'を' transform.right'の回りに回転させてxz平面に合わせます。 – TheDjentleman