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

回答編集履歴

1

追記

2019/07/23 04:08

投稿

fiveHundred
fiveHundred

スコア10454

answer CHANGED
@@ -1,2 +1,82 @@
1
1
  コルーチンの呼び出し元のゲームオブジェクトが破棄されると、コルーチンも全て破棄されます。
2
- ゲームオブジェクトをすぐ破棄せずに非表示にしておくか、コルーチンの呼び出し元を他のゲームオブジェクトにしてみてください。
2
+ ゲームオブジェクトをすぐ破棄せずに非表示にしておくか、コルーチンの呼び出し元を他のゲームオブジェクトにしてみてください。
3
+
4
+ ---
5
+
6
+ 追記:
7
+ (以下は動作未確認なので、上手くいかなかったら適宜修正してください)
8
+
9
+ Player.cs
10
+ ```C#
11
+ using UnityEngine;
12
+ using System.Collections;
13
+
14
+ namespace CompletedAssets
15
+ {
16
+ public class Player : MonoBehaviour
17
+ {
18
+
19
+ //割愛
20
+
21
+ // ぶつかった瞬間に呼び出される
22
+ void OnTriggerEnter2D (Collider2D c)
23
+ {
24
+ // レイヤー名を取得
25
+ string layerName = LayerMask.LayerToName (c.gameObject.layer);
26
+
27
+ // レイヤー名がBullet (Enemy)の時は弾を削除
28
+ if (layerName == "Bullet (Enemy)") {
29
+ // 弾の削除
30
+ Destroy (c.gameObject);
31
+ }
32
+
33
+ // レイヤー名がBullet (Enemy)またはEnemyの場合は爆発
34
+ if (layerName == "Bullet (Enemy)" || layerName == "Enemy") {
35
+
36
+ // 【変更】
37
+ FindObjectOfType<Manager> ().DelayTitle ();
38
+
39
+ // 爆発する
40
+ spaceship.Explosion ();
41
+
42
+ // Explosionを削除
43
+ Destroy (gameObject);
44
+
45
+
46
+
47
+ }
48
+ }
49
+
50
+ //【IEnumerator DelayTitle() は、Manager.csに移行】
51
+ }
52
+ }
53
+ ```
54
+
55
+ Manager.cs
56
+ ```C#
57
+ using UnityEngine;
58
+
59
+ namespace CompletedAssets
60
+ {
61
+ public class Manager : MonoBehaviour
62
+ {
63
+ // …(中略)
64
+
65
+ // 【追加】
66
+ public void DelayTitle ()
67
+ {
68
+ StartCoroutine("DelayTitleCoroutine");
69
+ }
70
+
71
+ // 【追加】
72
+ IEnumerator DelayTitleCoroutine()
73
+ {
74
+ Debug.Log("crush");
75
+ yield return new WaitForSeconds(2.0f);
76
+ Debug.Log("2seconds");
77
+
78
+ GameOver ();
79
+ }
80
+ }
81
+ }
82
+ ```