ヘックスマップのウォーゲームを作成する。
その最初の一歩として、ヘックスセルを敷き詰めてヘックスマップを作成する。
ヘックスセルを自動で敷き詰めるにはConstructionScriptを使う方法とEventBeginPlayを使う方法が考えられるが、両者には以下の違いがある。
- ConstructionScript:レベルエディタにアクターを配置した時に実行される
- EventBeginPlay:ゲームをプレイした時に実行される
今回はレベルエディタで処理の結果を確認したいので、ConstructionScriptを使用する。
考え方
ヘックスセルを並べるにあたり、ヘックスセルの一つ一つを下の図のようなインデックスで並べると考える。
UE4上では縦がx軸、横がy軸となる。
実装
まず、あらかじめBlenderで正六角形のメッシュを作成し、UE4にインポートした。
そしてBlueprintでActorを作成し、[HexMap]と名前をつける。
[コンポーネント]パネルでInstanced Static Meshを追加する。
[詳細]パネルの[Instanced Static Mesh]にインポートした[HexTile]を割り当てる。
ヘックスセルを敷き詰める量やセルのサイズを設定するために、[マイブループリント]パネルで以下の変数を3つ作成する。
全ての変数について、[詳細]パネルの[インスタンスの編集可能]にチェックを入れておく。
変数名 | 型 | 初期値 | 説明 |
---|---|---|---|
LenX | Integer | 8 | x軸のタイルの数 |
LenY | Integer | 8 | y軸のタイルの数 |
OuterRadius | Integer | 100 | 六角形の外側の円の半径 |
次に、[Construction Script]タブを開く。このConstruction Scriptはオブジェクトが配置される時に一度だけ呼ばれ流ので、ここにヘックスセルを自動で敷き詰める処理を書く。
そして[HexMap]をビューポートにドラッグ&ドロップし、x座標・y座標・z座標を全て0にすれば、完成。