2015-09-05 30 views
0

我已经创建了一个用于在现场生成敌人的脚本。这是一个基于波浪的敌方发电机,一群敌人会产生,然后等待所有敌人都死亡,然后进入下一轮。下面是代码:优化敌方发电机

while (GameObject.FindGameObjectWithTag("Player") != null) 
    { 
     Spawner(); 
     if (waveCount == 1) 
     { 
      sound.clip = startRoundAlert; 
      sound.Play(); 
      Instantiate(enemyz[0], SpawnPoint, Quaternion.identity); 
      waveCount++; 

     } 
     else if (waveCount == 2) 
     { 
      if(GameObject.FindGameObjectsWithTag("Enemy").Length == 0) 
      { 
       sound.clip = endRoundAlert; 
       sound.Play(); 
       roundText.text = "Get ready for round" + waveCount; 
       yield return new WaitForSeconds(waveWait); 
       roundText.text = ""; 

       sound.clip = startRoundAlert; 
       sound.Play(); 

       Instantiate(enemyz[0], SpawnPoint, Quaternion.identity); 
       yield return new WaitForSeconds(4); 
       Spawner(); 
       Instantiate(enemyz[0], SpawnPoint, Quaternion.identity); 
       waveCount++; 

      } 
     } 
     else if (waveCount == 3) 
     { 
      if (GameObject.FindGameObjectsWithTag("Enemy").Length == 0) 
      { 
       sound.clip = endRoundAlert; 
       sound.Play(); 
       roundText.text = "Get ready for round" + waveCount; 
       yield return new WaitForSeconds(waveWait); 
       roundText.text = ""; 

       sound.clip = startRoundAlert; 
       sound.Play(); 

       Instantiate(enemyz[1], SpawnPoint, Quaternion.identity); 
       waveCount++; 

      } 
     } 

这个脚本工作正常,但与统一探查检查后,我想是不是不够优化。如果任何人有一个更好的建议,我会很高兴听到它。

+2

因为你的代码工作,这将是一个伟大的问题codereview.stackexchange.com – Prescott

+2

“与团结剖析器检查我认为它不够优化” 你为什么这么认为?解释什么结果令人讨厌或者你的脚本有什么不好。执行时间? –

+0

这个脚本的帧速率大约是650(这是一款手机游戏),如果没有它,它会突然上升到大约770-800。 –

回答

1

好的,我试着清理一下你的游戏循环 - 不过真的你的代码会很早就被切掉,因为在做任何工作之前你都有敌人检查 - 所以我认为这实际上更像是清理码。

我觉得真正帮助你的表现,我们需要看到一些其他的方法 - 这将是巨大的,如果你会说,为什么你认为它不是最优化的

while(GameObject.FindGameObjectWithTag("Player") != null) 
{ 
    Spawner(); //What does this do? 
    if(GameObject.FindGameObjectsWithTag("Enemy").Length == 0) 
    { 
     StartNextRound(); 
     waveCount++; 
    } 
} 

private void StartNextRound() 
{ 
    switch(waveCount) 
    { 
     case 1: 
      Instantiate(enemyz[0], SpawnPoint, Quaternion.identity); 
      break; 
     case 2: 
      NewRoundSetup() 
      Instantiate(enemyz[0], SpawnPoint, Quaternion.identity); 
      yield return new WaitForSeconds(4); 
      Spawner(); 
      Instantiate(enemyz[0], SpawnPoint, Quaternion.identity); 
      break; 
     case 3: 
      NewRoundSetup() 
      Instantiate(enemyz[1], SpawnPoint, Quaternion.identity); 
      break; 
    } 
} 

private void NewRoundSetup() 
{ 
    sound.clip = endRoundAlert; 
    sound.Play(); 
    roundText.text = "Get ready for round" + waveCount; 
    yield return new WaitForSeconds(waveWait); 
    roundText.text = ""; 

    sound.clip = startRoundAlert; 
    sound.Play(); 
}