質問するログイン新規登録
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1482閲覧

unityで敵が死んだら3秒後に復活するようにしたいです

mad-d

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2023/07/18 00:50

編集2023/07/18 07:25

0

0

実現したいこと

unityにて2Dアクションを作っています。
敵が死んだら3秒後に復活する」というコードを書きたいのですが、死ぬところまではできたんですけどその後の、3秒後に復活するところで、詰まっています。
何を書き加えればいいですか?

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class BombEnemy : MonoBehaviour 6{ 7 public AudioClip deathSound; // 死亡時の音声 8 9 public float breakForce = 10.0f; // 破壊に必要な力 10 11 Animator anim; 12 [SerializeField] Transform endPoint; 13 14 Vector3 startPos; // 開始位置 15 Vector3 endPos; // 終端位置 16 Vector3 destPos; // 次の目的地 17 18 float speed = 3f; // 移動速度 19 float rotateSpeed = 180f; // 回転速度 20 float rotateNum; // 方向転換時の回転量 21 22 public float explosionForce = 10.0f; // 爆発の力 23 public float explosionRadius = 5.0f; // 爆発の半径 24 public GameObject explosionPrefab; // 爆発のエフェクト 25 26 private Rigidbody rb; 27 private AudioSource audioSource; 28 29 void Start() 30 { 31 anim = GetComponent<Animator>(); 32 startPos = transform.position; 33 endPos = endPoint.position; 34 destPos = endPos; 35 rb = GetComponent<Rigidbody>(); 36 audioSource = GetComponent<AudioSource>(); 37 } 38 39 void Update() 40 { 41 if (GameManagerScript.status != GameManagerScript.GAME_STATUS.Play) 42 { 43 return; 44 } 45 46 // 端に到達した時の方向転換処理 47 if ((destPos - transform.position).magnitude < 0.1f) 48 { 49 // 回転途中の場合 50 if (rotateNum < 180) 51 { 52 anim.SetBool("walk", false); 53 transform.position = destPos; 54 55 float addNum = rotateSpeed * Time.deltaTime; 56 rotateNum += addNum; 57 transform.Rotate(0, addNum, 0); 58 return; 59 } 60 // 回転し切った場合 61 // 次の目的地の設定と回転量のリセット 62 else 63 { 64 destPos = destPos == startPos ? endPos : startPos; 65 rotateNum = 0; 66 } 67 } 68 69 // 次の目的地に向けて移動する 70 anim.SetBool("walk", true); 71 transform.LookAt(destPos); 72 transform.position += transform.forward * speed * Time.deltaTime; 73 } 74 75 void OnCollisionEnter(Collision other) 76 { 77 // 衝撃を受けたら爆発する 78 if (other.relativeVelocity.magnitude > 0.0f) 79 { 80 Explode(); 81 } 82 } 83 84 void Explode() 85 { 86 // 爆発エフェクトを生成 87 Instantiate(explosionPrefab, transform.position, Quaternion.identity); 88 89 // 衝撃を加える 90 Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius); 91 foreach (Collider nearbyObject in colliders) 92 { 93 Rigidbody rb = nearbyObject.GetComponent<Rigidbody>(); 94 if (rb != null) 95 { 96 rb.AddExplosionForce(explosionForce, transform.position, explosionRadius); 97 } 98 99 // 壊れるオブジェクトだった場合は破壊する 100 Breakwall wall = nearbyObject.GetComponent<Breakwall>(); 101 if (wall != null) 102 { 103 wall.Break(); 104 } 105 } 106 107 // 自分を破壊する 108 Destroy(gameObject); 109 110 // 死亡時のSEを再生 111 if (deathSound != null) 112 { 113 audioSource.PlayOneShot(deathSound); 114 } 115 } 116}

試したこと

敵が死んだ後に、Prefabから生成しようとしたんですけど中々上手くいきませんでした。

補足

この敵は爆弾敵で、衝撃を受けたら爆発して死ぬコードを書きました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえず手っ取り早く実装するなら、Instantiateされてから3秒後にPrefabをInstantiateするクラス(卵みたいですね)を死亡時に生むようにする…などは如何でしょうか。

もしくはDestroyではなく画像を非表示にするようにして、3秒後にステータスを初期状態に戻して再表示させるなどの手もあります。

投稿2023/07/18 21:21

UnchFullburst

総合スコア669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mad-d

2023/07/21 00:25

ありがとうございます! やってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問