2016-12-28 4 views
1

Мне удалось вызвать врагов, но они продолжают нереститься. Как я могу установить предел, чтобы избежать нереста?Unity/Как установить лимит для вражеской икры?

Я попытался добавить spawnLimit и spawnCounter, но не смог справиться с этим.

var playerHealth = 100;  // Reference to the player's heatlh. 
var enemy : GameObject;    // The enemy prefab to be spawned. 
var spawnTime : float = 3f;   // How long between each spawn. 
var spawnPoints : Transform[];   // An array of the spawn points this enemy can spawn from. 


function Start() 
{ 
    // Call the Spawn function after a delay of the spawnTime and then continue to call after the same amount of time. 
    InvokeRepeating ("Spawn", spawnTime, spawnTime); 
} 


function Spawn() 
{ 
    // If the player has no health left... 
    if(playerHealth <= 0f) 
    { 
     // ... exit the function. 
     return; 
    } 


    // Find a random index between zero and one less than the number of spawn points. 
    var spawnPointIndex : int = Random.Range (0, spawnPoints.Length); 

    // Create an instance of the enemy prefab at the randomly selected spawn point's position and rotation. 
    Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); 
} 

ответ

2

Вы можете использовать этот вид счетчика:

int maxEnemies = 100; 
int enemiyCounter = 0; 

и Spawn() добавить:

if(enemiyCounter < maxEnemies){ 
    Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); 
    enemyCounter++; 
} 

вместо того, чтобы

Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); 
0

ответ, что @ ukasz-motyczka дал отлично для e-time spawn, но если вы хотите непрерывный икру (каждый раз, когда убивают врага, он заменяется), вам нужно будет динамически подсчитать, сколько противников есть.

Duck дает хороший ответ на how to count enemies

Если объединить свой код с ukasz-motyczka, то вы можете оставить переменную, чтобы отслеживать, сколько врагов вы породили, так как вы динамически их подсчета. Вы бы получить что-то вроде этого:

int maxEnemies = 100; 

и в Spawn()

// to count the number of objects: 
var enemyCount : int = GameObject.FindGameObjectsWithTag("Enemy").Length; 

if(enemyCount < maxEnemies){ 
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); 
+0

Мне нужно установить лимит. поэтому на каждом уровне сложности враги будут появляться больше. –

+0

Вы можете изменить значение maxEnemies на разные значения. Вы пытаетесь установить последовательные волны врагов? Другими словами, должны ли враги с одной волны полностью уничтожаться, пока не появятся новые враги? –

1

При использовании CancelInvoke("spawn");, когда вы хотите, чтобы остановить икру врагов.

Вы должны знать о CancelInvoke(), если вы играете с invoke() и InvokeRepeating()