オブジェクトのpositionの値を見て一括で消す方法を備忘録します。
■環境
実装
まずはコードを載せます。
using System.Linq; ~~~~~~~省略~~~~~~~~ float limit_x = 100; GameObject[] list = GameObject.FindGameObjectsWithTag("タグ名"); var targets = list.Where(x => x.transform.position.x <= limit_x); foreach (var go in targets) { Destroy(go); }
コードを抜粋して解説していきます。
指定タグのGameObjectを取得
GameObject.FindGameObjectsWithTag
は指定タグが付いてるGameObject一覧を取得できます。
大量生成するGameObjectには独自タグをつけるのがいいと思います。
Where句で条件に合うものだけにフィルタする
Where句で指定座標以下のGameObjectに絞り込みます。
※Whereは System.Linqのusingが必要です。
上記コードだとx
の値にしていますが、それはゲームに合わせてy
やz
に変えます。
<= limit_x
は以下ならという条件ですね。以上にしたければ>= limit_x
にすればOKです。
消す対象をDestroyで消す
あとはそれらをDestory(go)
で消しています。
これで完成です。
どういうケースで使うのか?
例えばプレイヤーが移動して表示されなくなった障害物を消す時にそのオブジェクト座標が指定座標以下(以上)なら消すといった時に使うイメージです。