この記事はUnreal Engine 4 (UE4) Advent Calendar 2015 24日目の記事です。
-------------------------------------------------------------------------------
4.Tips
その他、UMGに関して調べたり試したことを適当に乗っけておきます。超雑多。
4.1.ポーズ
ゲームをポーズしたとき、Actor継承のクラスではTickが停止する。
しかしUserWidgetでは停止しないため更新イベントが走り続ける。
こまった...。
ちょっと回避策を練る。
親Widgetを作り、変数にフレーム時間をつっこむ。
ポーズかかってたら0.0を入れておく。
以降、作成するWidgetは上記のWidgetを継承し、変数からフレーム時間を取得する。
これでタイマなどDeltaTimeを使用する機能は抑止できる。
ただこれだと毎フレーム呼ばれる問題は残っている。
また、アニメーションも停止できない。
Widgetを量産することを考えると、全WidgetにActorのTick更新制御できる機能が欲しいかな...
4.2.Widget
テキストなどを複数配置する時など、以下のように親に貼り付けすると属性や詳細の内容を複製できる。ただそれだけだけど、テキストの複製とか面倒だからね。
4.3.Invalidiation Box
更新を行わないWidgetに対してキャッシュを使用しない描画をするかどうか。
実験中だけどパフォーマンスは果たして改善するのか。
クラス設定から以下のチェックボックスをチェック。
また、適応するWidgetにもチェックを入れる。
使用前(80fps前後)。
使用後(110fps前後)。
確かに効果があった。
ただしこの設定を行った状態で更新を行うWidgetがあると(例えばfpsを表示するテキストを追加したりすると)40fps前後まで下がった。
4.4.サウンド
Widget内でサウンドを再生する場合、以下のノードから再生できる。
ただし、以下のノードは単発再生のみなので途中で停止できない。
また、User WidgetクラスはComponentを設定することができないのでAudioComponentも配置できない。
回避策
AudioComponentを変数として用意し、Widget生成時に渡す。
こうすることでWidget内で再生、停止はできるようになった。
実際にサウンドを制御するWidgetが音源データを持っていないのは違和感があるけどとりあえず。
4.4.描画優先
描画優先順(ZOrder)を整理。
・同一Slot内
異なるZOrder:ZOrder準拠
同一ZOrder:後優先
・同一Widget内
異なるZOrder:ZOrder準拠
同一ZOrder:後優先
・同一Viewport内
異なるZOrder:ZOrder準拠
同一ZOrder:後優先 (Create順)
5.1.参考
5.1.1.参考サイト
その他、更新の新しい公式ドキュメント
Invalidiation Box(公式ドキュメント)
UMGのパフォーマンス向上に関して
イベントでUIの更新を操作する(公式ドキュメント)
UMGを使用したWidgetの更新に関する記載など
UMGのベストプラクティス(公式ドキュメント)
スケーリングや最適化のコツなど
Unreal Match 3(公式ドキュメント)
サンプルプロジェクトUnreal Match 3について
5.1.2.参考プロジェクト
UMGを使用するにあたって参考になりそうなサンプルプロジェクト
・ContentExamples
・Unreal Match 3
サンプルは全部見れていないのでなんとも言えないのですが、
UMGはVer4.4以降からだったので基本的には初期に出たプロジェクトのUIをUMGで作成しなおすことはされていません(ってどっかのスレで見た気がする)。
以上、2015年UE4アドカレの記事についてでした。
少しでもゲーム制作の参考になれば!