Unity|[Unity]随机装备属性随机数生成物品概率



当类似随机地牢游戏 里面生成 的装备 的属性 各不相同,且数值各不一样,是怎么作到 类似暗黑破坏神 里面的随机装备属性的。
随机生成物品也可以用到。
Unity|[Unity]随机装备属性随机数生成物品概率
文章图片

鉴定武器,新增武器属性的概率
比如拾取了 一把 未鉴定的武器剑,由于是未鉴定的,因此不能直接装备。
需要 鉴定 来 解锁 武器的 属性。
这个 武器 的稀有程度 来 判断 随机 的 武器 属性 的稀有程度,以及数值。
这个武器 的稀有 程度 包含 的计算为(武器属性 鉴定完毕后 拥有的 )
int 武器稀有程度 = 100; //100为传说武器,90为绿色武器,80为蓝色武器,70为橘色武器,10为白色武器。

每增加 一个 属性就要 使得
武器属性当前数量 += 1;//并且用If 来判断 是否超过了 当前武器的 最大 属性 的数量
武器稀有程度 -= 新建的武器属性的权重值;//传说武器 有个专门的生成 传说武器属性的函数。对应不同颜色的武器 也有与之对应的生成 武器属性的函数。
传说武器属性函数,专门 来随机处理 武器的属性。越是强力的武器属性的权重值 越是大,接近100
当 这个鉴定的武器 的 武器稀有程度 越低,那么新增的 武器 属性 就越是 不强力。

随机数占比数组 来生成 某些物品
这里涉及到 随机数占比数组 来生成 某些物品
例如,当角色 进入 房间,60%概率生成普通怪物,30%概率生成 精英怪,10%的概率 生成 BOSS怪物。
这个怎么用 随机数 来随机 生成?

... int Probability_Max = 100; //最大数为100 int Probability_Monest_Lv1 = 60; //普通怪物 int Probability_Monest_Lv2 = 30; //精英怪物 int Probability_Monest_Lv3 = 10; //BOSS级别怪物 ...

刷怪的概率=普通怪物刷怪概率+精英怪物刷怪概率+BOSS怪物刷怪概率;//这里的刷怪概率 也可以从100改为更低的值,例如其他的数值来 使得进入当前的房间的概率为 道具房、商店房间,等等其他房间
由于 这里 只有 3种生成 物品、怪物的需要,那么更多 的 物品、概率,是否 需要重复写 几十个、几百个 变量,来输入 概率。
... int Probability_Max = 100; //最大数为100 int Probability_Monest_Lv1 = 60; //普通怪物 int Probability_Monest_Lv2 = 30; //精英怪物 int Probability_Monest_Lv3 = 10; //BOSS级别怪物 int Probability_Monest_Lv4 = 10; //BOSS级别怪物 int Probability_Monest_Lv5 = 60; //普通怪物 int Probability_Monest_Lv6 = 30; //精英怪物 int Probability_Monest_Lv7 = 10; //BOSS级别怪物 int Probability_Monest_Lv8 = 10; //BOSS级别怪物 ...



类似 WOW 里面,对 高级装备 提出需求的 摇骰子 的 随机数计算。
在WOW里面,组队 刷出 了高级的装备,每个人 都可以 根据自己的职业 的需求,以及 这个 高级装备 的属性 来提出自己的需求,摇骰子,每个玩家 按下 需求 的按钮,就会 返回 一个 随机数,随机数最大的那个 玩家 获得 这个高级装备。
Unity|[Unity]随机装备属性随机数生成物品概率
文章图片

黄100,绿50,黑100
100次,黄44,绿9,黑47

红色字体代表 这3种颜色 的 最大值的设置。
100 44 10 32 5 25 20 33 20 33 15 25 15 31 15 36
绿 50 9 10 33 5 29 20 31 20 32 15 40 15 33 15 22
100 47 10 35 5 46 20 36 20 36 15 35 15 36 15 42

