執筆バージョン: Unreal Engine 5.2
|
UE5から数値入力欄に単位が表示されているものがあります。

この単位付きの入力欄は単位を明示的に設定書くことによって、値の変換も行ってくれます。
例:単位[cm]のプロパティ入力欄に[m]をつけた値で入力すると変換されます。

今回は単位の追加をしてみようと思います。
指定方法
単位はC++から設定することが可能です。
UPROPERTYマクロのにmeta情報に「Units」か「ForceUnits」を追加し、単位を指定すると表示するようになります。
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(Units="m")) float UnitValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ForceUnits="m")) float ForceUnitValue; |
この2つの指定子の違いは異なる単位を入力をした場合の挙動が違います。
- Unitsの場合は値の大きさに最も適した単位で表示されます。
- ForceUnitsの場合は設定した単位で表示されます。
例 C++でプロパティの設定をした入力欄の変化
|
// メートル(m) UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(Units="m")) float UnitValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ForceUnits="m")) float ForceUnitValue; // 秒(s) UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(Units="s")) float UnitSeconds; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ForceUnits="s")) float ForceUnitSeconds; |

一度同じアクターを再選択することにより単位の変換が行われる場合があります。
※最も適した単位の選定が意図しない動作がするケースがあるので注意!!
例:Gif画像内ではUnitSecondsの単位変換時に誤差が発生してます。
プロパティに入っている変換されていない値を確認したい場合は入力欄にカーソルをあわせると元の値を表示します。

基本、エンジン側で使用している部分では「ForceUnits」を利用しているケースが多いようです。
指定できる単位
指定できる単位はエンジン側で決められています。
UE5.2 現在では以下の単位が指定出来ます。
距離
指定文字 |
単位 |
Micrometers
um |
ミクロメートル |
Millimeters
mm |
ミリメートル |
Centimeters
cm |
センチメートル |
m |
メートル |
Kilometers
km |
キロメートル |
Inches
in |
インチ |
Feet
ft |
フィート |
Yards
yd |
ヤード |
Miles
mi |
マイル |
Lightyears
ly |
光年 |
角度
指定文字 |
単位 |
Degrees
deg |
度・度数法 |
Radians
rad |
ラジアン・弧度法 |
速度
指定文字 |
単位 |
CentimetersPerSecond
cm/s |
秒速センチメートル |
MetersPerSecond
m/s |
秒速メートル |
KilometersPerHour
km/h |
時速キロメートル |
MilesPerHour
mi/h |
時速マイル |
温度
指定文字 |
単位 |
Celsius
C
degC |
摂氏・セルシウス度 |
Farenheit
F
degF |
華氏・ファーレンハイト度 |
Kelvin
K |
ケルビン |
重さ
指定文字 |
単位 |
Micrograms
ug |
ミクログラム |
Milligrams
mg |
ミリグラム |
Grams
g |
グラム |
Kilograms
kg |
キログラム |
MetricTons
t |
トン |
Ounces
oz |
オンス |
Pounds
lb |
ポンド |
Stones
st |
ストーン |
力
指定文字 |
単位 |
Newtons
N |
ニュートン |
PoundsForce
lbf |
重量キログラム |
KilogramsForce
kgf |
重量ポンド |
周波数
指定文字 |
単位 |
Hertz
Hz |
ヘルツ |
Kilohertz
KHz |
キロヘルツ |
Megahertz
MHz |
メガヘルツ |
Gigahertz
GHz |
ギガヘルツ |
RevolutionsPerMinute
rpm |
回転/分 |
データ容量
指定文字 |
単位 |
Bytes
B |
バイト |
Kilobytes
KB
KiB |
キビバイト(2の10乗) |
Megabytes
MB
MiB |
メビバイト(2の20乗) |
Gigabytes
GB
GiB |
ギビバイト(2の30乗) |
Terabytes
TB
TiB |
テビバイト(2の40乗) |
明るさ
指定文字 |
単位 |
Lumens
lm |
ルーメン |
Candela
cd |
カンデラ |
Lux
lx |
ルクス |
CandelaPerMeterSquared
cd/m2
CandelaPerMeter2 |
カンデラ毎平方メートル |
時間
指定文字 |
単位 |
Nanoseconds
ns |
ナノ秒 |
Microseconds
us |
マイクロ秒 |
Milliseconds
ms |
ミリ秒 |
Seconds
s |
秒 |
Minutes
min |
分 |
Hours
hrs |
時 |
Days
dy |
日 |
Months
mth |
月 |
Years
yr |
年 |
解像度
指定文字 |
単位 |
ppi
dpi |
pixels per inch・dots per inch |
これらの定義はUnitConversion.cppに記述されています。
(今後バージョンアップにより追加されるかもしれません。)
まとめ
C++から指定する必要がありますが、この機能を利用するとプロパティ名にわざわざ単位の名前を追加しなくても、単位がわかるようになります。
様々な単位に対応しており、UnrealEngine5になりゲーム以外の色々な分野を想定していると感じますね。
(でも、光年って何のシミュレーションに使う想定なんでしょうね…)
