はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】LINQと匿名クラスを組み合わせて使う

はじめに

今回は匿名クラスと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と匿名クラスを併用することで幅がぐんと上がると思います。
是非うまく使っていきましょう!