游戏随机与概率工具库

ProbUtil 是一套用于 Unity 项目中的通用随机与概率计算工具库。

该工具提供了一系列常用的概率计算与随机方法, 可用于 掉落系统、AI行为、随机地图、Roguelike机制、技能触发、抽卡系统 等场景。

工具为 纯代码工具类,无需初始化,也不会依赖任何项目状态。


1. 工具概述

ProbUtil 提供以下类型的随机与概率计算功能:

  • 概率判断
  • 权重随机
  • 概率随机
  • 随机元素选择
  • 不重复随机
  • 随机数字
  • 随机Enum
  • 随机方向
  • 随机Vector
  • 随机布尔
  • 列表洗牌

所有功能均基于 UnityEngine.Random 实现。


2. 使用方式

ProbUtil 为 静态工具类,无需实例化。

直接调用即可使用。


3. 概率判断

用于判断某事件是否按概率触发。

3.1 Chance

按 0~1概率 判断。

示例:

if (ProbUtil.Chance(0.2f))
{
    // 20%概率触发
}

参数说明:

probability —— 概率值 0~1

工具内部会自动进行 Clamp 处理。

3.2 ChancePercent

按 百分比概率 判断。

示例:

if (ProbUtil.ChancePercent(25))
{
    // 25%概率触发
}

参数说明:

percent —— 概率百分比 0~100


4. 权重随机

用于根据权重随机选择某个结果。

常用于:

  • 掉落系统
  • 宝箱生成
  • 怪物生成
  • AI行为决策

4.1 Roll

按 整数权重 随机返回 index。

示例:

int result = ProbUtil.Roll(40,40,15,5);

概率分布:

  • 0 → 40%
  • 1 → 40%
  • 2 → 15%
  • 3 → 5%

返回值: index 被选中的权重索引

4.2 RollNormalized

按 小数概率 随机返回 index。

示例:

int result = ProbUtil.RollNormalized(0.4f,0.4f,0.15f,0.05f);

概率分布:

  • 0 → 40%
  • 1 → 40%
  • 2 → 15%
  • 3 → 5%

适用于:

  • 算法计算概率
  • AI概率决策
  • 动态概率系统

4.3 Roll(元素版本)

按权重随机返回元素。

示例:

List<string> items = new List<string>()
{
    "Common",
    "Rare",
    "Epic"
};

List<int> weights = new List<int>()
{
    70,
    25,
    5
};

string item = ProbUtil.Roll(items,weights);

适用于:

  • 掉落表
  • 抽卡系统
  • 奖励池

5. 随机元素

用于从集合中随机选择元素。

5.1 Pick(数组)

随机选择数组中的一个元素。

示例:

int value = ProbUtil.Pick(new int[]{1,2,3,4});

5.2 Pick(List)

随机选择 List 中的一个元素。

示例:

string name = ProbUtil.Pick(nameList);

6. 不重复随机

用于从集合中随机选择元素并删除。

适用于:

  • 抽卡池
  • 奖励池
  • 不重复随机事件

6.1 PickAndRemove

示例:

int item = ProbUtil.PickAndRemove(poolList);

执行后:

  • 随机元素返回
  • 元素从列表中删除

7. 随机数字

用于生成随机数字。

7.1 RangeExcept

在随机区间中排除某个数字。

示例:

int value = ProbUtil.RangeExcept(0,5,2);

返回值范围:

  • 0 1 3 4

适用于:

  • 随机技能
  • 随机目标
  • 随机索引

8. Enum随机

用于随机选择一个 Enum 值。

示例:

EnemyType type = ProbUtil.RandomEnum<EnemyType>();

适用于:

  • AI行为
  • 状态机
  • 随机角色

9. 随机布尔

随机返回 true 或 false。

示例:

bool result = ProbUtil.Bool();

概率为:

50% true 50% false


10. 随机方向

用于生成随机方向向量。

10.1 RandomDirection2D

生成 2D单位方向向量。

示例:

Vector2 dir = ProbUtil.RandomDirection2D();

适用于:

  • 子弹散射
  • 粒子方向
  • AI移动

10.2 RandomDirection3D

生成 3D单位方向向量。

示例:

Vector3 dir = ProbUtil.RandomDirection3D();

11. 随机Vector

用于生成随机位置。

11.1 RandomPointInCircle

生成圆形范围内的随机点。

示例:

Vector2 pos = ProbUtil.RandomPointInCircle(5f);

11.2 RandomPointInSphere

生成球形范围内的随机点。

示例:

Vector3 pos = ProbUtil.RandomPointInSphere(10f);

12. 列表洗牌

用于打乱集合顺序。

实现算法:

Fisher-Yates Shuffle
12.1 Shuffle

示例:

ProbUtil.Shuffle(cardList);

执行后:

列表顺序将被随机打乱。

适用于:

  • 卡牌系统
  • 随机事件池
  • Roguelike房间顺序

13. 使用限制与注意事项

所有函数均依赖 UnityEngine.Random

  • 不保证跨平台随机一致性

  • 不适用于需要确定性随机的逻辑

  • 不适用于加密随机

如需确定性随机,应使用自定义 RandomSeed 系统。


14. 典型使用场景

ProbUtil 常用于:

  • 宝箱掉落系统
  • 怪物掉落系统
  • AI行为概率
  • Roguelike随机房间
  • 技能触发概率
  • 抽卡系统
  • 奖励池
  • 随机地图生成

15. 总结

ProbUtil 是一套 轻量、通用、零依赖 的随机与概率工具库。

它提供了游戏开发中最常见的随机功能,使开发者能够:

  • 简洁表达概率逻辑

  • 快速实现随机机制

  • 避免重复编写概率算法

该工具通常作为 游戏基础工具库 的一部分使用。