Ваш код состоит только из одного c муравья. Вам нужно сделать код агности c для указания c муравьев.
Но прежде чем углубляться в детали;
Пожалуйста, рассмотрите возможность перехода на C#, это сделает вашу жизнь намного проще.
Я предполагаю, что это 2D. Если 3d, просто измените Vector2s на Vector3 и удалите 2d из метода триггера.
Я напишу пример кода в C#
В общем, то, что у вас есть сегодня:
- Создать муравья.
- Если пользователь щелкает муравья, переместите его для запуска.
- Если муравей тоже идет далеко, вы теряете жизнь и удаляете ее.
Что вы хотите
- Появляется любое количество муравьев в случайной позиции.
- Если пользователь щелкает муравей, удали его (?).
- Если муравей достигнет цели, ты потеряешь жизнь и удалишь ее.
Итак, давайте рассмотрим каждый из этих шагов, и как я Реализовать их:
Создать любое количество муравьев в случайном положении
Для нереста требуется 2 вещи:
- Сборный домик
- Использование
Instantiate()
Если вы не знаете, как создать сборный дом или что это такое, я советую поискать, пока не поймете. Короче говоря, это экземпляр GameObject, сохраненный на диске. Вы делаете это, просто перетаскивая GameObject в папку в представлении проекта инспектора.
public GameObject antPrefab;
GameObject SpawnAnt(Vector2 position) {
return Instantiate<GameObject>(antPrefab, position, Quaternion.identity);
}
Случайная позиция
То, как мне нравится создавать позиции появления, объявив область возрождения GameObject, которую вы можете перемещать в редакторе, и указав размер в виде сериализованного поля:
[Range(1f, 10f)] // Gives you a slider to drag between 1 and 10 for this variable
public float spawnAreaRadius;
public Transform spawnArea;
void Vector2 GetRandomSpawnPosition() {
var spawnAreaCenter = spawnArea.position;
var spawnRandomX = Random.Range(-spawnAreaRadius, spawnAreaRadius);
var spawnRandomY = Random.Range(-spawnAreaRadius, spawnAreaRadius);
return new Vector2(spawnRandomX, spawnRandomY);
}
А в отношении нереста множественного числа, вы, вероятно, захотите поднять какое-то событие / таймер для появления и увеличения муравьев, чтобы сделать его постепенно усложняющимся:
Вызывайте это, если вы хотите порождать определенное количество муравьев случайным образом вокруг вашей позиции появления:
void SpawnAnts(int num) {
for (int i = 0; i < num; i++) {
var pos = GetRandomSpawnPosition();
SpawnAnt(pos);
}
}
Движение муравья и жизненный цикл
Вместо того, чтобы зацикливаться на всех муравьях и перемещать их с помощью оверхеда, что может быть оптимальным решением, для простоты я бы добавил в antPrefab скрипт, содержащий муравьи:
(Для этого компонента требуется твердое тело и коллайдер)
void Update() {
// Move ant towards goal
}
void OnMouseDown() {
Destroy();
}
Это также даст вам возможность легко давать различные муравьи с разными скоростями и др. c. Сделайте ИИ каждого муравья немного уникальным с гораздо меньшими усилиями, чем если бы они были сгруппированы.
Столкновение с целью
Определите область, которая является целью муравья, поместив Триггерный коллайдер в ваш мир. Добавьте в него существующий скрипт и добавьте метод обнаружения коллизий:
void OnTriggerEnter2D(Collider2D col) {
if (col.tag == "ant") {
lives--;
Destroy(col.gameObject);
}
}
Сводка
Некоторые из этих вещей, которые вы уже решили по-своему (например, generateX ()), я хотел чтобы дать вам некоторое представление о том, как я лично буду решать ваш код. Вы должны оценить, какие части вы хотите использовать.
Отказ от ответственности: это отвечает вашим требованиям, но оставляет вам некоторые другие ограничения, такие как добавление точек, когда щелчок муравья требует от вас, вероятно, вызвать муравьиного менеджера точек из муравья, а не просто обнаружить его в том же контроллере, который также будет обрабатывать точки.