質問: たとえば0から10の間で値を受け取って、それを-1から1の数値に変換してくれるような関数を探しています。 リマップという表現が正しいのかわからないですが、ShaderForgeで言う所のRemapのような関数をしりたいです。そもそもあるんでしょうか? 単純な質問で恐縮なんですが、自分で調べても出てこないので質問します。
回答: Unityフォーラムに類似質問の回答がありました。 標準ではRemap関数が用意されていないようですので、自作する必要があります。 拡張メソッドを使うならば、下記の`Remap`のようなメソッドを使用します。 ただし下記のコードでは範囲外の値を渡された時にも計算済みの値を返します。 ShaderForgeのRemapのように範囲外の場合は計算せずに渡された値を返すならば、コードの修正を行ってください。 ``` using System; namespace ConsoleApplication1 { public static class ExtensionMethods { public static float Remap(this float value, float from1 = 0, float to1 = 10, float from2 = -0.1f, float to2 = 0.1f) { return (value - from1) / (to1 - from1) * (to2 - from2) + from2; } } //簡単のためUnityではなくコンソールアプリ版のサンプルコード class Program { static void Main(string[] args) { for (var i = 0; i <= 10; i++) { var f = (float)i; var r = f.Remap(0f, 10f, -0.1f, 0.1f); Console.WriteLine("{0}, {1}", r, f.Remap()); //引数未省略と省略で同一の結果となる } Console.WriteLine(100f.Remap()); //エラーとならずに1.9を返す Console.Read(); } } } ```