网站设计公司列表,江门网页设计,公司装修深圳,电子商务企业网站建设实训报告#xff08;游戏中一个很常见的简单功能#xff0c;比如抽卡抽奖抽道具#xff0c;或者一个怪物有多种攻击动作#xff0c;按不同的权重随机出个攻击动作等等……#xff09;
假如有三种物品 A、B、C#xff0c;对应的权重分别是A#xff08;50#xff09;#xff0c…游戏中一个很常见的简单功能比如抽卡抽奖抽道具或者一个怪物有多种攻击动作按不同的权重随机出个攻击动作等等……
假如有三种物品 A、B、C对应的权重分别是A50B20C30
那么如果从 0-100中抽取一个随机数可以这样理解
在0-50之间时将得到A在50-70之间时得到B在70-100之间时得到C
下面是实现代码。 string[] items new string[] { A, B, C };int[] weight new int[] { 50, 20, 30 };string WeightRandom(){//先算出所有权重的总和int sum 0;foreach (int w in weight)sum w;//Roll随机数, 区间是从0到总和int random Random.Range(0, sum);int currRange 0;//遍历每个item对应到区间。如果结果在此区间内返回此item。for (int i 0; i items.Length; i){currRange weight[i];if (random currRange){Debug.Log(string.Format(随机数:【{0}】. 结果【{1}】, random.ToString(), items[i]));return items[i];}}return null;}
测试一下运行20次 当然这里使用的权重502030 100 只是为了方便理解。
并非权重的总和一定要等于100。多少都是可以的。随机数的选取范围只需要是0总和即可。