You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity按概率生成20个三类随机对象仅生成单类型问题求解

问题原因

核心问题是System.Random的初始化位置错误:

  • System.Random默认用当前系统时间戳作为随机种子
  • 你在循环内部每次都新建System.Random实例,循环执行速度远快于系统时间戳的更新精度,导致所有Random实例的种子完全相同,每次生成的随机数都一样,最终20个对象全是同一类型。
修正方案

只需要把Random实例的创建移到循环外部即可,修正后代码如下:

// 仅在循环外初始化一次Random实例
var r = new System.Random();
int x = 0;
do
{
    int objectType = r.Next(1, 6);
    if (objectType < 4)
    {
        SpawnBO();
    }
    else if (objectType == 4)
    {
        SpawnSO1();
    }
    else if (objectType == 5)
    {
        SpawnSO2();
    }
    x++;
} while (x < 20);
可选优化(Unity环境专属)

你也可以直接使用Unity内置的随机数工具,不需要手动管理Random实例,写法更简洁:

int x = 0;
do
{
    float randomValue = UnityEngine.Random.value;
    if (randomValue < 0.6f) // 3/5概率生成BO
    {
        SpawnBO();
    }
    else if (randomValue < 0.8f) // 1/5概率生成SO1
    {
        SpawnSO1();
    }
    else // 1/5概率生成SO2
    {
        SpawnSO2();
    }
    x++;
} while (x < 20);

内容的提问来源于stack exchange,提问作者Online Me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:45:05