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

本文探讨了在Unity游戏中如何实现类似暗黑破坏神的随机装备属性生成,通过鉴定武器确定其稀有程度和属性权重。利用随机数占比数组控制房间内怪物生成概率,模仿WOW中的高级装备需求摇骰子机制,调整不同事件出现的概率分布。

 

 

当类似随机地牢游戏 里面生成 的装备 的属性 各不相同,且数值各不一样,是怎么作到 类似暗黑破坏神 里面的随机装备属性的。

随机生成物品也可以用到。


鉴定武器,新增武器属性的概率

比如拾取了 一把 未鉴定的武器剑,由于是未鉴定的,因此不能直接装备。

需要 鉴定 来 解锁 武器的 属性。

这个 武器 的稀有程度 来 判断 随机 的 武器 属性 的稀有程度,以及数值。

这个武器 的稀有 程度 包含 的计算为(武器属性 鉴定完毕后 拥有的 )

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
绿
### 随机位置生成物品的实现方法 在 Unity 中,可以通过 `Random.Range` 方法来生成随机数值,并结合物体的位置属性(`transform.position`)设置其随机位置。以下是一个完整的实现方式[^2]: ```csharp using UnityEngine; public class RandomObjectSpawner : MonoBehaviour { public GameObject objectToSpawn; // 要生成的物体 public float minX = -10f, maxX = 10f; // X轴的范围 public float minZ = -10f, maxZ = 10f; // Z轴的范围 public float spawnInterval = 2f; // 生成间隔时间 void Start() { StartCoroutine(SpawnRoutine()); } IEnumerator SpawnRoutine() { while (true) { // 生成随机位置 float randomX = Random.Range(minX, maxX); float randomZ = Random.Range(minZ, maxZ); // 实例化物体并设置其位置 Vector3 spawnPosition = new Vector3(randomX, 0, randomZ); Instantiate(objectToSpawn, spawnPosition, Quaternion.identity); // 等待指定的时间间隔 yield return new WaitForSeconds(spawnInterval); } } } ``` 上述代码中,`Random.Range` 方法用于生成指定范围内的随机数。通过设置 `minX`, `maxX`, `minZ`, 和 `maxZ` 的值,可以控制物体生成的区域范围。此外,`spawnInterval` 参数决定了每次生成物体之间的时间间隔。 如果需要生成多个物体或更复杂的逻辑,还可以结合协程和循环结构实现[^4]。 ### 注意事项 - 在生成物体时,确保不会与其他物体发生碰撞。可以通过检测生成位置是否为空来避免重叠问题。 - 如果需要销毁生成的物体,可以使用 `Destroy` 方法,并指定销毁的时间。例如:`Destroy(newball, 8);` 表示在 8 秒后销毁物体[^4]。 ### 示例扩展 对于 2D 地图或平台游戏,可以结合 TileMap 和柏林噪声(Perlin Noise)生成更复杂的地图结构[^1]。以下是一个简单的 2D 物体生成示例: ```csharp using UnityEngine; public class Random2DObjectSpawner : MonoBehaviour { public GameObject objectToSpawn; public int gridWidth = 10, gridHeight = 10; // 地图网格大小 public float cellSize = 1f; // 每个单元格的大小 void Start() { for (int x = 0; x < gridWidth; x++) { for (int y = 0; y < gridHeight; y++) { if (Random.value > 0.5f) // 50% 的概率生成物体 { Vector3 position = new Vector3(x * cellSize, y * cellSize, 0); Instantiate(objectToSpawn, position, Quaternion.identity); } } } } } ``` 此代码适用于生成基于网格的 2D 地图,其中每个单元格有 50% 的概率生成物体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值