C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4: スクリーンサイズ可変に対応したスクリーン座標へのUMGの表示のブループリント備忘録

アクターのロケーションなど適当な World 座標を基準にHUD風にUMGを表示したい場合、 World 座標から ConvertWorldLocationToScreenLocation で得られるスクリーン座標をそのまま Set Render Translation へ放り込むとスクリーンサイズ可変の場合には実際の表示位置がずれる。そういうわけで、最終的にどうなるか、のメモ:

f:id:USAGI-WRP:20180301130233p:plain

この例では、適当なワールド座標から ConvertWorldLocationToScreenLocation で得られたスクリーン座標を元に、適当なウィジェット p0 を最終的に黄色の枠の Set Render Translation により位置合わせして表示する。アプリの想定する標準のスクリーンサイズは 1920 x 1080 だがスクリーンサイズはウィンドウサイズに併せて任意にユーザーが可変できる。橙色の枠の部分でスクリーンサイズが標準サイズではない場合、アスペクト比に応じて高さまたは幅に併せて実際の表示位置へ調整される係数を計算、決定している。また、赤色の枠の部分では、スクリーンサイズが一定以下となる場合にUMGが縮小しなくなるためそれに併せて係数の下限が一定となるよう調整している。