前提・実現したいこと
GameObject型変数に入れたゲームオブジェクトを動的に変更する方法とインスタンスの関係を教えて下さい。
節操なく敵キャラを生成してはDestroyしていると敵キャラの管理ができなくなりそうという不安から
一度に出現できる敵を10枠までと定め、IDやパラメータ、名前、prefabなどを敵の出現時にstatic変数に代入して枠内で使いまわそうと思ったのですがprefabの交換が上手くいきません。
■過程
staticで宣言したGameObject型変数enemy1に、敵キャラAのプレハブprefab_Aを用いてインスタンスしました。
prefab_Aのプレハブを元にインスタンスが生成されました。
この敵キャラを色違いの別キャラに切り替えようと、Iキーを押すと以下の処理を走るように記述しました。
enemy1 = prefab_B;
enemy1に別の敵キャラのプレハブprefab_Bを代入しました。
しかし、敵キャラがシーン上で差し替わる気配はありません。
なのでenemy1をprefab_Bでインスタンスし直しました。
enemy1 = Instantiate(prefab_B, new Vector3(3.0f, 0.0f, 0.0f), Quaternion.identity);
敵キャラBはインスタンスされましたが、敵キャラAが残ったまま敵キャラBが別のオブジェクトとしてインスタンスされました。
enemy1の中身のゲームオブジェクトを動的に切り替えて運用しよう!
staticな変数で宣言すれば、中身は常に一つしかないし安心!…と目論んでいたのですが、ダメでした。
Kキーを押すとenemy1のゲームオブジェクトをDestoryする記述を追加しました。
すると最後にインスタンスしたprefab_Bの敵が消えました。
再度Iキーを押してインスタンスを試したところGameObjectはすでに削除されているとNullエラーが帰ってきました。
GameObject変数に入っているゲームオブジェクトそのものを動的に切り替えるにはどうしたらよいでしょうか?
C#
1 2public class Enemy1 : MonoBehaviour 3{ 4 public GameObject prefab_A; 5 public GameObject prefab_B; 6 7 public static GameObject enemy1; 8 9 void Start() 10 { 11 enemy1 = Instantiate(prefab_A, this.transform.position, Quaternion.identity); 12 } 13 14 void Update() 15 { 16 if (Input.GetKey(KeyCode.I)) 17 { 18 19 //enemy1 = prefab_B; 20 21 enemy1 = Instantiate(prefab_B, new Vector3(3.0f, 0.0f, 0.0f), Quaternion.identity); 22 23 } 24 25 if (Input.GetKey(KeyCode.L)) 26 { 27 Debug.Log("自身がアタッチされてるオブジェクトを削除"); 28 Destroy(this.gameObject); 29 } 30 31 if (Input.GetKey(KeyCode.K)) 32 { 33 Debug.Log("中身のenemy1インスタンスを削除"); 34 Destroy(enemy1.gameObject); 35 } 36 37 } 38 39}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/18 11:33