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

質問編集履歴

4

プログラムの修正

2021/12/10 07:41

投稿

nanakaka
nanakaka

スコア1

title CHANGED
File without changes
body CHANGED
@@ -2,9 +2,8 @@
2
2
  別のシーンに移動してもplayerなどのオブジェクトを引ぎ継ぎたいと思い、DontDestroyOnLoadとsingletonを使用しています。
3
3
 
4
4
  ### 発生している問題・エラーメッセージ
5
- タイトル画面からスタートし、通常にscene移動する分にはエラーは起きないのですが、一度タイトル画面に戻るときにDontDestroyOnLoadを削除し、もう一度スタートすると、移動先のsceneで下記のエラーが大量にでます。
5
+ タイトル画面からスタートし、通常にscene移動する分にはエラーは起きないのですが、一度タイトル画面に戻るときにDontDestroyOnLoadを削除し、もう一度スタートすると、scene移動した際に下記のようなエラーがいます。
6
6
 
7
- 一度削除してしまうともう使用できなくなってしまうのでしょうか?
8
7
  いろいろなサイトを調べてみたのですが見つからなかったので質問させていただきました。
9
8
  ```
10
9
  エラーメッセージ
@@ -28,74 +27,50 @@
28
27
  using System.Collections;
29
28
  using System.Collections.Generic;
30
29
  using UnityEngine;
30
+ using UnityEngine.SceneManagement;
31
31
 
32
32
  public class Object : MonoBehaviour
33
33
  {
34
34
  public static Object singleton;
35
35
 
36
- public ProcessingUI ProUI;
36
+ void Awake()
37
+ {
37
38
 
38
- public bool titlecheck = false;
39
39
 
40
- void Awake()
40
+ // スクリプトが設定されていなければゲームオブジェクトを残しつつスクリプトを設定
41
- {
41
+
42
42
  if (singleton == null)
43
43
  {
44
44
  DontDestroyOnLoad(gameObject);
45
45
  singleton = this;
46
46
  }
47
+ // このシーンの同じゲームオブジェクトを削除
47
48
  else
48
49
  {
49
50
  Destroy(gameObject);
50
51
  }
51
-
52
52
  }
53
53
 
54
54
  void Start()
55
55
  {
56
-
56
+
57
57
  }
58
58
 
59
59
 
60
60
  void Update()
61
61
  {
62
- titlecheck = ProUI.GetTitleCheck();
62
+ if (SceneManager.GetActiveScene().name == "TitleScene")
63
- if (titlecheck)
64
63
  {
65
64
  Destroy(gameObject);
66
65
  }
67
66
  }
67
+
68
68
  }
69
69
 
70
- ```
71
70
 
72
- ###タイトルに戻ったことを判定するスクリプト
73
71
  ```
74
- using UnityEngine;
75
- using System.Collections;
76
- using UnityEngine.UI;
77
- using UnityEngine.SceneManagement;
78
72
 
79
- public class ProcessingUI : MonoBehaviour
80
- {
81
- public bool TitleCheck = false;
82
73
 
83
-
84
- public void LoadingTitleScene()
85
- {
86
- TitleCheck = true;
87
- SceneManager.LoadScene("TitleScene");
88
-
89
- }
90
-
91
- public bool GetTitleCheck()
92
- {
93
- return TitleCheck;
94
- }
95
-
96
- }
97
- ```
98
-
99
74
  ###エラー内に記述されているDamageCheckSclipt
