はじめに
今回は匿名クラスとLINQを組み合わせて使うことについての記事になります!
匿名クラス
using UnityEngine; public class Hoge : MonoBehaviour { private void Start() { var enemy = new { Name = "Slime", Exp = 10 }; Debug.Log(enemy.Name); } }
このように匿名型のクラスを作ることができます。
実際の例
using UnityEngine; using System.Collections.Generic; using System.Linq; public class Hoge : MonoBehaviour { private void Start() { var gameObjects = GameObject.FindGameObjectsWithTag("Enemy") .Select(t => new { Name = t.name, Distance = (t.transform.position - transform.position).magnitude }) .OrderBy(t => t.Distance); foreach (var item in gameObjects) { if (item != null) Debug.Log(item.Name); } } }
このコードはHogeコンポーネントを持つゲームオブジェクトから近い順に”Enemy”タグを持つゲームオブジェクトの名前を表示しています。
どんな処理をしているかざっくりと書くと、
・”Enemy”タグも持つGameObject[]
を取得
・ゲームオブジェクトの名前・距離をフィールドとする匿名クラス
のコレクションに変換
・距離によってソート
といった流れになっています。
さいごに
LINQと匿名クラスを併用することで幅がぐんと上がると思います。
是非うまく使っていきましょう!