つかぱい.com

どうせなら好きなことを書いていたい

UnityでScriptをアタッチしたオブジェクトを削除したい。

やりたいこと:落ちゲーのようにたくさんの同一オブジェクトを作ってぶつかった物だけを消したい

ググってもうまい回答を探すのが難しかったので個人的にうまくいったことだけを載せています。

※余裕があったら何でそうなるのかは調べますが、ご存知の方がいればコメントしていただけると嬉しいです。

結論

Destroy(gameObject);で設定するとうまくいった。

変更した実装

今までの実装

今までは、インスペクターで自分のオブジェクト名を指定して削除する仕様にしていた。 この場合はすでにGameObjectがscene内内にいる場合は有効 でも、ファクトリーっぽく自動生成される場合はちょっと困った。

 void OnCollisionEnter2D(Collision2D collision)  { // 衝突したとき
        // もし、衝突したものの名前が目標オブジェクトだったら
        if (collision.gameObject.name == targetObjectName) {
      //今までは一個だけのオブジェクトを削除していたのでオブジェクトの名称を直接してしていた。
            GameObject DestroyObject = GameObject.Find(DestoryObjectName);
            Destroy(DestroyObject); 
        }

うまくいった実装

こっちの実装ではアタッチしているgameobjectを取得して削除する、という仕様に切り替えた でも、何で公式に書いているようにDestroy(this);で消さないの?ということもあると思うが、thisの場合だとなぜかうまく消えなかったのでこっちを採用した。 その辺りは、バージョンなどが関係するのかな、わからんけど

 void OnCollisionEnter2D(Collision2D collision)  { // 衝突したとき
        // もし、衝突したものの名前が目標オブジェクトだったら
        if (collision.gameObject.name == targetObjectName) {
                //複数の同じオブジェクトを生成してぶつかった物を削除するのであれば
                //シンプルにgameObjectをさして削除するとオブジェクトが消える
            Destroy(gameObject);    
        }
    }
}