100
75
  ```
101
76
  using System;
@@ -231,41 +206,6 @@
231
206
  }
232
207
 
233
208
 
234
-
235
- public float HP()
236
- {
237
- return hp;
238
- }
239
-
240
- public bool IdouCheck()
241
- {
242
- return I;
243
- }
244
-
245
- public bool RightIdouCheck()
246
- {
247
- return RI;
248
- }
249
-
250
- public bool LeftIdouCheck()
251
- {
252
- return LI;
253
- }
254
- public bool DoaIdouCheck()
255
- {
256
- return DI;
257
- }
258
-
259
- public float Idounumber()
260
- {
261
- return IDOU;
262
- }
263
-
264
- public float IdouSpacenumber()
265
- {
266
- return IDOUSpace;
267
- }
268
-
269
209
  private IEnumerator DelayCoroutine(float seconds, Action action)
270
210
  {
271
211
  yield return new WaitForSeconds(seconds);

3

試したことの追加

2021/12/10 07:41

投稿

nanakaka
nanakaka

スコア1

title CHANGED
File without changes
body CHANGED
@@ -17,6 +17,11 @@
17
17
 
18
18
  ```
19
19
 
20
+ ###試したこと
21
+ 1.DamageCheckScliptの128,129,133行目を削除するとエラーなしで動作した。
22
+ 2.↑のプログラムのまま、127行目にDebug.Log(I);を追加して実行してもエラーは出なかった。
23
+  しかし、なぜか3回デバッグされた。
24
+
20
25
  ### DontDestroyOnLoadとsingletonを使用しているスクリプト
21
26
  ```C#
22
27
  using System;

2

コードの修正

2021/12/09 08:50

投稿

nanakaka
nanakaka

スコア1

title CHANGED
File without changes
body CHANGED
@@ -4,8 +4,6 @@
4
4
  ### 発生している問題・エラーメッセージ
5
5
  タイトル画面からスタートし、通常にscene移動する分にはエラーは起きないのですが、一度タイトル画面に戻るときにDontDestroyOnLoadを削除し、もう一度スタートすると、移動先のsceneで下記のエラーが大量にでてきます。
6
6
 
7
- DamageCheckScliptのSceneを切り替えたときに動作するプログラムで何かを実行するとエラーになってしまうみたいです。
8
-
9
7
  一度削除してしまうともう使用できなくなってしまうのでしょうか?
10
8
  いろいろなサイトを調べてみたのですが見つからなかったので質問させていただきました。
11
9
  ```

1

エラーの条件を少し詳しく書き直しました。

2021/12/09 08:39

投稿

nanakaka
nanakaka

スコア1

title CHANGED
File without changes
body CHANGED
@@ -4,6 +4,8 @@
4
4
  ### 発生している問題・エラーメッセージ
5
5
  タイトル画面からスタートし、通常にscene移動する分にはエラーは起きないのですが、一度タイトル画面に戻るときにDontDestroyOnLoadを削除し、もう一度スタートすると、移動先のsceneで下記のエラーが大量にでてきます。
6
6
 
7
+ DamageCheckScliptのSceneを切り替えたときに動作するプログラムで何かを実行するとエラーになってしまうみたいです。
8
+
7
9
  一度削除してしまうともう使用できなくなってしまうのでしょうか?
8
10
  いろいろなサイトを調べてみたのですが見つからなかったので質問させていただきました。
9
11
  ```
@@ -12,7 +14,7 @@
12
14
  MissingReferenceException: The object of type 'DamageCheckSclipt' has been destroyed but you are still trying to access it.
13
15
  Your script should either check if it is null or you should not destroy the object.
14
16
  UnityEngine.MonoBehaviour.StartCoroutine (System.Collections.IEnumerator routine) (at <ef667cdc82bf4a4e911d1ddea9ff581d>:0)
15
- DamageCheckSclipt.SceneLoaded (UnityEngine.SceneManagement.Scene nextScene, UnityEngine.SceneManagement.LoadSceneMode mode) (at Assets/DamageCheckSclipt.cs:125)
17
+ DamageCheckSclipt.SceneLoaded (UnityEngine.SceneManagement.Scene nextScene, UnityEngine.SceneManagement.LoadSceneMode mode) (at Assets/DamageCheckSclipt.cs:128)
16
18
  UnityEngine.SceneManagement.SceneManager.Internal_SceneLoaded (UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode) (at <ef667cdc82bf4a4e911d1ddea9ff581d>:0)
17
19
 
18
20
  ```