【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