2015-09-05 33 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(); 
}