ゲーム開発のシチュエーションで学ぶLINQ:Whereメソッド
はじめに
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