質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

862閲覧

マウスの視点移動で縦軸方向に動きません。

enemyspotted

総合スコア0

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/11/12 05:10

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Tagの設定をMaincameraにしたら無事できました。

投稿2021/11/12 14:02

enemyspotted

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問