このセクションではモーションプランについて説明をします。
多くのゲームでは対抗者やNPC、敵などをプレイヤーの動きに合わせて賢く歩きまわるようにしたいことがあります。そのために巡回ルートの経路間に邪魔な物が入らないように設定する必要があります。GameMaker:Studioはモーションプランを使うことで、そのような経路作成の手助けする機能を提供します。
モーションプランをGameMaker:Studioで使うには、「mp_」で始まる関数を利用します。それらは大きく分けて3種類用意されています。
この関数群は、インスタンスにとって衝突フリーのパスを算出します。このパスが算出された後は、目標への移動先をインスタンスに割り当てることができます。
パスの計算には多少時間がかかりますが、その後のパスの計算が高速になります。ただし、障害物の位置を変更するなどした場合には経路状況が変化するため、パスの再計算が必要となります。
またパスが見つからなかった場合には、これらの関数は失敗する可能性があることに注意してください。
これらは基本的な回避機能がありシンプルなAIに適しています。可能であれば直進をしますが、必要に応じて異なる方向へ進みゴールを目指そうとします。これらの関数はインスタンスの"Step"イベントで処理すべきです。
mp_grid 関数はグリッドベースのアプローチ(A*アルゴリズム)に基づいて経路探索を行います。 これは複雑なアルゴリズムのため処理時間を多く必要とし、それでも失敗する可能性はありますが、より多くの場合は最適な経路を見つけることができます。
まずルーム(もしくは経路に関連するエリア)を網羅するグリッドを作成します。グリッドサイズを小さくしてフィールドを細かく分割すると経路探索は正確になりますが、計算処理が重くなります。逆にグリッドサイズを大きくすると大雑把な計算となりますが軽い処理となります。
例えば400x200ピクセルのルームを10x10のグリッドに分割すると1セルあたり40x20ピクセルとなり、20x20グリッドだと20x10ピクセル、40x40グリッドだと10x5ピクセルとなり、1セルが小さくなるほど計算の精度が上がります。
次に、回避する障害物のオブジェクトを登録します。登録したオブジェクトが部分的にセルに重なっていても移動禁止となります。
最後に、開始座標と目標座標を指定し、これら2つの座標の間の最短経路を計算します。
なお経路探索はオブジェクトの座標が中心にあること基準に行われることに注意してください。また重要な設定はセルのサイズです。大きくしすぎると障害物に当たりやすくなるため経路を見つけにくくなります。小さくすると経路が多くなり処理時間がかかります。
グリッドベースのアプローチ(A*)は多くのプロのゲームで使われており非常に強力ですが、どの領域に適用するか、セルサイズをどれくらいにするか、はよく考えることが必要です。正確な経路探索が必要でなければ他の mp_ 関数で代用することでも充分に問題を解決できる可能性もあります。
またどのアプローチをとってもパーフェクトな解決策になるとは限らないので、ゲーム内容に合わせてより適した選択をすることが重要となります。