/// <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%的概率掉出结果:一等奖
