2017-11-11 93 views
0

我試圖讓我的變量的新值接近變量的舊值。Variable的新值接近舊值

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); 
    } 
} 

但我真的不知道如何使它工作,並儘可能簡單。

場景:

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

NewValue回報數字,是 但它不能去(-2.4 + 2)(-2.4 - 2)之間或大於-2.6低於或高於1更高,因爲新的值必須是那些2號,而且靠近之間到舊號碼。

2在這種情況下是被添加到新值的最高數字。

+3

能解釋有點什麼正是你想要達到的目標,目前的結果和你期望的結果? – Dave

+0

那麼@Dave。結果目前不是我想要的(但很明顯)。這裏的情況是:''LastValue = -2.2;''我想得到一個高於-2.2或更低的隨機數,但新值和舊值之間的差值不應高於1.2f。另外,如果新值低於-2.6f,它應該是-2.6f並且不低於這個值。 – TripleDeal

+0

嗯我仍然不確定你想要達到的完整行爲。我認爲你會發現一些有用的東西叫做橡皮鴨調試。谷歌它,如果它不能給你一個答案你的問題,它至少會幫助你更好地問你的問題 – 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