概要
Unreal Engine 初心者が Blueprint を触ってみた時の個人的な備忘録。
実行したらタイルを動的に敷き詰めるようにする
これだけ。
今回と次回の内容を含めたプロジェクト一式。
プレイヤーの作成と配置も含まれているが正直これを見た方が早い。
環境
UE 5.5.1
新規プロジェクトを作成する
何も入っていないプロジェクトから始める
- UE5 を起動して
ゲーム
タブからブランク
を選択 - プロジェクトの場所、プロジェクト名を入力
- 作成ボタンを押してプロジェクト作成
レベルを作成する
プロジェクトの作成直後は未保存のオープンワールドレベルが表示されている。
今回はこれを使わずに、もうちょいシンプルな内容のテンプレートで新規レベルを作成することにする。
レベルの保存用フォルダを作成
コンテンツブラウザの コンテンツ
フォルダ以下に [プロジェクト名]
のフォルダを作成し、
さらにその下に Maps
フォルダを作成する。
※ コンテンツ配下のトップに [プロジェクト名]
のフォルダを作る理由は下記を参照。
今後作成するアセットの名称なども大体これに従って命名する。
基本テンプレートでレベルを新規作成
メニューの ファイル
> 新規レベル
> 基本
で新規レベル作成。
Ctrl
+ S
を押すと保存ウィンドウが表示されるので、先ほどの Maps
フォルダ以下に名前を付けて保存 (名前は TestMap
とした)
デフォルトマップを変更
メニューの 編集
> プロジェクト設定
を開く。
プロジェクト
> マップ&モード
の Default Maps 内にある エディタのスタートアップマップ
と ゲームのデフォルトマップ
に、先ほど作成した TestMap
を指定する。
Floor を削除
要らないのでアウトライナーにある Floor
は Delete で削除しておく。
タイルを作成する
タイルとなるメッシュを用意する
タイルは3Dオブジェクトで表現するのでメッシュを適当に用意する。
※ プロトタイプで使うような簡単な物ならエディタのモデリングモードでも作れるようだけど、使い方がよくわからんので今回は Blender でキューブを作成した。
Props
フォルダを作成して FBX を D&D でインポート。
インポート設定はデフォルトにしたが、オフセットのZ軸を -90 にしておいた方が良いかも。
今回は忘れてやってないけど、まだテクスチャを貼っていないのでどの方向を向いているかは関係ないのでどっちでもいい。
タイル用のアクタを作成する (BP_BoardTile)
※アクタはレベルに配置可能なオブジェクトの基本単位。
[プロジェクト名]
のフォルダ以下に Blueprints
フォルダを新たに作成。
フォルダ内の適当な箇所で右クリック、表示されたメニューで ブループリント クラス
を選択。
親クラスを選択
> アクタ
を選択。
ブループリントが作成されるので、名前を BP_BoardTile
と命名。
スタティックメッシュコンポーネント追加
BP_BoardTile
をダブルクリックで開く。
左上にあるコンポーネントウィンドウの追加ボタンから スタティックメッシュコンポーネント
を追加。
次に、画面右にある詳細ウィンドウでスタティックメッシュを先ほど追加した SM_BoardTile
に変更。
最後に左上のコンパイルボタンを押してメッシュの設定は完了。
変数を追加
タイルは生成時に自身のグリッド座標を格納しておきたいので変数を1つ追加する。
GridPos
画面左のマイブループリント ウィンドウで変数欄の横にある+ボタンを押す。
新しい変数が追加されるので下記のように設定する。
- GridPos (Int Point)
Int Point は 2D 整数座標(x, y)を格納できる構造体。
タイルを管理するボードを作成する (BP_GameBoard)
タイルを生成 / 管理する為のアクタである BP_GameBoard
を新たに作成する。
変数を追加
BoardTiles
- BoardTiles (
Map
<キー: `Int Point`, 値: `BP_BoardTile`>)
Map は BluePrint で使える連想配列。
グリッド座標である Int Point をキーとして全てのタイルを格納する。
先ほどと同じように変数を追加する。型は別ウィンドウで変更するのでなんでも良い。
画面左の詳細ウィンドウで、変数の型を Map に変更する。
値を BP_BoradTile
にして完了。
TileSize
- TileSize (float)
タイルの実サイズを設定する変数。あとでタイルの生成位置を計算する為に使う。
変数を追加したら詳細ウィンドウでデフォルト値を設定しておく。
この値はタイルのモデルサイズ(縦横の幅 2.1m にしてあるので 210 にした)
関数を追加
CalcTileLocation
さきほどの TileSize とグリッド座標を掛け合わせてタイルの配置位置を計算する為の関数を用意する。
今回は関数にインプット(引数)とアウトプット(戻り値)も詳細ウィンドウから追加。
インプット
- TileSize (float)
- GridPos (IntPoint)
アウトプット
- Location (Vector)
Blueprint
GenerateTiles
ローカル変数
関数内でのみ使用可能なローカル変数を定義しておく。
ループ中に現在のグリッド座標を一時的に保持しておく為の変数。
- CurrentGridPos (Int Point)
インプット
- GirdSize (Int Point)
Blueprint
(1). x, y の2重ループを回す
(2). インデックス (x,y) を引数として CalcTileLocation に渡しワールド座標の位置を計算
(3). ワールド座標を引数に SpawnActor でタイルを生成
(4). 生成したタイルを BoardTiles へ格納
ゲームモードを作成する (GM_TestGame)
今度はブループリントクラス作成時にアクタではなくゲームモードを選んで作成する。
名前は GM_TestGame
変数を追加
GameBoard (BP_GameBoard)
関数を追加
InitGameBoard
インプット
- GirdSize (Int Point)
Blueprint
イベントグラフ
InitGameBoard の引数には x:5, y:5 を指定して 5x5 のサイズでボードを作成する。
ゲームモードをオーバーライドする
ワールドセッティングウィンドウ内のゲームモードオーバーライドを GM_TestGame に変更。
実行する
今回設定した 5x5 で表示される(はず)
次回はこちら
おわり