在 Unity 中取得亂數的方法為:
UnityEngine.Random.Range( 最小值, 最大值 );
 
該函數會在 "最小值" 與 "最大值" 之間隨機取一個值。
而 Range 有兩個函數,一個接收 int 回傳 int,一個接收 float 回傳 float。
 
 
例如 int 用法:
 
int i = UnityEngine.Random.Range( 0, 5 );
 
這邊 i 的值會是 0、1、2、3、4 其中一個,但是只會有這 5 種可能,所以他不可能會隨機到 "最大值"。
 
 
但是有一點很有趣,如果改成 float 的話:
 
float f = UnityEngine.Random.Range( 0.0f, 5.0f );
 
這邊是會隨機到 "最大值" 的,也就是 5.0f,甚至還有可能會超過。
 
 
如果把 float 改成 double 的話
 
double d = UnityEngine.Random.Range( 0.0f, 5.0f );
 
是有可能會回傳 5.100000001490116d 這種數值的,或許就是這原因,因為隨機到的值超過 float 能接受的範圍,而導致 "自動進位" 的情況發生,所以才會去隨機到 "最大值"。
詳細可看參考 "整數 (int)" 這篇文章最後面所提到的問題,雖然這篇講的是 int,但我覺得還是可以參考看看的。
 
 
所以用 float 取得亂數時,記得注意到這點喔!
int 不會隨機到 "最大值"。
float 會隨機到 "最大值"。
 
arrow
arrow
    全站熱搜

    岳 發表在 痞客邦 留言(1) 人氣()