Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用循环最小化代码,并且不应重复随机数?_C#_Unity3d_Optimization - Fatal编程技术网

C# 如何使用循环最小化代码,并且不应重复随机数?

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);

我有18个游戏对象,我想把所有18个游戏对象放在定义的随机位置。是的,我说的“定义位置”是指我的游戏对象z位置只会随机变化,比如[0,60,120,180等等]。请帮忙

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)));