##質問
カードゲームのシミュレーターを製作しているのですが、デッキの内容を確認するために以下のようなシステムを作ろうとしています。
・Transform DeckにあるGameObjectのリストdeckListの要素を、Buttonを押したときにTransform DeckSceneに生成する。
・もう一度Buttonを押したときにTransform DeckSceneに生成したオブジェクトを削除する。
しかし、二回目にオブジェクトをTransform DeckSceneに生成する際、エラーが発生します。
対処の方法をご存じの方がいらっしゃいましたらご教授願います。
##エラーメッセージ
MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.
##コード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ButtonController : MonoBehaviour 6{ 7 int i = 0; 8 public void CreateScene(Transform scene) //scene = DeckScene 9 { 10 if (i % 2 == 0) //sceneを表示するときの動作 11 { 12 scene.gameObject.SetActive(true); 13 14 foreach (GameObject x in Deck.deckList) 15 { 16 x.SetActive(true); 17 Instantiate(x,scene); 18 } 19 i++; 20 } 21 22 else if (i % 2 != 0) //sceneを非表示するときの動作 23 { 24 //DeckSenceから手動でカードの取り出しを行うことがあるため、deckListに再代入が必要 25 Deck.deckList.Clear(); 26 foreach (Transform childTransform in scene) 27 { 28 Deck.deckList.Add(childTransform.gameObject); 29 Destroy(childTransform.gameObject); 30 } 31 32 scene.gameObject.SetActive(false); 33 i++; 34 }
「Deck.deckList.Add(childTransform.gameObject);」でリストに追加した直後にそれを「Destroy(childTransform.gameObject);」で削除しているという処理はどう考えてもおかしいですが、何の意図でそのようにしているのでしょうか?
Addしたので、不要となったから、Destroyしようとしている?
でもDestroyは、Addで追加されたデータを破壊しようとしています。
(Addはコピーじゃない!)
という事でしょうか?
pepperleafさんのおっしゃる通りです。
DeckSceneの子オブジェクトをすべてdeckListに格納した後、deckList内のオブジェクトは残しつつDeckSceneの子オブジェクトのみを削除したい、ということになります。
言葉足らずで申し訳ありません。
回答1件
あなたの回答
tips
プレビュー