【Unity】値が範囲内にあるかどうかの汎用関数を作る
UnrealEngineには値が範囲内にあるかどうかを判別するInRange関数があります。
イメージはこんな感じ。
docs.unrealengine.com docs.unrealengine.com
これが便利なのでUnityでも使えるように作ってしまおう!という記事です。
ソースコード
作成したソースコードは以下の通りです。
intやfloatなど明示的に引数の型を指定して作っても良かったですが、
ジェネリック型およびジェネリック制約の理解もかねて作成しました。
使用例
NasanUtility.Utilityをusingすると使用可能です。
ゆる解説
今回、ジェネリック制約にIComparableを付けています。
IComparable.CompareTo(Object) メソッドを使用するためです。
InRange
int型やfloat型のCompareTo(Object)メゾットの戻り値は以下の通りです。
戻り値 | 説明 |
---|---|
0より小さい | 引数が値未満 (value < num) |
0 | 引数と値が同じ (value == num) |
0より大きい | 引数が値超過 (value > num) または数値ではない(null or Nan) |
数値でない場合を想定して、判別する前にチェックしています。
参考にしたもの
・UKismetMathLibrary::InRange_IntInt | Unreal Engine Documentation
・UKismetMathLibrary::InRange_FloatFloat | Unreal Engine Documentation
・IComparable インターフェイス (System) | Microsoft Learn
・IComparable.CompareTo(Object) メソッド (System) | Microsoft Learn