Unity2D: Spawn объекты с использованием массива и удаление объекта Spawn после выхода из вида с камеры

arrays unity3d

124 просмотра

2 ответа

Есть ли более простой способ контролировать, сколько врагов я хочу вызвать в инспекторе, вместо того, чтобы продолжать копировать и вставлять один и тот же метод в мой код, но переименовывать его. Хм, я думаю, используя массив (пример):

массив

Должен сделать свое дело, но я не знаю, как реализовать это в моем коде. Пожалуйста и спасибо! :)

Мой код:

public GameObject enemy;

// Variable to know how fast we should create new enemies
public float spawnTime = 2;


void Start() {  
    // Call the 'addEnemy' function every 'spawnTime' seconds
    InvokeRepeating ("addEnemy", spawnTime, spawnTime);

}
// New function to spawn an enemy
void addEnemy() {  
    // Variables to store the X position of the spawn object
    // See image below
    var x1 = transform.position.x - GetComponent<Renderer> ().bounds.size.x / 2;
    var x2 = transform.position.x + GetComponent<Renderer> ().bounds.size.x / 2;
    // Randomly pick a point within the spawn object
    var spawnPoint = new Vector2 (Random.Range (x1, x2), transform.position.y);
    // Create an enemy at the 'spawnPoint' position
    Instantiate (enemy, spawnPoint, Quaternion.identity);
 }
}

Ps Кто-нибудь знает, как удалить появившийся объект, как только он выйдет из поля зрения основной камеры. :)

Автор: Jessca Stone Источник Размещён: 08.11.2019 11:22

Ответы (2)


0 плюса

Решение

Я рекомендую вам использовать Coroutines, чтобы контролировать, сколько объектов вы хотите создать, но я нашел решение, используя ваш код.

  1. Объявите две переменные, которые сообщают максимальное количество объектов для появления и текущее количество объектов в сцене public int spawnMax = 6, currentTotal = 0;
  2. Добавьте эту строку в функцию addEnemy if (currentTotal >= spawnMax) CancelInvoke("addEnemy");

Для удаления объектов за пределами вида с камеры я бы поставил пустые игровые объекты как дочерние элементы камеры, а у дочерних элементов - коллайдеры, которые пересекают границы вида с камеры, и, наконец, использовал бы теги и функции OnCollision / OnTrigger, чтобы определить, есть ли какой-либо объект. снаружи

Автор: josehzz Размещён: 20.08.2016 04:55

0 плюса

Весь трюк в том, что вы должны держать пустой gameObject за представлением (представление Users), назовем его разрушителем. Добавьте тег к объектам Game, чтобы вы могли идентифицировать объекты, сталкивающиеся с destroyer. Проверьте теги, если они соответствуют уничтожить, затем использовать Destroy (gameObject) должен уничтожить gameObject.

Автор: Kiran Sadvilkar Размещён: 20.08.2016 02:19
Вопросы из категории :
32x32