teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

要望を追加

2021/08/08 02:56

投稿

Errors
Errors

スコア1

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

文の修正

2021/08/08 02:56

投稿

Errors
Errors

スコア1

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で表示非表示を切り替えたいと思い、そこに別のスクリプトからinvokeで呼び出されるメソッドを作りました。
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
- countが300になったらWeaponActiveを呼び出ましたが、そうすると正常にswordは実行されました。
51
+ 試し同じスクリプトかゲームスタート5秒後にWeaponActiveを呼び出させましたが、そうすると正常にswordは実行されました。
53
- しかし第三者のスクリプトからinvokeで実行してみましたが、今度はTechniqueの方から呼んだのと同じようにエラーが発生しました。
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
- つまりエー時のWeaponActiveだけが、変数が全てnullや0などになります
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

タグ

2021/08/08 02:51

投稿

Errors
Errors

スコア1

title CHANGED
File without changes
body CHANGED
File without changes

1

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

2021/08/08 02:21

投稿

Errors
Errors

スコア1

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