質問編集履歴

4

解決後。当Q&Aを参照して来られた方に完結に解法を伝えるため。

2018/11/04 19:58

投稿

Sado
Sado

スコア89

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,27 @@
1
+ ### 【まとめ】【解決後の追記】
2
+
3
+
4
+
5
+ 解決まで非常に遠回りをしてしまいましたので、簡潔にまとめさせていただきます。
6
+
7
+ 今回NullReferenceExceptionが出たのですが、エラーとして示された行に存在するメソッド・クラス型変数(?)に焦点をあててしまったことから見逃してしまった凡ミスです。
8
+
9
+ 空参照エラーの行に存在するスクリプトやメソッドとは**少し別の箇所で定義したもの**が原因でした。
10
+
11
+
12
+
13
+ というのも、あるゲームオブジェクトにアタッチしたスクリプトから別のゲームオブジェクトのスクリプトのメソッドを呼び出していたのですが、この時に別のオブジェクトの参照を得るべき箇所で無理やりスクリプトそのものをねじ込もうとしていました。
14
+
15
+
16
+
17
+ スクリプト冒頭で`[SerializeField] private GameObject gmObj;`と書き`Start()`内でスクリプトコンポーネントの参照を得るべきところで、`[SerialzeField] private Script-Name scObj;`と書いてしまっていました。インスペクター側の項目もわけのわからないものを参照していました。
18
+
19
+
20
+
21
+ 初心者あるあるとでも思わないとやってられない凡ミスです。基礎といいますか、扱うデータ型を疎かにしすぎです。Java勉強中とは口が裂けても言えません。
22
+
23
+
24
+
1
25
  ### 前提・実現したいこと
2
26
 
3
27
 

3

分かったことと、新たな不明点の追記。

2018/11/04 19:58

投稿

Sado
Sado

スコア89

test CHANGED
File without changes
test CHANGED
@@ -172,6 +172,22 @@
172
172
 
173
173
 
174
174
 
175
+ ### デバッグ状況2(追記)
176
+
177
+ Item型のインスタンスを、ItemManagerクラスのtargetItemに参照を格納し、壊れるとアイテムを出現させるBoxクラスからItemManagerクラスのmakeItems()を実行するとエラーが発生することがわかりました。
178
+
179
+ ItemクラスのGetGameObject()だけでなく、Itemクラス内の全メソッドにおいて同様のエラーが発生します。
180
+
181
+ その条件は恐らくですが、「BoxクラスからItemManagerクラスのメソッドを呼び出す。そのメソッドがまたItemクラスのメソッドを呼び出す」といった構造をしていることだと思いましたが、それをどのように解決させるか検討もつきません。
182
+
183
+ 「BoxクラスからItemManagerクラスのメソッドを呼び出す。そのメソッドがItemクラスのインスタンスの参照そのものを表示する」という先よりも一段階少ない工程でデバッグしてみると、ヌルにはなりませんでした。
184
+
185
+
186
+
187
+ HSP言語のループのように、C#のメソッドを呼び出す深さ(ネスト)が3つくらいと言った、Unity C#特有の制限があるのでしょうか。
188
+
189
+
190
+
175
191
  ### 補足情報(FW/ツールのバージョンなど)
176
192
 
177
193
 

2

分かったことの追記

2018/11/02 17:30

投稿

Sado
Sado

スコア89

test CHANGED
File without changes
test CHANGED
@@ -154,6 +154,24 @@
154
154
 
155
155
 
156
156
 
157
+ ### デバッグ状況1(追記)
158
+
159
+ `targetItem.GetGameObject()`の補足をしますと、targetItemはItem型の変数でアイテムの各種情報(名前や属性,説明,GameObjectなど)をprivate typeで格納しています。この中にGameObjectがあり、`GetGameObject()`で取得できるようになっています。
160
+
161
+ ここで、Item型のGetGameObjectは他の場所でも頻繁に利用していて問題が起きていないために見落としていましたが、問題の箇所で`targetItem`のみで確認してみたところヌルリファレンスエラーは発生しませんでした。
162
+
163
+ 問題のメソッド内で<Item>.GetGameObject()を須いたときのみエラーが発生するらしいことまでが分かりました。
164
+
165
+
166
+
167
+ しかし、「targetItemの中身はどの時点でも空ではない」「GetGameObject()はprivateな変数を返すだけのメソッド」「Item型の実体の方も問題のメソッド以外では参照が確認できる」「Item型の実体の方でGameObjectの参照を格納する変数に変更を加える(代入する)処理は一切書き込んでいない」
168
+
169
+ となると、余計に分かりません。
170
+
171
+ 何かちょっとしたヒントでもいいので、突破口に成るような何かが見つかるといいのですが......
172
+
173
+
174
+
157
175
  ### 補足情報(FW/ツールのバージョンなど)
158
176
 
159
177
 

1

初心者マーク表示、一部言い回し修正。

2018/11/02 16:56

投稿

Sado
Sado

スコア89

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ### 発生している問題・エラーメッセージ
12
12
 
13
- 特定の箇所でのみInstantiate()を実行しようとすると"NullReferenceException: Object reference not set to an instance of an object"されてしいます。
13
+ 特定の箇所でのみInstantiate()を実行しようとすると"NullReferenceException: Object reference not set to an instance of an object"が表示されます。
14
14
 
15
15
  ```
16
16