/// <summary>
/// 进入具体掉落(随机时,可以使用 Random.Range(0,总数))
/// </summary>
/// <param name="fd">掉落池</param>
/// <param name="random">随机数</param>
/// <returns></returns>
public FightRoleWeight getOneDrop(FightDropGroup fd, System.Random random)
{
if (fd.canUseAllWeight !=0)
{
int i = random.Next(0, fd.canUseAllWeight + 1); //fd.canUseAllWeight 总权重值
// Debug.Log("第二步的种子是:" + (i)+" 当前的权重值:"+ fd.canUseAllWeight);
int x = 0;
//fd.canUseAll 所有符合条件的对象 RoleWeight 权重值
foreach (FightDroup roleWeights in fd.canUseAll)
{
x += roleWeights.RoleWeight();
if (i <= x)
{
if (roleWeights.getType() == 6|| roleWeights.getType() == 8 || roleWeights.getType() == 9 || roleWeights.getType() == 11 || roleWeights.getType() == 12 || roleWeights.getType() == 13 || roleWeights.getType() == 17)
{
return getOneDrop((FightDropGroup)roleWeights, random);
}
else if (roleWeights.getType() == 10)
{
int randomNum = random.Next();
System.Random rrr = new System.Random(randomNum);
return getOneDrop((FightDropGroup)roleWeights, rrr);
}
else
{
return (FightRoleWeight)roleWeights;
}
}
}
}
return null;
}
注:1. 根据表格读出的掉落概率
List
NumList: 0, 1, 2, 3 //掉落池
WeightList:60, 25 10, 5 //随机权重
要求达到的效果是:权重各是 60,25,10,5 ,各自的概率就是 60/100 , 25/100,10/100, 5/100(100:60+25+10+5)
60%的概率掉出结果:0
25%的概率掉出结果:1
10%的概率掉出结果:2
5%的概率掉出结果:3
2.中奖的概率问题也是同样的道理
List
NumList: 基础奖励,三等奖,二等奖, 一等奖 //掉落池
WeightList:60, 25 10, 5 //随机权重
要求达到的效果是:权重各是 60,25,10,5 ,各自的概率就是 60/100 , 25/100,10/100, 5/100(100:60+25+10+5)
60%的概率掉出结果:基础奖励
25%的概率掉出结果:三等奖
10%的概率掉出结果:二等奖
5%的概率掉出结果:一等奖