0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-10

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

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

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

結論

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);	
		}
	}
}

参考リンク

ScriptReference/Object.Destroy

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?