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

Unity中使用Random.Range(0,2)为何仅生成0?

Unity中Random.Range(0,2)始终返回0的原因及解决办法

问题根源

Unity的Random.Range对整数参数采用左闭右开区间逻辑,Random.Range(0,2)理论上应该返回0或1,但你始终得到0,核心问题出在随机数生成的时机上:

  • 直接在字段声明时赋值(private int _randomInt = Random.Range(0,2);)会在Unity唤醒脚本实例之前执行,此时Random类的内部随机状态还未完成初始化,每次都会生成固定的初始伪随机值——也就是0。
  • 少数情况是手动调用了Random.InitState(固定值)且种子未变化,导致随机数序列完全重复,但如果没手动设置过种子,这个概率极低。

解决办法

把随机数生成代码移到Unity运行时初始化完成后的方法中,比如Start()或Awake():

private int _randomInt;

void Start()
{
    _randomInt = Random.Range(0, 2);
    Debug.Log("The random number is: " + _randomInt);
}

如果需要每次进入场景都生成不同的随机序列,也可以手动设置动态种子(可选,Unity默认会用系统时间自动初始化种子):

void Start()
{
    Random.InitState(System.DateTime.Now.Millisecond);
    _randomInt = Random.Range(0, 2);
    Debug.Log("The random number is: " + _randomInt);
}

调整后运行多次,就能看到0和1交替输出了。

内容的提问来源于stack exchange,提问作者Miguel Ángel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:29:52