2017-11-11 12 views
0

変数の新しい値を変数の古い値に近づけようとしています。変数の新しい値が古い値に近い

bool FirstPos = true; 
float LastPos = 0; 
float LeftPos = -2.6f; 

if(FirstPos) 
{ 
    LeftPos = Random.Range(-2.6f, 1f); 
    LastPos = LeftPos; 
    FirstPos = false; 
} else 
{ 
    AddValue = Random.Range(0, 1.25f); 
    NewValue = LastPos + AddValue; 

    if((NewValue >= -2.6f) && (NewValue <= 1f)){ 
     LastPos = NewValue; 
    } else { 
     AddValue = Random.Range(0, 1.25f); 
    } 
} 

しかし、私は真剣にそれを動作させ、できるだけ簡単にする方法は考えていません。

シナリオ:(-2.4 + 2)または(-2.4 - 2) の間だが、それは、新しい値がこれらの2つの数値の間にする必要があるので、1より-2.6以上より低く行くにも近いことはできません

CurrentValue = Random.Range(-2.6f, 1f); 
//CurrentValue returns -2.4 as value 

NewValue戻っ番号古い番号に。

2は、この場合、新しい値に追加される最も高い数値です。あなたは、次の操作を行うことができ

+3

もう少し何も説明してもらえまさにあなたが達成しようとしていること、現在の結果は何か、あなたはそれが何を期待しているのでしょうか? – Dave

+0

よく@Dave。結果は、現在私がそれを望む方法ではありません(しかしそれは明らかです)。 '' LastValue = -2.2; '' -2.2以下の乱数を取得したいのですが、新しい値と古い値の差は1.2fというよりも大きくありません。また、新しい値が-2.6fより小さい場合は-2.6fで、それより小さくない値にする必要があります。 – TripleDeal

+0

Mmm私はあなたが達成しようとしている完全な振る舞いが何であるかまだ分かりません。私は、あなたが役に立つと思うものは、ラバーダックのデバッグと呼ばれるものだと思います。それはあなたにあなたの質問への答えを提供していない場合は、少なくともあなたの質問をよりよくお手伝いします – Dave

答えて

1

private static float GetNextRandomValue(Random random, 
             float current, 
             float absoluteOffset, 
             float floor = float.MinValue, 
             float ceiling = float.MaxValue) 
{ 
    var next = (float)(current + absoluteOffset * (2 * random.NextDouble() - 1)); 
    return next > ceiling ? ceiling : (next < floor ? floor : next); 
} 

}

そして、コメントであなたの例を以下、あなたが好きそれを呼びたい:

var rnd = new Random(); 
GetNextRandomValue(rnd, -2.2f, 1.2f, -2.6f); 
+0

私はあなたの解決策から間違いがあるだけです。私のプロジェクトがUnityプロジェクトに関連しているかもしれませんか? – TripleDeal

関連する問題