C# 如何设置现有预制件的最大数量,以及在玩家通过后统一拆除预制件地板?

C# 如何设置现有预制件的最大数量,以及在玩家通过后统一拆除预制件地板?,c#,unity3d,spawning,C#,Unity3d,Spawning,下面是代码,现在我只生成每个帧x预制(这是一个简单的游戏,我是unity的新手,所以玩家是一个球和道奇之类的东西。所以我有大量的预制(地板)在玩家面前生成) 公共静态int numSpawned=0; //创建一个数组以将预置存储到其中 公共静态游戏对象[]路径; //将繁殖位置的x值设置为100 公共整数繁殖距离=100; 公共整数numToSpawn=6; //调用预置文件夹 私有void Start() { 路径=Resources.LoadAll(“预置”); } //设置“繁殖”位置

下面是代码,现在我只生成每个帧x预制(这是一个简单的游戏,我是unity的新手,所以玩家是一个球和道奇之类的东西。所以我有大量的预制(地板)在玩家面前生成)


公共静态int numSpawned=0;
//创建一个数组以将预置存储到其中
公共静态游戏对象[]路径;
//将繁殖位置的x值设置为100
公共整数繁殖距离=100;
公共整数numToSpawn=6;
//调用预置文件夹
私有void Start()
{
路径=Resources.LoadAll(“预置”);
}
//设置“繁殖”位置和“numSpawned”
void对象()
{
int withItem=随机范围(0,6);
GameObject myObj=实例化(路径[withItem])为GameObject;
numSpawned++;
myObj.transform.position=transform.position+新向量3(0,0,0);
}
//直到现在,它生成每一帧,所以这是你必须修复的
无效更新()
{//比较这些值
如果(numToSpawn>numSpawned)
{
//对象从何处生成
transform.position=新矢量3(生成距离,0,0);
生成随机对象();
繁殖距离=繁殖距离+100;
}
}

直到现在的问题是,我不知道如何控制产卵量和速度,所以我需要帮助。所有预置都存储在一个数组中,然后从中随机生成。

您可以创建协同程序并生成WaitForSeconds(值),而不是在每一帧使用方法
SpawnRandomObject()

文件:

要获得产卵量,您可以使用天鹰船长的想法:


保留衍生对象的数组并检查计数

阵列: 文件:

您还可以使用列表,例如:

private List<GameObject> exampleList = new List<GameObject>();
private int sizeOfExampleList;

...\\Add items to the list in the code.\\...

private void exampleMethod () 
{
    sizeOfExampleList = exampleList.Count;
}

...
private List exampleList=new List();
私有int-sizeOfExampleList;
…\\将项目添加到代码中的列表。\\。。。
私有void示例方法()
{
sizeOfExampleList=exampleList.Count;
}
...

我希望我能帮助你!:-)

保留衍生对象的数组并检查计数。另外,如果你想让它们以一种节奏释放,可以使用与WaitForSeconds混合的协同程序。所以问题是,解决方案等待1秒钟(与我输入的“DelaySpawnInsonds”值无关),然后它开始像往常一样产卵,产卵之间没有中断。这只适用于底部的“SpawnRandomObject()”,其顶部的生成方式相同,但没有1秒的延迟。你是对的,因为我在更新方法中使用了SpawnRandomObject()方法调用(愚蠢的我!),所以每一帧都会调用SpawnRandomObject()!我编辑了我的答案,现在一切都正常了。此外,根据我个人的经验,最好对UnityEdit变量使用[SerializeField]而不是public(当[SerializeField]仅由UnityEdit更改时,另一个脚本可能会错误地更改public变量)。我认为你也不需要静态变量。今晚我会回家检查,然后告诉你它是否有效:D.@Arror404如果你认为我的答案对你有帮助,你可以投票并将其标记为你问题的答案,这样其他人就可以看到正确的答案。
[SerializeField] private float delaySpawnInSeconds = 0.5f;

...

private void Start()
{ 
    thePath = Resources.LoadAll<GameObject>("PreFabs");
    StartCoroutine(SpawnFloors());
}
private IEnumerator SpawnFloors()
{
    while (numToSpawn > numSpawned)
    {
       //SpawnRandomObject();  //if U want to spawn object then wait
       yield return new WaitForSeconds(delaySpawnInSeconds);
       SpawnRandomObject();  //if U want to wait then spawn object
    }
}
private List<GameObject> exampleList = new List<GameObject>();
private int sizeOfExampleList;

...\\Add items to the list in the code.\\...

private void exampleMethod () 
{
    sizeOfExampleList = exampleList.Count;
}

...