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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

Q&A

解決済

4回答

901閲覧

NullReferenceException: Object reference not set to an instance of an objectというエラーメッセージが表示され行ってほしい処理

marisayuxtukuri

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

0グッド

2クリップ

投稿2019/08/03 17:30

NullReferenceException: Object reference not set to an instance of an objectPlayerContral.Update () (at Assets/PlayerContral.cs:31)というエラーがでてうまく処理が行われません。PlayerContralスクリプトでRouletteスクリプトからpublic bool値のroop1を読み取りそれをPlayerContralスクリプトのbool値roulettehanteiに代入しようとしているのですがPlayerContralの31行目のroulettehantei = roulette1.GetComponent<Roulette>().roop1;でエラーが起きているようです。まだまだ初心者ですので説明などが不十分な点がありますがどうかご教授お願い致します。
ちなみにこれはルーレットをまわしてその数を読み取り、出目の数だけプレイヤーが移動できるようなゲームを作ろうとしています。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerContral : MonoBehaviour 6{ 7 public bool test = true; 8 int deme1; 9 bool roulettehantei;//Rouletteスクリプトのroop1の値を入れるためのもの 10 11 void Update() 12 { 13 14 GameObject director1 = GameObject.Find("GameDirector"); 15 GameObject roulette1 = GameObject.Find("Roulette"); 16 roulettehantei = roulette1.GetComponent<Roulette>().roop1;//ここでエラーがでる。 17 if (roulettehantei == true) 18 { 19 deme1 = director1.GetComponent<GameDirector>().deme; 20 roulettehantei = false; 21 } 22 23 if (deme1 <= 0) 24 { 25 roulettehantei = true; 26 } 27

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Roulette : MonoBehaviour 7{ 8 float kaitenspeed = 0; 9 bool roop = false; 10 public bool roop1 = false;//この値をPlayerContralスクリプトで取得したい 11 12 13 void Start() 14 { 15 16 //this.roulette = GameObject.Find("ImageRoulette"); 17 18 } 19 void Roulette1()//画像のルーレットでさされた数を数字として取得するやつ 20 { 21 GameObject director = GameObject.Find("GameDirector"); 22 Quaternion quaternion = this.transform.rotation; 23 float z = quaternion.eulerAngles.z; 24 while(z > 342.5) 25 { 26 z -= 360; 27 } 28 29 if (-17.5 <= z && z < 19) 30 { 31 director.GetComponent<GameDirector>().RoulletRsulut(1); 32 } 33 if (19 <= z && z < 55) 34 { 35 director.GetComponent<GameDirector>().RoulletRsulut(2); 36 } 37 if (55 <= z && z < 91) 38 { 39 director.GetComponent<GameDirector>().RoulletRsulut(3); 40 } 41 if (91 <= z && z < 127) 42 { 43 director.GetComponent<GameDirector>().RoulletRsulut(4); 44 } 45 if (127 <= z && z < 162.8) 46 { 47 director.GetComponent<GameDirector>().RoulletRsulut(5); 48 } 49 if (162.8 <= z && z < 198.6) 50 { 51 director.GetComponent<GameDirector>().RoulletRsulut(6); 52 } 53 if (198.6 <= z && z < 234.6) 54 { 55 director.GetComponent<GameDirector>().RoulletRsulut(7); 56 } 57 if (234.6 <= z && z < 270.8) 58 { 59 director.GetComponent<GameDirector>().RoulletRsulut(8); 60 } 61 if (270.8 <= z && z < 306.8) 62 { 63 director.GetComponent<GameDirector>().RoulletRsulut(9); 64 } 65 if (306.8 <= z && z < 342.5) 66 { 67 director.GetComponent<GameDirector>().RoulletRsulut(10); 68 } 69 } 70 71 72 void Update() 73 { 74 if (Input.GetMouseButtonDown(0))//左クリックで回転する。 75 { 76 this.kaitenspeed = 100; 77 this.roop = false; 78 } 79 if (Input.GetMouseButtonUp(0)) 80 { 81 this.roop = true; 82 } 83 if (roop == true)//左クリックを離すと減速する。 84 { 85 this.kaitenspeed *= 0.90f; 86 if (this.kaitenspeed < 0.01) 87 { 88 this.kaitenspeed = 0; 89 roop = false;//回転を徐々にゆっくりなど制御するためのbool値 90 roop1 = true;//このroop1をPlayerContralスクリプトで取得したい。 91 } 92 } 93 transform.Rotate(0, 0, this.kaitenspeed);//ここで回転させている。 94 95 if (this.kaitenspeed < 0.01 && roop1 == true) 96 { 97 Roulette1();//ここで画像のルーレットの出目を読み取っている。回転のスピードが0.0001未満になったら数字を表示する。 98 99 } 100 101 102 103 } 104} 105

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

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

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

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

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

guest

回答4

0

ベストアンサー

C#

1GameObject director1 = GameObject.Find("GameDirector"); 2GameObject roulette1 = GameObject.Find("Roulette");

これらをメンバ変数にしてインスペクタからインスタンスを突っ込めば最低限ここはNullではなくなりますし
(後毎度UpdateでFindやるとか絶対重い)

なんなら public Roulette roulette; もしくは [SerializeField] private Roulette roulette; ってメンバ変数をつくってインスペクタに突っ込んだほうが早いですね。

投稿2019/08/03 23:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

marisayuxtukuri

2019/08/04 04:47

返信遅くなり申し訳ありません。回答ありがとうございます。すみません、まだまだ初心者でどのこにpublic Roulette roulette;をつくるのかわかりません。
marisayuxtukuri

2019/08/04 05:16

インスペクターをいじったらうまくいきました!ありがとうございました。
guest

0

Unity触ったことありませんが、多分リフレクションでオブジェクトを探してるんですよね。
下記処理でオブジェクトを取得できていないんだと思います。

GameObject roulette1 = GameObject.Find("Roulette");

参考になりそうなページ
https://answers.unity.com/questions/1024305/gameobject-find-nullreferenceexception-object-refe.html

投稿2019/08/03 23:13

pea

総合スコア419

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

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

marisayuxtukuri

2019/08/04 04:48

返信遅くなり申し訳ありません。回答ありがとうございます。ぜひ参考にさせて頂きます!
guest

0

google翻訳
NullReferenceException: オブジェクト参照がオブジェクトインスタンスに設定されていません

例外名を見ればわかると思いますが、nullが入ってますぜ

投稿2019/08/03 23:13

y_waiwai

総合スコア87719

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

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

marisayuxtukuri

2019/08/04 04:45

返信遅くなり申し訳ありません。回答ありがとうございます!nullがどこにはいっているかわかりません
y_waiwai

2019/08/04 04:50

roulette1 か roulette1.GetComponent<Roulette>() が nullじゃないか調べてみれば?
marisayuxtukuri

2019/08/04 05:17

インスペクターをいじったらうまくいきました!ありがとうございました。
guest

0

Rouletteclassにroop1の状態を返す関数を追加

Roulette

1bool IsRoop() 2{ 3 return this.roop1; 4}

エラーが出ている部分を
roulettehantei = roulette1.GetComponent<Roulette>().IsRoop();//ここでエラーがでる。
に変更してみてください。

…動かなかったらすみません

投稿2019/08/03 18:05

編集2019/08/03 19:13
akiakiakira

総合スコア20

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

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

marisayuxtukuri

2019/08/04 04:44

返信遅くなり申し訳ありません。回答ありがとうございます。やってみましたが同じエラーがでました...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問