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

如何让Random.Range不生成连续重复数值以避免重复生成对象

嘿,这个问题我之前做项目时也碰到过!连续生成相同的随机数确实会导致反复实例化同一个对象,体验感很差。咱们来调整代码解决这个问题:

解决连续重复随机数导致的对象重复实例化问题

核心思路就是记录上一次生成的随机数,每次生成新值时避开它。具体实现步骤如下:

  1. 在类中添加一个成员变量,用来存储上一次的随机结果:
private int lastGeneratedJ = -1; // 初始值设为1-3以外的数,确保第一次生成不会冲突
  1. 修改Update方法里的随机数生成逻辑,循环生成直到拿到和上一次不同的值:
void Update () { 
    int newJ;
    do {
        newJ = Random.Range(1, 4);
    } while (newJ == lastGeneratedJ); // 只要和上一次重复就重新生成
    
    j = newJ;
    lastGeneratedJ = j; // 更新上一次的记录
    Inst(); 
} 
  1. 原有的Inst方法可以保持不变,现在每次调用它时,j的值都不会和上一次重复,自然就不会连续实例化同一个对象了:
void Inst(){ 
    if (j == 1) { 
        // Instantiate obj1 
    } else if (j == 2) { 
        Instantiate(obj2); 
    } else if (j == 3) { 
        Instantiate(obj3); 
    } 
}

额外优化小技巧

如果后续你的随机数值范围变大,这种循环生成的方式效率依然没问题(毕竟重复的概率很低)。要是想更直接,也可以从排除上一次值的集合里直接挑选:

// 以1-3为例,先移除上一次的数值,再从剩余值里随机选
List<int> availableNumbers = new List<int>{1,2,3};
availableNumbers.Remove(lastGeneratedJ);
j = availableNumbers[Random.Range(0, availableNumbers.Count)];
lastGeneratedJ = j;

这种方式不用循环,直接从可用值里挑,适合数值范围较大的场景。

这样调整后,生成的序列就会像你期望的(1,2,1,3,2,1)一样,再也不会出现连续重复的情况啦!

内容的提问来源于stack exchange,提问作者Vivek Negi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:47:36