前提・実現したいこと
Unity2020.3.23f1で、
FPSゲームのような、基本的なプレイヤーの動きをスクリプトで設定しようとしたところ、rotationがうまく動きません。
具体的には、インスペクター上でのパラメータが変わっているのは確認できましたが、ゲーム画面のみ、上下にしか回転しません。
Playerオブジェクトを"カプセル"で作り、その子としてカメラを入れています。
このPlayerオブジェクトにこのスクリプトをアタッチしています。
このPlayerオブジェクト自体は、Sceneビュー上では回転していることが確認できます。
しかし、カメラは回転していることが確認できません。しかしながら、インスペクター上でTransformを見た限りでは、値は変わっています。
上下方向には回転しています。これはゲーム画面でも確認できます。
写真は、実行中の状態のものです。赤枠は、カメラのオブジェクトMainCameraを選択した際のインスペクター。
外側(背景)の画像は、Playerオブジェクトを選択した状態のインスペクター及びその他もろもろ。
また、cameraObj変数に、インスペクター上からカメラを設定しています。
なお、position(移動)は思い通り動いています。
解決したいことはもちろん、Playerオブジェクトと連動してカメラの回転のY軸も動くようにしたいということです。
動かない原因は何なのでしょうか?
発生している問題・エラーメッセージ
実行してもエラーメッセージは出ません。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 public float sensitivity = 60f, fov = 80f; 8 9 public float speed = 5f; 10 11 private float moveX, moveZ; 12 private Vector3 moveVector; 13 14 private float mouseXDelta, mouseYDelta, mouseY; 15 16 private Rigidbody rigidbody; 17 public GameObject cameraObj; 18 private Camera camera; 19 20 21 private void Start() 22 { 23 rigidbody = gameObject.GetComponent<Rigidbody>(); 24 camera = cameraObj.GetComponent<Camera>(); 25 camera.fieldOfView = fov; 26 } 27 28 void Update() 29 { 30 MovePlayer(); 31 RotatePlayer(); 32 } 33 34 void RotatePlayer() 35 { 36 mouseXDelta = Input.GetAxis("Mouse X"); 37 mouseYDelta = Input.GetAxis("Mouse Y"); 38 mouseXDelta *= Time.deltaTime * sensitivity * 10; 39 mouseYDelta *= Time.deltaTime * sensitivity * 10; 40 41 rigidbody.transform.rotation *= Quaternion.Euler(0, mouseXDelta, 0); 42 43 mouseY += mouseYDelta; 44 mouseY = Mathf.Clamp(mouseY, -90, 90); 45 cameraObj.transform.rotation = Quaternion.Euler(-mouseY, 0, 0); 46 } 47 48 void MovePlayer() 49 { 50 moveX = 0; 51 moveZ = 0; 52 if (Input.GetKey(KeyCode.W)) 53 { 54 moveZ = 1; 55 } 56 else if (Input.GetKey(KeyCode.S)) 57 { 58 moveZ = -1; 59 } 60 61 if (Input.GetKey(KeyCode.D)) 62 { 63 moveX = 1; 64 } 65 else if (Input.GetKey(KeyCode.A)) 66 { 67 moveX = -1; 68 } 69 moveVector = new Vector3(moveX, 0, moveZ); 70 moveVector.Normalize(); 71 72 rigidbody.transform.position += moveVector * speed * Time.deltaTime; 73 } 74} 75
###プログラムで実装したかったこと
W,A,S,DでのPlayerオブジェクトの移動、カメラ視点移動です。
視点移動は、水平回転はPlayerオブジェクトの回転(rigidbody経由)、上下の回転はカメラのTransformの回転です。
試したこと
Unityの再インストールのようなことはしました。すでに2019代のバージョンでやったときに同じことが起きており、インストールし直しも兼ねてバージョンを最新にした次第です。
また、
rigidbody.transform.rotation *= Quaternion.Euler(0, mouseXDelta, 0);
のところをgameObject.transform.rotation(以下略)に変えてもみましたが、結果は同じでした。
補足情報
回答に際して必要な情報がございましたら、返信でお伝え下さい。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/27 12:07