我必须产生不同的物体,并且至关重要的是没有两个物体被重复。我的意思是,random.range不应该同时获得两个相同的数字,否则代码有时产生相同的对象。这是一个更简单的代码,可以帮助您了解我正在尝试的内容。
void Update () {
j = Random.Range (1, 4); // this should give j values like=(1,2,1,3,2,1)
// and not this = (1,1,2,2...) the numbers should not repeat simultaneously.
Inst();
}
void Inst(){
if (j == 1) {
//instantiate obj1
}
else if (j == 2) {
instantiate obj2
}
else if (j == 3) {
instantiate obj3
}
}
谢谢!
答案 0 :(得分:5)
怎么样
int lastValue;
public int UniqueRandomInt(int min, int max)
{
int val = Random.Range(min, max);
while(lastValue == val)
{
val = Random.Range(min, max);
}
lastValue = val;
return val;
}
void Update()
{
UniqueRandomInt(1, 4);
Inst();
}
void Inst()
{
if (lastValue == 1)
{
//instantiate obj1
}
else if (lastValue == 2)
{
//instantiate obj2
}
else if (lastValue == 3)
{
//instantiate obj3
}
}
答案 1 :(得分:2)
您的原始陈述从3个可能的数字中选择1个(1,2,3)。
j = Random.Range(1, 4);
如果您想避免上次发出的号码,那么只留下2个可能的号码。
Random.Range(1, 3)
将此随机数添加到先前的j
值会产生一个同样随机的新值,但保证与之前的j
值不同。
j = j + Random.Range(1, 3);
当然,你需要包装值以使它们保持在所需的范围内{1,2,3}:
if (j > 3) j -= 3;
或者,使用modulo(%
)使其成为单行:
j = 1 + (j + Random.Range(0, 2)) % 3;
同样适用于更大的范围。
j = min + (j - min + Random.Range(1, max - min)) % (max - min);
这种方法比复制时的循环效率更高。'迭代次数没有保证限制。