【Unity】positionの値が指定以下(以上)のオブジェクトを一括で消す

オブジェクトのpositionの値を見て一括で消す方法を備忘録します。

■環境

  • MacOS Monterey (12.1) Unity (2021.3.2f1)
  • 実装

    まずはコードを載せます。

    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の値にしていますが、それはゲームに合わせてyzに変えます。

    <= limit_x以下ならという条件ですね。以上にしたければ>= limit_xにすればOKです。

    消す対象をDestroyで消す

    あとはそれらをDestory(go)で消しています。

    これで完成です。

    どういうケースで使うのか?

    例えばプレイヤーが移動して表示されなくなった障害物を消す時にそのオブジェクト座標が指定座標以下(以上)なら消すといった時に使うイメージです。