C# 如何使用循环最小化代码,并且不应重复随机数?
我有18个游戏对象,我想把所有18个游戏对象放在定义的随机位置。是的,我说的“定义位置”是指我的游戏对象z位置只会随机变化,比如[0,60,120,180等等]。请帮忙C# 如何使用循环最小化代码,并且不应重复随机数?,c#,unity3d,optimization,C#,Unity3d,Optimization,我有18个游戏对象,我想把所有18个游戏对象放在定义的随机位置。是的,我说的“定义位置”是指我的游戏对象z位置只会随机变化,比如[0,60,120,180等等]。请帮忙 GameObject[] hurdles; int randShared; void Shart() { hurdles = GameObject.FindGameObjectsWithTag("Hurdles"); randShared = Random.Range(0,19);
GameObject[] hurdles;
int randShared;
void Shart()
{
hurdles = GameObject.FindGameObjectsWithTag("Hurdles");
randShared = Random.Range(0,19);
if (randShared == 0)
{
hurdles[0].transform.position = new Vector3(0f, 0f, 0f);
hurdles[1].transform.position = new Vector3(0f, 0f, 60f);
hurdles[2].transform.position = new Vector3(0f, 0f, 120f);
.
.
.
hurdles[18].transform.position = new Vector3(0f, 0f, 120f);
}
if (randShared == 1)
{
hurdles[0].transform.position = new Vector3(0f, 0f, 120f);
hurdles[1].transform.position = new Vector3(0f, 0f, 0f);
hurdles[2].transform.position = new Vector3(0f, 0f, 60f);
.
.
.
hurdles[18].transform.position = new Vector3(0f, 0f, 120f);
}
if (randShared == 2)
{
hurdles[0].transform.position = new Vector3(0f, 0f, 60f);
hurdles[1].transform.position = new Vector3(0f, 0f, 120f);
hurdles[2].transform.position = new Vector3(0f, 0f, 0f);
.
.
.
hurdles[18].transform.position = new Vector3(0f, 0f, 120f);
}
.
.
.
if (randShared == 18)
{
hurdles[0].transform.position = new Vector3(0f, 0f, 60f);
hurdles[1].transform.position = new Vector3(0f, 0f, 120f);
hurdles[2].transform.position = new Vector3(0f, 0f, 0f);
.
.
.
hurdles[18].transform.position = new Vector3(0f, 0f, 120f);
}
}
您可以在您的范围内循环,并根据您的随机数以60为间隔创建偏移
for (var i = 0; i < 19; i++)
{
var offset = i + randShared;
if (offset > 18)
{
offset = offset - 19;
}
hurdles[i].transform.position = new Vector3(0f, 0f, (float)(offset * 60));
}
for(变量i=0;i<19;i++)
{
var offset=i+randShared;
如果(偏移量>18)
{
偏移量=偏移量-19;
}
跨栏[i].transform.position=新矢量3(0f,0f,(float)(偏移量*60));
}
var rnd=new Random();
对于(变量i=0;i<19;i++)
跨栏[i].transform.position=new Vector3(0f,0f,60f*rnd.Next(4));
它可以工作,但不是随机的,此代码按顺序生成zPos。根据randShared,只有第一个是随机的。我想要随机的zPos@Zdravko DanevIts显示错误,类型为UnityEngine.Random'不包含
Next'的定义,并且找不到类型为UnityEngine.Random'的扩展方法Next'。是否缺少程序集引用@Zdravko Danev将其更改为System.RandomOk,现在错误消失。但所有的障碍都出现在接下来的4个位置,其余14个位置都是空的:(
var rnd = new Random();
for (var i = 0; i < 19; i++)
hurdles[i].transform.position = new Vector3(0f, 0f, 60f * rnd.Next(4)));