マッピング処理を作りたい。
まず UI を テクスチャに描画する方法を調べる。
・・・
これかな。
- UMG(Widget)をテクスチャ(RenderTarget)に描画する方法について
https://pafuhana1213.hatenablog.com/entry/2017/05/21/171809
FWidgetRenderer(UseGamma) というものを使えば良さそうだ。
次。
----
Widget に UIパーツを動的に配置していくにはどうしたらよいのだろうか?
・・・
これだ。
- ・[UE4] UMGのアニメーションと動的な配置
http://monsho.blog63.fc2.com/blog-entry-158.html?sp
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 になるようにマテリアル内でテクスチャ位置を調整。
- 探索済み範囲だけが表示されるようにマスクテクスチャも作成。マテリアル内で合成する。
ue4-master@ue4master80Mapping The World. 第0082回 / 地図を作る #ue4 #gamedev #indiedev #indiegamedev #indiegame #madewithunreal #vr… https://t.co/tYAAXNx80c
2021年02月12日 03:57
マスクテクスチャの位置がズレてる気がするけど、まぁ後で直そう。