当类似随机地牢游戏 里面生成 的装备 的属性 各不相同,且数值各不一样,是怎么作到 类似暗黑破坏神 里面的随机装备属性的。
随机生成物品也可以用到。
比如拾取了 一把 未鉴定的武器剑,由于是未鉴定的,因此不能直接装备。
需要 鉴定 来 解锁 武器的 属性。
这个 武器 的稀有程度 来 判断 随机 的 武器 属性 的稀有程度,以及数值。
这个武器 的稀有 程度 包含 的计算为(武器属性 鉴定完毕后 拥有的 )
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里面,组队 刷出 了高级的装备,每个人 都可以 根据自己的职业 的需求,以及 这个 高级装备 的属性 来提出自己的需求,摇骰子,每个玩家 按下 需求 的按钮,就会 返回 一个 随机数,随机数最大的那个 玩家 获得 这个高级装备。
黄100,绿50,黑100
100次,黄44,绿9,黑47
红色字体代表 这3种颜色 的 最大值的设置。
黄10044103252520332033152515311536绿509103352920312032154015331522黑10047103554620362036153515361542
当黄、绿、黑 的最大值设置 为10的整数的时候,并且都相等的时候,概率 趋近于 1/3。这里的分母3是指 黄、绿、黑的数量,当然可以是其他的数
黄103252520332033152515311536绿103352920312032154015331522黑103554620362036153515361542
当黄、绿、黑 的最大值设置 为2:1:2的时候,
黄100442241039104310461038 绿50910595751058 黑100472761052105010441054概率在45/100,10/100,45/100徘徊。为什么不是 40:20:40?
当黄、绿、黑 的最大值设置 为2:3:2的时候,
黄10191023101121326421414绿155715581559351353647657黑10241019103023624143242920:60:20/10:50:40/
逻辑图
Test_CubeSpawnManager.cs
using UnityEngine; using UnityEngine.UI;//Text public class Test_CubeSpawnManager : MonoBehaviour { /// <summary> /// 生成 物品 的位置 /// </summary> public Transform spawnPosition; /// <summary> /// 随机数生成 的方块 /// </summary> public Test_CubeSpawn[] spawns_array; /// <summary> /// 当前 要生成的 方块 的概率 /// </summary> private int currentProbability = 0; /// <summary> /// 当前的要生成的方块 /// </summary> private Test_CubeSpawn currentCubeSpawn = null;//当前只 生成1个 方块。 /// <summary> /// 生成的方块 /// </summary> Transform go; /// <summary> /// 按钮按下的次数 /// </summary> public int button_push; /// <summary> /// 显示的 文本 的按钮按下的次数 /// </summary> public Text text; /// <summary> /// 当按钮SpawnCube 按下 执行的 函数 /// </summary> 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();//显示 按下按钮的次数 } } } /// <summary> /// 按下 restart按钮 /// </summary> public void clear() { if ( go != null) { currentCubeSpawn = null; currentProbability = 0; Destroy(go.gameObject); } } }Test_CubeSpawn.cs
using UnityEngine; using UnityEngine.UI;//Text public class Test_CubeSpawn : MonoBehaviour { /// <summary> /// 要生成的 方块。 /// </summary> public Transform cube; /// <summary> /// 最大概率 /// </summary> public int max = 100; /// <summary> /// 最小概率 /// </summary> public int min = 0; /// <summary> /// 当前概率 /// </summary> public int probability = 0; /// <summary> /// 显示 对应方块的 文本 的生成 次数 /// </summary> public Text text; /// <summary> /// 生成的次数 /// </summary> public int init_num = 0; /// <summary> /// 返回 一个概率值。 /// </summary> /// <returns>概率</returns> public int spawnCube() { probability = Random.Range(min,max); return probability; } }