ウォーゲームを作る① ConstructionScript を使ってヘックスセルを敷き詰める

ヘックスマップのウォーゲームを作成する。
その最初の一歩として、ヘックスセルを敷き詰めてヘックスマップを作成する。
ヘックスセルを自動で敷き詰めるにはConstructionScriptを使う方法とEventBeginPlayを使う方法が考えられるが、両者には以下の違いがある。

  • ConstructionScript:レベルエディタにアクターを配置した時に実行される
  • EventBeginPlay:ゲームをプレイした時に実行される

今回はレベルエディタで処理の結果を確認したいので、ConstructionScriptを使用する。


考え方

ヘックスセルを並べるにあたり、ヘックスセルの一つ一つを下の図のようなインデックスで並べると考える。
f:id:tatsuyann:20200328112405p:plain
UE4上では縦がx軸、横がy軸となる。


実装

まず、あらかじめBlenderで正六角形のメッシュを作成し、UE4にインポートした。
f:id:tatsuyann:20200328113133p:plain

そしてBlueprintでActorを作成し、[HexMap]と名前をつける。
f:id:tatsuyann:20200324200909p:plain

[コンポーネント]パネルでInstanced Static Meshを追加する。
f:id:tatsuyann:20200325140809p:plain

[詳細]パネルの[Instanced Static Mesh]にインポートした[HexTile]を割り当てる。
f:id:tatsuyann:20200324201448p:plain

ヘックスセルを敷き詰める量やセルのサイズを設定するために、[マイブループリント]パネルで以下の変数を3つ作成する。
全ての変数について、[詳細]パネルの[インスタンスの編集可能]にチェックを入れておく。

変数名 初期値 説明
LenX Integer 8 x軸のタイルの数
LenY Integer 8 y軸のタイルの数
OuterRadius Integer 100 六角形の外側の円の半径

次に、[Construction Script]タブを開く。このConstruction Scriptはオブジェクトが配置される時に一度だけ呼ばれ流ので、ここにヘックスセルを自動で敷き詰める処理を書く。
f:id:tatsuyann:20200328113215p:plain

そして[HexMap]をビューポートにドラッグ&ドロップし、x座標・y座標・z座標を全て0にすれば、完成。
f:id:tatsuyann:20200328112843p:plain