前提・実現したいこと
unityでマウスで視点移動をしたいものです。
横軸は視点移動できるのですが、縦軸が動きません。
マウスを動かすたびに、下のエラーメッセージが出る感じです。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object PlayerMove.Start () (at Assets/Scripts/PlayerMove.cs:30) NullReferenceException: Object reference not set to an instance of an object PlayerMove.moveExecution () (at Assets/Scripts/PlayerMove.cs:94) PlayerMove.FixedUpdate () (at Assets/Scripts/PlayerMove.cs:42) ・ ・ ・
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerMove : MonoBehaviour 6{ 7 //移動速度。Inspectorから数値を変更できる。外部のクラスからは変更できない。 8 [SerializeField] float moveSpeed; 9 //Rigidbody型のplayerRidigbody変数を宣言 10 Rigidbody playerRigidbody; 11 //小数型の変数を2つ宣言 12 float moveX, moveZ; 13 //真偽値型の変数を2つ宣言 14 bool moveZpermission, moveXpermission; 15 //マウスの動きを取得する為のfloat型変数を宣言 16 float mouseX, mouseY; 17 //カメラのX回転角を取得する為のfloat型変数を宣言 18 float rotationXcamera; 19 //マウスの動きを反映させる許可を決める 20 bool mouseXpermission, mouseYpermission; 21 //カメラの動きを制御する 22 Transform transformCamera; 23 //Start is called before the first frame update 24 //最初のフレームだけ実行される処理 25 void Start() 26 { 27 //このスクリプトがアタッチされているオブジェクト(Player)のRigidbodyを取得 28 playerRigidbody = GetComponent<Rigidbody>(); 29 //カメラのTransformを取得 30 transformCamera = Camera.main.transform; ←cs.30 31 //カメラのX回転角を取得 32 rotationXcamera = transformCamera.localEulerAngles.x; 33 } 34 //Update is called once per frame 35 //毎フレーム実行される処理 36 void Update() 37 { 38 movePermission(); 39 } 40 void FixedUpdate() 41 { 42 moveExecution(); ←cs:42 43 } 44 void movePermission() 45 { 46 //小数型の変数に、Horizontalで指定したキーに対して入力があった場合、度合いに応じた戻り値「-1」~「1」が割り当てられる 47 moveX = Input.GetAxis("Horizontal"); 48 //小数型の変数に、Verticalで指定したキーに対して入力があった場合、度合いに応じた戻り値「-1」~「1」が割り当てられる 49 moveZ = Input.GetAxis("Vertical"); 50 //マウスの上下移動に対して戻り値「-1」~「1」を取得 51 mouseX = Input.GetAxis("Mouse X"); 52 //マウスの左右移動に対して戻り値「-1」~「1」を取得 53 mouseY = Input.GetAxis("Mouse Y"); 54 //Verticalで指定したキーに対して入力があった場合 55 if (moveZ != 0) 56 { 57 //前後に移動する処理を開始する為の許可を出す 58 moveZpermission = true; 59 } 60 //Horizontalで指定したキーに対して入力があった場合 61 if (moveX != 0) 62 { 63 //左右に移動する処理を開始する為の許可を出す 64 moveXpermission = true; 65 } 66 if (mouseX != 0) 67 { 68 mouseXpermission = true; 69 } 70 if (mouseY != 0) 71 { 72 mouseYpermission = true; 73 } 74 } 75 void moveExecution() 76 { 77 //前後もしくは左右に移動する処理開始の許可が出たら、{}内の処理を実行する 78 if (moveZpermission || moveXpermission || mouseXpermission || mouseYpermission) 79 { 80 //キー入力が無い時まで{}内の処理が呼ばれないよう、不許可に戻しておく 81 moveZpermission = false; 82 moveXpermission = false; 83 mouseXpermission = false; 84 mouseYpermission = false; 85 //このスクリプトがアタッチされているオブジェクト(Player)の向きを基準としたX方向とZ方向に移動するよう、 86 //1フレームの変化量に対応させてplayerRigidbodyの速度を上書きする 87 //回転移動防止の為、インスペクターからFreezeRotation X Y Z にチェックを入れておく 88 playerRigidbody.velocity = transform.rotation * new Vector3(moveX, 0, moveZ) * moveSpeed * Time.deltaTime * 100; 89 //マウスの左右移動に応じてプレイヤーのRigidbodyのY軸を回転 90 playerRigidbody.MoveRotation(Quaternion.Euler(0.0f, playerRigidbody.rotation.eulerAngles.y + mouseX * Time.deltaTime * 100.0f, 0.0f)); 91 //マウスの上下移動に応じてカメラのX回転角の値を決める。+-方向40度までに制限をかける。 92 rotationXcamera = Mathf.Clamp(rotationXcamera - mouseY * Time.deltaTime * 100.0f, -40, 40); 93 //カメラのX回転角を設定 94 transformCamera.localEulerAngles = new Vector3(rotationXcamera, 0, 0); ←cs:94 95 } 96 else 97 { 98 //移動許可が出ていない時は力を加えないようにリセットする 99 playerRigidbody.velocity = Vector3.zero; 100 } 101 } 102}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。