1. /// <summary>
    2. /// 进入具体掉落(随机时,可以使用 Random.Range(0,总数))
    3. /// </summary>
    4. /// <param name="fd">掉落池</param>
    5. /// <param name="random">随机数</param>
    6. /// <returns></returns>
    7. public FightRoleWeight getOneDrop(FightDropGroup fd, System.Random random)
    8. {
    9. if (fd.canUseAllWeight !=0)
    10. {
    11. int i = random.Next(0, fd.canUseAllWeight + 1); //fd.canUseAllWeight 总权重值
    12. // Debug.Log("第二步的种子是:" + (i)+" 当前的权重值:"+ fd.canUseAllWeight);
    13. int x = 0;
    14. //fd.canUseAll 所有符合条件的对象 RoleWeight 权重值
    15. foreach (FightDroup roleWeights in fd.canUseAll)
    16. {
    17. x += roleWeights.RoleWeight();
    18. if (i <= x)
    19. {
    20. if (roleWeights.getType() == 6|| roleWeights.getType() == 8 || roleWeights.getType() == 9 || roleWeights.getType() == 11 || roleWeights.getType() == 12 || roleWeights.getType() == 13 || roleWeights.getType() == 17)
    21. {
    22. return getOneDrop((FightDropGroup)roleWeights, random);
    23. }
    24. else if (roleWeights.getType() == 10)
    25. {
    26. int randomNum = random.Next();
    27. System.Random rrr = new System.Random(randomNum);
    28. return getOneDrop((FightDropGroup)roleWeights, rrr);
    29. }
    30. else
    31. {
    32. return (FightRoleWeight)roleWeights;
    33. }
    34. }
    35. }
    36. }
    37. return null;
    38. }

    注:1. 根据表格读出的掉落概率
    List NumList=new List()和List WeightList=new 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 LevelReward=new List()和List WeightList=new 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%的概率掉出结果:一等奖