質問: new List(); hideGameObject.Add(GameObject.Find("hit.collider.gameObject")); if (Input.GetMouseButtonDown(1)) { hideGameObject[-1].SetActive(true); hideGameObject.Remove(hideGameObject.count - 1); //countの定義が含まれていないとエラーメッセージが出る } } ] ```
回答: Destroyを使った場合、完全に消去されているのでInstantinateで再生成する他ありません。 非表示にするだけなら`gameObject.SetActive(false)`または 描画系のコンポーネントをオフにする(例えば`GetComponent().enabled = false;`)といいかと思います。 後は配列やリストを使って「どの順番でオブジェクトが選択されたか」を記憶しておけばよいかと。 コメントを受けてソースコードを修正しました。 ちゃんと動作確認してませんのでエラー起こったら適宜修正お願いします。 ``` public class Switching : MonoBehaviour { //各メソッドで使うのでクラス変数にする private List hideGameObject; void Start () { //初期化は開始直後にやっておく(初期化しておかないとエラーになる) hideGameObject = new List (); } public void Update() { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); if (Physics.Raycast(ray, out hit, distance)) { //Destroy(hit.collider.gameObject); //↓差し替え hit.collider.gameObject.SetActive(false); //「消された時」に保存する hideGameObject.Add (hit.collider.gameObject); //ちなみに「GameObject.Find」は名前で検索なので //GameObject.Find ("hit.collider.gameObject")は //「hit.collider.gameObjectという名前のオブジェクトを探す」ことになってしまう。 //そうではない筈なのでここも変える。 } } } void ReDisplay() { if (Input.GetMouseButtonDown (1)) { //再表示するのは「一番後ろ」のオブジェクト。 //[-1]だと「-1番目のオブジェクト」になってしまうのでこれもエラーが出る。 //考え方は配列と一緒なので「配列の数-1」が最後尾。 hideGameObject [hideGameObject.Count-1].SetActive (true); //「countの定義が含まれていない」→「Count」が正しい(頭文字が大文字) //予測変換を頼ったりListクラスのリファレンスを見ると分かる。 hideGameObject.Remove (hideGameObject.Count - 1); } } } //ここ ] になっていたのでコピペミスかもしれませんが一応直してあります ```