【UE4】UMGでミニマップを作る時に苦戦したこと

今制作中のゲームで特定のオブジェクトを表示するミニマップUIを作ったのですが思った以上に苦戦した...

作るに当たってうなうなぎさんのこの記事等を参考にしました。

imoue.hatenablog.com

 

まずWidgetを動かすにはアクターなどを動かす時みたいにどの方向にどのくらいのスピードでとかではなく、直接Widgetの座標を動かします。

当たり前といえばそうなのですがそんな便利なのはないのかなと最初は期待していました...

そしてその座標を動かすにはSet Positionを使います。

これはうなうなぎさんの記事でも紹介されています。

f:id:shuntaendo:20160119162528p:plain

Targetに動かしたいWidget(UIの部品みたいなもの。ボタンとかテキストとか)を割り当ててIn Positionの値を変えればいいという単純なもの。

 

これで動かすことはできたのですが特定のオブジェクトを表示するミニマップUIなのでオブジェクトの数がゲーム中に変わることも十分ありうる!

どうゆうことかといいますと例えば敵が表示されるUIを作る場合。

f:id:shuntaendo:20160119163612p:plain

・敵が消えたらWidgetを消して

f:id:shuntaendo:20160119163922p:plain

・敵が新しくスポーンされたら新しいWidgetを増やさないとならない!

f:id:shuntaendo:20160119164001p:plain

これが意外と苦戦しました...

方法は2つ

・追加したいWidgetを作成したウィジットを別で作ってそこから引っ張ってくる方法

・メインとなるCanvasからChild to Actorで子供を作ってCanvas Slot Panelとして出力する方法

 

AnswerHubでも投稿したらnullponullさんが回答してくれました!

BPからUMGのCanvas内にpaletteを追加することは可能ですか? - UE4 AnswerHub

 

僕はWidgetを別で作る方法で作成しました。

f:id:shuntaendo:20160119164916p:plain

二度手間というかWidgetを2つ作らなきゃいけないので結構邪道な感じしますw

 

それで実際に作ったのがこんな感じ(去年の動画ですが...w)

 

2つ目のやり方も子供から子供作るやり方なのでどちらも邪道な感じがします...

孫かな?

もっといい方法あったら教えてもらえると喜びます~!