質問編集履歴
4
要望を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -76,6 +76,9 @@
|
|
76
76
|
|
77
77
|
### 補足情報(FW/ツールのバージョンなど)
|
78
78
|
|
79
|
+
WeaponActiveメソッドを使わずに武器を非アクティブ化したりするなど、別の方法を使えばいいような気もしますが、なぜこれでエラーが出るのか分からないので、できればこの方法を使う方針でよろしくお願いします。
|
80
|
+
|
81
|
+
|
79
82
|
unity 2020.3.15f2
|
80
83
|
|
81
84
|
```ここに言語を入力
|
3
文の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
WeaponActiveメソッド
|
1
|
+
他のスクリプトからWeaponActiveメソッドを実行すると、その時だけあらゆる変数が0やnullなどになる。
|
2
2
|
|
3
|
-
キャラにInstantiateで武器を持たせて(ここではSwordというオブジェクト)AddComponentでSwordスクリプトをアタッチし、持っている武器をSetActiveで表示非表示を切り替えたいと思い、
|
3
|
+
キャラにInstantiateで武器を持たせて(ここではSwordというオブジェクト)キャラにAddComponentでSwordスクリプトをアタッチし、持っている武器をSetActiveで表示非表示を切り替えたいと思い、別のスクリプトからinvokeで呼び出されるWeaponActiveメソッドを作りました。
|
4
4
|
|
5
|
-
SwordクラスのStart()から呼び出したWeaponActive(false)は、武器
|
5
|
+
SwordクラスのStart()から呼び出したWeaponActive(false)は、ちゃんと武器は消えるし、それ以外の変数も問題なく値を保持していました。
|
6
6
|
|
7
|
+
しかしTechniquePerformerと言う同じオブジェクトにアタッチした別のスクリプトでボタン入力を検知し、Invokeを利用してWeaponActiveを実行しました。
|
7
8
|
|
8
|
-
しかしTechniquePerformerと言う同じオブジェクトにアタッチした別のスクリプトでボタン入力を検知し、そこにあるメソッドでInvokeを利用してWeaponActiveを実行しました。
|
9
|
-
|
10
9
|
するとなぜかNullReferenceとなり、武器が表示されませんでした。
|
11
10
|
調べてみると、swordObというGameObject型で武器を参照している場所がnullでした
|
12
11
|
|
@@ -49,28 +48,25 @@
|
|
49
48
|
|
50
49
|
試しにFixedUpdateでDebug.Log(swordOb)を実行してみましたが、Startで呼び出された後もオブジェクトの名前を出力し続け、ErrorPauseを無効にしてRullReference後の状況も見てみましたが、FixedUpdateからswordObがnullだと表示されたことは一度もありませんでした。
|
51
50
|
|
52
|
-
|
51
|
+
試しに同じスクリプトからゲームスタート5秒後にWeaponActiveを呼び出させてみましたが、そうすると正常にswordは実行されました。
|
53
|
-
しかし第三者のスクリプトからinvokeで実行
|
52
|
+
しかし第三者のスクリプトからinvokeで実行すると、今度はTechniqueの方から呼んだのと同じようにエラーが発生しました。
|
54
53
|
|
55
|
-
つまり他のスクリプトからWeaponActiveを実行した時のみ、エラーが発生していると分かりました。
|
56
54
|
|
55
|
+
そしてdebug.logを使っていくうちに分かったことが、他のスクリプトからWeaponActiveを実行した時のみあらゆる変数、更にthis.gameObjectまでもがnullや0となってエラーが発生していると分かりました。
|
57
56
|
|
58
|
-
その後もSwordスクリプトやエラー発生時のWeaponActiveでデバッグログを実行して色々と試してみましたが、charaDataやswordObなどの変数は使用するとnullReference。更にはstartで適当な数値を代入したint型の変数も、デバッグログではエラー時のWeaponActiveでは0になっていました。
|
59
57
|
|
58
|
+
ただしnullなどにならない変数もあって、たとえば宣言と同時に初期化したint型の変数は問題なし。
|
60
|
-
|
59
|
+
staticなクラスにjsonで保存していた変数とかも問題なし。しかしstartなどで値を入力したものはnullなどになる。
|
61
60
|
|
61
|
+
ちなみに宣言と同時に初期化して、その後startで別の値を入力してみましたが、weaponActiveでは変数の中が宣言時に初期化した値でした。
|
62
62
|
|
63
63
|
|
64
|
-
そしてthis.gameObjectなどもなぜかnullでした。
|
65
|
-
|
66
64
|
変数はprivateなので他のスクリプトからは変更できないはずで、Swordスクリプト内でも代入してるのはStart内のみで、他から参照先は変更されていません。
|
67
65
|
|
68
66
|
|
69
67
|
|
70
68
|
|
71
69
|
### 試したこと
|
72
|
-
intなどは最初の宣言時に、int a = 777;などと言ったように、この時点で代入した値はエラー時のWeaponActiveでも777だった
|
73
|
-
|
74
70
|
Invokeでは無くGetComponentからメソッド実行、しかし同じ結果。
|
75
71
|
|
76
72
|
WeaponActiveの引数をなくして返り値からSetActive、返り値もnullだった。
|
2
タグ
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
説明が間違っていると判断
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
他のスクリプトから呼び出
|
1
|
+
あるスクリプトのメソッドを他のスクリプトから呼び出すと、そのメソッドでだけ変数の値がnullや0になる
|
body
CHANGED
File without changes
|