【UE4】動的なUIの作り方

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

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

imoue.hatenablog.com

 

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

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

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

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

f:id:shuntaendo:20160119162528p:plain

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

 

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

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

f:id:shuntaendo:20160119163612p:plain

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

f:id:shuntaendo:20160119163922p:plain

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

f:id:shuntaendo:20160119164001p:plain

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

方法は2つ

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

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

 

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

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

 

僕はウィジットを別で作る方法で作成しました。

f:id:shuntaendo:20160119164916p:plain

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

 

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

 

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

孫かな?

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