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里面,组队 刷出 了高级的装备,每个人 都可以 根据自己的职业 的需求,以及 这个 高级装备 的属性 来提出自己的需求,摇骰子,每个玩家 按下 需求 的按钮,就会 返回 一个 随机数,随机数最大的那个 玩家 获得 这个高级装备。
文章图片
黄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 |
当黄、绿、黑 的最大值设置 为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 |
逻辑图
文章图片
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]随机装备属性随机数生成物品概率】
推荐阅读
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- Unity和Android通信系列文章2——扩展UnityPlayerActivity
- 临床统计学学习日志
- unity探究UGUI的Image中sprite和overrideSprite的区别
- unity|unity 在iOS平台跳转appstore
- OpenCV|OpenCV for Unity 通过WebCamTextureToMatHelper帮助类来获取摄像头的画面
- Python【习题】(随机生成激活码、优惠码、验证码)
- 微信内如何防止推广链接被封,微信内随机跳转落地页的实现原理
- Unity中使用反射机制调用函数
- Unity|Unity 对象池