フローフィールドマップ
Available in the Gaming Circle and Industries Circle
マップのヒエラルキー
FlowFieldMap
は、FlowFieldController
という名の細かいチャンクに分けられます。 各コントローラはタイルに分けられます。
FlowFieldMapUtility
FlowFieldMapUtility
は、LineOfSightのような便利なメソッドを持つ静的ヘルパークラスで、ワールドのポジションからマップのロケーションなどまでをカバーします。
フローフィールドマップを修正する
既存のマップを修正するには2通りの方法があります。
- 各タイルのコストを変更(マップ上の単独のタイルの永続的なコスト変更に使用):
C#
public void SetOriginalTileCost(Frame frame, Vector2Byte location, byte cost)
- コストモディファイヤ(一時的な変更に使用。RTSでのビルドなど):
C#
public int AddCostModifier(Frame frame, FPVector2 minPosition, FPVector2 maxPosition, byte cost)
public bool RemoveCostModifier(Frame frame, int modifierID)
- エリアコストモディファイヤ - RTS ビルディング(作成可能かつ破壊可能なもの) などの一時的な変更に使用されます。これはパラメータ化された領域に基づいてタイルのグループに適用されます。モディファイヤを追加するとその整数IDが取得され、さらに同じモディファイヤを簡単に削除するのに使用できます:
C#
public int AddCostModifier(Frame frame, FPVector2 minPosition, FPVector2 maxPosition, byte cost)
public bool RemoveCostModifier(Frame frame, int modifierID)
マップ作成
FlowFieldMap
は実行時に作成され、FrameContextに保管されます。
パラメータ
- Dimensions - マップの(X, Y) サイズ。サポートされる最大サイズは256x256です;
- Tile Size - 各タイルのサイズ;
- Controller Size - マップのサイズのサブディビジョン (マップのDimensionsはController Sizeの倍数である必要があります)。推奨されるController Sizeは8から20の間です;
- Max Portal Length - 隣接する2つのコントローラーに接続しているポータルの最大長。Max Portal LengthがController sizeよりも大きい場合には、2つのコントローラー間に複数のポータルが存在する可能性があります。ポータルが増えると精度が増しますが、CPU上は遅くなります;
- Cost Field - 各タイルのコスト。
C#
var ffMap = new FlowFieldMap(new Vector2Int(16, 16), FP._2, 8, 4, COSTS);
ffMap.Initialize(frame.SimulationConfig.ThreadCount, false);
frame.Context.FlowFieldMap = ffMap;
マップデータ
フレームコンテキスト
FlowFieldMap
は、大きなマップの場合に多くのデータを保持することができるので、そのようなデータをFrame内に保持するのは適切ではありません。
FlowFieldMapはFrameContextに保存されるため、変更は非常に慎重におこなう必要があります。クライアント間の非同期を防ぐため、検証されたフレームでのみ変更することが重要です。
フレームサイズが大きすぎるとパフォーマンスが低下し、再参加または遅れて参加するためのシリアライズデータが大きすぎて転送できない可能性があります(FlowFieldMapはこの問題を軽減するカスタムシリアライズを備えています)。
遅れて参加および再接続
FlowFieldMap
はフレームの一部ではないため、カスタムのシリアライズを実装します - FlowFieldMap.Serialize()を参照してください。