2017-04-19 62 views
0
void Spawnwave() 
{ 
    //Standard unit is lvl1 unit 
    int saverUnit = 1; 
    int saverPossibilty = 100; 
    System.Random randy = new System.Random(); 
    //This for gets the possibility for the first possible enemy 
    for (int i = 0; i < possibilty.Length; i++) 
    { 
     if (possibilty[i] != 0) 
     { 
      saverUnit = i; 
      saverPossibilty = possibilty[i]; 
      break; 
     } 
    } 

    //As only 2 kind of units per wave can be spawned +1 spawns the "stronger" one 
    for (int i = 0; i < level+5; i++) 
    { 
     if (randy.Next(100) > saverPossibilty) 
     { 
      StartCoroutine(SpawnUnit(saverUnit + 1)); 
     } 
     else 
     { 
      StartCoroutine(SpawnUnit(saverUnit)); 
     } 
    } 
} 

IEnumerator SpawnUnit(int unit) 
{ 
    Instantiate(enemies[unit],spawnPoint.position, spawnPoint.rotation); 
    yield return new WaitForSeconds(timeBetweenEnemies); 
} 

所以我想制作一个Unity塔防游戏。这两种方法应该以0.5秒的间隔产生5+等级敌人的价值。我调试了它,它通过代码运行,但我没有得到任何新的gameobjects。不能在Unity中产生游戏对象

我试图寻找例如:Youtube(括号)和他的塔防教程的决议,但我仍然无法找到我的错误。

感谢您的帮助, Mika。

+1

您应该永远不需要在Unity中调用'System.Random',而是使用内置的'UntityEngine.Random'。 –

+1

我无法真正看到此代码的任何问题。 'System.Random'很好。 –

+1

你看过层次结构吗?游戏运行时,你的对象可能只是在不同的位置产生,然后是你所期待的。 – CNuts

回答

0

您应该像@ScottChamberlain建议的那样,按照以下方式调用Random Generation:10是一个任意数字。

int rnd = Random.Range(0,10) 

虽然我无法测试这个目前我inital的想法是,这条线

Instantiate(enemies[unit],spawnPoint.position, spawnPoint.rotation); 

应该

GameObject clone = Instantiate(enemies[unit],spawnPoint.position, spawnPoint.rotation) as GameObject; 

最后,你怎么做你的可能性阵列。

+0

将实例化对象存储在变量中是可选的。它根本不影响瞬时。 –

+0

我的可能性数组是一个整数值从0到100的数组。我为所有敌人制作了另一个阵列。所以如果我有长度为3的敌人数组,我的Possibility数组的值就是{90,10,0}。根据这个整数决定,我想增加产生更好敌人的机会,因为随着游戏的进行,它们产卵的可能性会增加。我可能应该工作得很好,我想......但不知何故,这些gameobjects不会产卵。 – Mreifenberger

+0

所以你使用一个整数数组来确定敌人的产生概率。你有没有调试过co实例被调用? –