第0082回 / 地図を作る | HK-87@UEのブログ

HK-87@UEのブログ

UE4で理想のVRゲームを作るまでの軌跡

マッピング処理を作りたい。

まず UI を テクスチャに描画する方法を調べる。

・・・
これかな。


FWidgetRenderer(UseGamma) というものを使えば良さそうだ。

次。

----
Widget に UIパーツを動的に配置していくにはどうしたらよいのだろうか?

・・・

これだ。


Add Child To Canvas というノードで実現できるようだ。

----
これでマップを作るための情報は集まったはず?

手順を確認する。

  • マップに配置する各要素の Widget を作る。
  • マップを表示するための Canvas Widget を作る。
  • マップ描画用のレンダーターゲットを作成
  • Canvas Widget をテクスチャにレンダリングする処理作成
  • テクスチャをマップモデルに貼り付ける
  • マップ表示データを管理するシステム作成
  • 世界の配置物データに基づいて Widget を作成。Canvas Widget に追加する仕組み作成。

必要な表示要素を作る。
とりあえず必要なものは・・・

  • 洞窟

それぞれ Widget として作成。
これを Add Child To Canvas で並べればいいはず。

試しにならべてみる。
どこに処理を書く? -> マップのBP

テクスチャにレンダリングする関数追加。

あ、地図モデルにテクスチャを貼り付けるには、貼り付ける面のマテリアルを分けておかないとだめだ。
UVをそれらしく設定する。

-> OK。

----
んー、なんだか思い通りの位置に表示できないな。
Pivot をアイコン画像の中心にしているつもりだけれども、左上基点で表示されてしまう。

どうするのがいい?

・・・

なるほど。
Slot の概念を理解した。

Widgetの表示位置制御は、親のWidgetが何なのかによって変わるのか。
Canvas にしておくと SetPosition で直接的に座標を制御できるので扱いやすい。

大本の Widget を Canvas、子のルートも Canvas にしておく。
SetPosition で表示位置を指定、
アイコンの基点座標を中心にするためには、子の Canvas Panel Slot > Alignment に (0.5, 0.5) を指定しておけばよし。
※かつ、子のルート(CanvasではなくWidget自体)の Pivot は 0.0, 0.0 にしておかないとスケール時にズレる

----
処理を整理。

  • ロードされている範囲全体を 2048 x 2048 のマップテクスチャに描画。
  • 表示モデルのアスペクト比を考慮しつつ、表示範囲が uv 0.0 ~ 1.0 になるようにマテリアル内でテクスチャ位置を調整。
  • 探索済み範囲だけが表示されるようにマスクテクスチャも作成。マテリアル内で合成する。

OKー。



※動画

 

マスクテクスチャの位置がズレてる気がするけど、まぁ後で直そう。