目次
はじめに
UEでは多くの解説サイトでシーンキャプチャ2Dを利用したミニマップが実装されていますが、モバイル環境など性能に制限が多い場合では安易に使うことを避けたいところです。
そこでカメラを使用せず、座標系を計算することでミニマップを実装する手法をここでは紹介いたします。
また、いつものマップだと味気ないのでこちらのアセットを使用しました。
▽この記事で出来ること
解説
①ボリュームの配置
レベル上の座標系からサイズを計測したいので基準となるボリュームを配置します。
アウトライナで名前をMinimapVolumeにしました。
当たり判定はすべて無効にしておきましょう。
レベルに配置したらのブラシセッティングのスケールを変更してミニマップに表示したいエリアを設定します。計算がやりやすいようにX,Y同じ値を入れておきます。
このときアクタ自体のスケールを変更しないようにしてください。
②ミニマップの背景を撮影する
ボリュームの範囲を撮影してトリミングします。
▽トリミング後
③画像とアイコンのインポート
フリーアイコンを取り扱っているサイトから現在位置を示すアイコンをダウンロードします。
マップの縁用の透過画像を用意します。
UEにインポートします。
④ウィジェットのデザイン編集
ウィジェットの作成や表示は過去の記事でたくさん書いているので省略します。
CanvesにImageを2つ配置します。
用意した画像を設定します。
この時、背景画像のサイズは512×512にしました。
⑤+α マップを円形にくりぬく
マテリアルを使用することでマップを円形にすることができます。
⑥ウィジェットのイベント編集
1.ボリュームの取得
まずなんとかしてレベルに配置してあるボリュームを取得します。
複数ある場合はレベルブループリントから渡しても〇
2.位置の更新
Volumeから見たプレイヤーの相対位置をInverseTransformを使って取得します。
float型の変数VolumeScaleとMapImageScaleを作成してレベル上の比率からマップ上の比率に変換します。
SetRenderTransformで位置を更新します。
3.回転の更新
回転は前ベクトルからアークタンジェントして度を求めます。
キャラクターはメッシュが90回転しているので最後に補正します。
回転を補正します。
▽全体像
4.変数の設定
MinimapVolumeのブラシのXをコピーして
VolumeScaleのデフォルト値にします。
ウィジェットのデザイナーからBackのサイズXをコピーして
MapImageScaleに貼り付けます。
実行してマップにプレイヤーが同期していたら完成です。
位置の制御にはレンダートランスフォームを使用しているのでキャンバスパネルの位置を編集すれば自由に位置を調整できます。
▽ピボットを左下してみた例
関数にまとめて使いやすくしたものを共有しておきます。
最後に
プレイヤーキャラの場所を別のアクターにすることでギミックやNPCなどもアイコンとして表示することができます。ぜひ挑戦してみてくださいね。
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。