質問編集履歴

4

要望を追加

2021/08/08 02:56

投稿

Errors
Errors

スコア1

test CHANGED
File without changes
test CHANGED
@@ -154,6 +154,12 @@
154
154
 
155
155
 
156
156
 
157
+ WeaponActiveメソッドを使わずに武器を非アクティブ化したりするなど、別の方法を使えばいいような気もしますが、なぜこれでエラーが出るのか分からないので、できればこの方法を使う方針でよろしくお願いします。
158
+
159
+
160
+
161
+
162
+
157
163
  unity 2020.3.15f2
158
164
 
159
165
 

3

文の修正

2021/08/08 02:56

投稿

Errors
Errors

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,18 +1,16 @@
1
- WeaponActiveメソッドのエラーを解決したい
1
+ 他のスクリプトからWeaponActiveメソッドを実行すると、そ時だけあらゆる変数が0やnullなどになる
2
-
3
-
4
-
2
+
3
+
4
+
5
- キャラにInstantiateで武器を持たせて(ここではSwordというオブジェクト)AddComponentでSwordスクリプトをアタッチし、持っている武器をSetActiveで表示非表示を切り替えたいと思い、そこに別のスクリプトからinvokeで呼び出されるメソッドを作りました。
5
+ キャラにInstantiateで武器を持たせて(ここではSwordというオブジェクト)キャラにAddComponentでSwordスクリプトをアタッチし、持っている武器をSetActiveで表示非表示を切り替えたいと思い、別のスクリプトからinvokeで呼び出されるWeaponActiveメソッドを作りました。
6
-
7
-
8
-
6
+
7
+
8
+
9
- SwordクラスのStart()から呼び出したWeaponActive(false)は、武器消えているので正常に動作しているはずです。インスペクターから武器のチェックマークも確認しました。
9
+ SwordクラスのStart()から呼び出したWeaponActive(false)は、ちゃんと武器消えるし、それ以外変数も問題なく値を保持していました。
10
-
11
-
12
-
13
-
14
-
10
+
11
+
12
+
15
- しかしTechniquePerformerと言う同じオブジェクトにアタッチした別のスクリプトでボタン入力を検知し、そこにあるメソッドでInvokeを利用してWeaponActiveを実行しました。
13
+ しかしTechniquePerformerと言う同じオブジェクトにアタッチした別のスクリプトでボタン入力を検知し、Invokeを利用してWeaponActiveを実行しました。
16
14
 
17
15
 
18
16
 
@@ -100,31 +98,29 @@
100
98
 
101
99
 
102
100
 
103
- countが300なったらWeaponActiveを呼び出ましたが、そうすると正常にswordは実行されました。
101
+ 試し同じスクリプトからゲームスタート5秒後にWeaponActiveを呼び出させましたが、そうすると正常にswordは実行されました。
104
-
102
+
105
- しかし第三者のスクリプトからinvokeで実行してみましたが、今度はTechniqueの方から呼んだのと同じようにエラーが発生しました。
103
+ しかし第三者のスクリプトからinvokeで実行すると、今度はTechniqueの方から呼んだのと同じようにエラーが発生しました。
106
-
107
-
108
-
104
+
105
+
106
+
107
+
108
+
109
- つまり他のスクリプトからWeaponActiveを実行した時のみ、エラーが発生していると分かりました。
109
+ そしてdebug.logを使っていくうちに分かったことが、他のスクリプトからWeaponActiveを実行した時のみあらゆる変数更にthis.gameObjectまでもがnullや0となってエラーが発生していると分かりました。
110
+
111
+
112
+
113
+
114
+
110
-
115
+ ただしnullなどにならない変数もあって、たとえば宣言と同時に初期化したint型の変数は問題なし。
111
-
112
-
113
-
114
-
116
+
115
- その後もSwordスリプトやエー発生時のWeaponActiveデバッグログを実行して色々と試してみましが、charaDataやswordObなどの変数は使用するnullReference更にはstartで適当な数値を入したint型変数も、デバッグログでエラー時のWeaponActiveでは0になっていました
117
+ staticなクラスにjsonで保存してた変数とかも問題なししかしstartなどで値を入したのはnullなどにな
116
-
117
-
118
-
118
+
119
+
120
+
119
- つまりエラー時のWeaponActiveだけが、変数の全てnullや0などなります
121
+ ちなみに宣言と同に初期化して、そ後startで別の値を入力してみましたが、weaponActiveでは変数の宣言時初期化した値でした
120
-
121
-
122
-
123
-
124
-
125
-
126
-
127
- そしてthis.gameObjectなどもなぜかnullでした。
122
+
123
+
128
124
 
129
125
 
130
126
 
@@ -140,10 +136,6 @@
140
136
 
141
137
  ### 試したこと
142
138
 
143
- intなどは最初の宣言時に、int a = 777;などと言ったように、この時点で代入した値はエラー時のWeaponActiveでも777だった
144
-
145
-
146
-
147
139
  Invokeでは無くGetComponentからメソッド実行、しかし同じ結果。
148
140
 
149
141
 

2

タグ

2021/08/08 02:51

投稿

Errors
Errors

スコア1

test CHANGED
File without changes
test CHANGED
File without changes

1

説明が間違っていると判断

2021/08/08 02:21

投稿

Errors
Errors

スコア1

test CHANGED
@@ -1 +1 @@
1
- 他のスクリプトから呼び出したメソッドがnull referenceになる
1
+ あるスクリプトのメソッドを他のスクリプトから呼び出すと、そのメソッドでだけ変数の値がnullや0になる
test CHANGED
File without changes