👌

ゲーム開発のシチュエーションで学ぶLINQ:Whereメソッド

2023/08/07に公開

はじめに

LINQにはじめて触れる方や、過去に詰まった経験のある方のために、この記事を執筆しています。LINQの勉強中、どのシチュエーションでどのメソッドを使うべきか戸惑うことはありませんか?また、知識として学んだはずのメソッドを、実際の開発時に忘れてしまうことも。そんな方々の課題を解決するため、ゲーム開発でよく遭遇する実例を通じて、LINQのメソッドを解説します。今回は初回として、Whereメソッドを紹介します。

ゲームのシチュエーション

題材

今回のシチュエーションは、ファイアーエムブレムの様なターン制ストラテジーを題材とします。

シナリオ

中世の戦場を舞台としたターン制ストラテジーゲームです。プレイヤーは騎士、弓兵、魔法使いなどのユニットを持ち、敵との戦闘を繰り広げます。各ユニットにはHPが設定されており、戦闘中にダメージを受けるとHPが減少します。

戦闘が終了した後、プレイヤーは戦場で倒れてしまった(HPが0以下の)ユニットを確認できる機能が求められています。この機能の実装に、LINQのWhereメソッドを用いることで、簡潔に実現できます。

サンプルコード

実際の実装は、以下の通り行えます。
characters.Where(character => character.HP <= 0)で体力が0以下のキャラを集めて、ToList()でListに変換しています。

public class GameManager : MonoBehaviour
{
    private List<Character> characters;

    private void Start()
    {
        characters = new List<Character>(FindObjectsOfType<Character>());
    }

    // 戦場で倒れたユニットをリストアップするメソッド
    public List<Character> GetFallenUnits()
    {
        return characters.Where(character => character.HP <= 0).ToList();
    }
}

Whereメソッドの解説

最後にWhereメソッドの解説です。
WhereメソッドはLINQにおいて、特定の条件を満たす要素だけを集めるメソットです。例:数値リストから偶数だけを取り出すなどできます。

おまけ:他にもWhereメソッドが使われるシナリオ

アイテムのフィルタリング

インベントリ内で特定の条件を満たすアイテム(例: 価格が一定以上、種類が武器など)をリストアップする際に使用。

敵の選択

近くにいる敵、特定の属性を持つ敵(例: 毒を持っている、飛行タイプなど)を選択するために使用。

クエストの検索

完了していないクエストや特定の条件を満たすクエスト(例: 一定のレベル以上が必要など)を検索する際に使用。

スキルのアクティベート

アクティブなスキルや、特定の条件(例: クールダウン中でない、必要マナがあるなど)を満たすスキルを選択する際に使用。

ゲーム内のイベントトリガー

特定の条件を満たすキャラクターやオブジェクト(例: 一定のエリアに入った、特定のアイテムを持っているなど)が存在するかをチェックする際に使用。

チームのメンバー選択

一定の能力値を持つキャラクター、特定の職業や役割を持つキャラクターをチームに選択する際に使用。

おわりに

Whereメソッドは比較的、ゲーム開発にも利用しやすいと思います。今後もLINQのメソッドを、実際の使用例を含めて紹介するので、興味があればいいねで応援してください。

Discussion