当黄、绿、黑 的最大值设置 为10的整数的时候,并且都相等的时候,概率 趋近于 1/3。这里的分母3是指 黄、绿、黑的数量,当然可以是其他的数
10 32 5 25 20 33 20 33 15 25 15 31 15 36
绿 10 33 5 29 20 31 20 32 15 40 15 33 15 22
10 35 5 46 20 36 20 36 15 35 15 36 15 42


当黄、绿、黑 的最大值设置 为2:1:2的时候,
100 44 2 24 10 39 10 43 10 46 10 38
绿 50 9 1 0 5 9 5 7 5 10 5 8
100 47 2 76 10 52 10 50 10 44 10 54
概率在45/100,10/100,45/100徘徊。为什么不是 40:20:40?

当黄、绿、黑 的最大值设置 为2:3:2的时候,
10 19 10 23 10 11 2 13 2 6 4 21 4 14
绿 15 57 15 58 15 59 3 51 3 53 6 47 6 57
10 24 10 19 10 30 2 36 2 41 4 32 4 29
20:60:20/10:50:40/


逻辑图
Unity|[Unity]随机装备属性随机数生成物品概率
文章图片

Test_CubeSpawnManager.cs
using UnityEngine; using UnityEngine.UI; //Textpublic class Test_CubeSpawnManager : MonoBehaviour { /// /// 生成 物品 的位置 /// public Transform spawnPosition; /// /// 随机数生成 的方块 /// public Test_CubeSpawn[] spawns_array; /// /// 当前 要生成的方块 的概率 /// private int currentProbability = 0; /// /// 当前的要生成的方块 /// private Test_CubeSpawn currentCubeSpawn = null; //当前只 生成1个 方块。 /// /// 生成的方块 /// Transform go; /// /// 按钮按下的次数 /// public int button_push; /// /// 显示的 文本 的按钮按下的次数 /// public Text text; /// /// 当按钮SpawnCube 按下 执行的 函数 /// public void buttonPush() { if (spawns_array.Length >0) { clear(); //重置 所有的条件 button_push++; //记录 按下按钮的次数 int _int; for (int i=0; i < spawns_array.Length; i++) { _int = spawns_array[i].spawnCube(); currentProbability = (currentProbability > _int) ? currentProbability : _int; //当 currentProbability 大于 _int 的时候,则 保持 当前概率。否则 更新 当前的 概率 currentCubeSpawn = (currentProbability > _int) ? currentCubeSpawn : spawns_array[i]; } if (currentCubeSpawn != null && spawnPosition != null) { currentCubeSpawn.init_num += 1; go = Transform.Instantiate(currentCubeSpawn.cube) as Transform; //生成方块 go.position = spawnPosition.position; //设置 生成方块 的位置 if (currentCubeSpawn.text != null) { currentCubeSpawn.text.text = currentCubeSpawn.init_num.ToString(); //使得对应方块的文本显示对应的次数 } } if (text != null) { text.text = button_push.ToString(); //显示 按下按钮的次数 }} }/// /// 按下 restart按钮 /// public void clear() { if ( go != null) { currentCubeSpawn = null; currentProbability = 0; Destroy(go.gameObject); } } }

Test_CubeSpawn.cs
using UnityEngine; using UnityEngine.UI; //Textpublic class Test_CubeSpawn : MonoBehaviour {/// /// 要生成的 方块。 /// public Transform cube; /// /// 最大概率 /// public int max = 100; /// /// 最小概率 /// public int min = 0; /// /// 当前概率 /// public int probability = 0; /// /// 显示 对应方块的 文本 的生成 次数 /// public Text text; /// /// 生成的次数 /// public int init_num = 0; /// ///返回 一个概率值。 /// /// 概率 public int spawnCube() { probability = Random.Range(min,max); return probability; } }




【Unity|[Unity]随机装备属性随机数生成物品概率】

    推荐阅读