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
相关产品推荐
相关产品推荐

