実現したいこと
ボタンを押すたびにオブジェクトのインスタンスを生成することができました。
このインスタンスをボタンを押すごとに1つずつ削除する方法を知りたいです。
できれば一番新しく生成したインスタンスから削除するようにしたいです。
(スタックのイメージ)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
Instantiate()の戻り値が生成されたオブジェクトなので、それを格納しておき、Destroy()で削除すればよいです。
投稿2022/08/06 11:59
総合スコア10284
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
GameObject g1 = Instantiate(myCube, myCube.transform.position, myCube.transform.rotation) as GameObject;
試しに上のようなコードで格納しようとしましたがエラーが出ました。。。
間違えている箇所がありましたら教えていただきたいです。
エラー内容:参照の変換、ボックス変換、アンボックス変換、折り返しの変換、または null 型の変換で、型 'UnityEngine.Transform' を 'UnityEngine.GameObject' に変換できません。
myCubeはGameObject型になっていますか?
Transform型になっているような気がしますが。
ご指摘の通りTransform型になっていたので修正しました。
ありがとうございます。
変数g1に戻り値を格納するところまではできましたが、削除ができません。
具体的には、生成ボタンと削除ボタンに同じスクリプトをあてているのに、削除ボタン側の変数が空のままになってしまうのですが、何が原因だと思われますか?
何度も質問してしまい申し訳ありません。
g1を関数の中で定義しているのであれば、それが原因です。
関数の中で定義された変数は、その関数の中でしか使えず、違う関数内で同じ名前で定義しても、別物なので違う値になります。
複数の関数にまたがる場合は、その変数はクラスに定義する必要があります。
というかそもそも、g1は1つしか格納できないので、YAmaGNZさんのようにStackに格納すべきだと思いますが、違いますか?
g1を関数外(クラス内)に定義していますが、結果は変わりませんでした。
スタックを使う方法も試しましたが、ボタン1側の処理でスタックにオブジェクトを入れても、なぜかボタン2側のスクリプトではスタックが空になっていて、オブジェクトを削除することができませんでした。。。
ボタン1とボタン2は同じインスタンスになっていますか?
同じスクリプトでも、個々にアタッチすると、別物として扱われますよ。
Unityでの変数の受け渡しについて調べたところ、public staticで定義することでゲーム全体に変数が保存されることがわかり、求めていた処理が実現できました。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。