unity 物品的随机概率
(2017-03-11 13:34:56)分类: unity3d |
假如,一个敌人,会掉落一些物品,
而这些物品,很可能会有一定的随机性,
例如,
30%概率 掉落金钱, 30%概率掉落 钻石, 40%概率 掉落某样装备,
正常情况,可能会填写一个概率,
例如, 0.3,0,3,0,6,
总和加一起,是 100%,
但是,如果用 百分比添加,
在修改这个掉落概率表时,会有一个问题,
那就是 ,当我们想从掉落 3种,改为 掉落 4种时,
之前的概率需要修改,而且,修改过后,总数不一定正好等于 100% 。
那么,有没有什么比较好的概率填写方法呢?
可以用 权重的概念,
例如, A物品的权重值是 10,
B 物品的权重值也是 10,
那么,当这两种商品都存在时,那么,各占50%,
如果 C物品的权重值是 5,
那么,当只有 A 和 C 两种物品的时候,那么 A占 三分之二的概率, C
占三分之一的概率。
如果是这样,
那么,假如有三个物品, A B C , 权重各是 10,10,5 ,那么,各自的概率就是 10/25 , 10/25,
5/25 ,
这样,当我们想要添加一个新的物品D,
其权重也是 5时,
原本的物体随机概率自动变为 10/30,10/30,5/30 。
随机时,可以使用 Random.Range(0,总数);
以上面的例子为例,
A 10 ,B 10,C 5,D 5
那么,随机值就是 0 到 29,
A 占随机值的范围为 0 到 9
B 占随机值的范围为 10 到
19
C 占随机值的范围为 20 到
24
D 占随机值的范围为 25 到
29
ABCD
各自不用存储下限,只需要存储上限。
随机的数字可以 遍历 A B C
D,
谁符合条件,就是随机到的谁。
int value =
Random.Range(0,30);
假如,随机的值是 15,
那么就是 B ,
因为 A 的上限不符合,
但是 B 的上限是符合的。
各自的上限可以这样存储,
totalChance = 0;
循环开始
{
chance 是自己的权重,
自己的随机上限 = chance + totalChance;
totalChance += chance;
}
这样,只需要读取一边,
上限就有了.
前一篇:unity 帧数限制的方法
后一篇:unity APK容量比例