您的位置:首页 > 移动开发 > Unity3D

Unity中random函数的简单使用

2017-03-07 22:36 183 查看
一:如果想要从一个数组中随机的取出一个数据,此时可以用Random函数,如:

var element = myArray[Random.Range(0, myArray.Length)];


注意这里取值的范围是0~Length-1

二:在不同概率下发生事件的场景:

一般将事件发生概率储存在一个数组中,比如float[]{0.5,0.25,0.2,0.05},此时随机生成一个介于0~1之间的数,与上述的值进行比较,很明显,这个随机数的值在0-0.5这个区间的概率最大。

float Choose (float[] probs) {

float total = 0;

foreach (float elem in probs) {
total += elem;
}

float randomPoint = Random.value * total;

for (int i= 0; i < probs.Length; i++) {
if (randomPoint < probs[i]) {
return i;
}
else {
randomPoint -= probs[i];
}
}
return probs.Length - 1;
}


Random.value :返回一个0~1之间的数。

三:利用曲线

public AnimationCurve curve;
float CurveWeightedRandom(AnimationCurve curve) {
return curve.Evaluate(Random.value);
}


定义一个公有的AnimationCurve ,就可以对它进行编辑。





curve.Evaluate(Random.value)参数是随机出的一个值,可以认为是图中的横坐标,函数会返回它所对应的竖坐标的值,其中曲线越陡峭的地方代表发生的概率越大,越平坦的地方代表发生的概率越小。由于返回的是float类型,如果想要整形,Mathf.RoundToInt().

四:洗牌类任务

void Shuffle (int[] deck) {
for (int i = 0; i < deck.Length; i++) {
int temp = deck[i];
int randomIndex = Random.Range(0, deck.Length);
deck[i] = deck[randomIndex];
deck[randomIndex] = temp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity random