Здравствуйте! Перейду сразу к вопросу. колько не пытался, не выходит заспауниить одинаковых юнитов(один и тот же префаб) в разных точках, точек несколько, так что думаю вполне логично переменную спавна в массиве хранить. Вот не выходит их заспаунить в самих точках, к тому же хотелось еще каждые 5 секунд.. Как это реализовать?
Здравствуйте! Перейду сразу к вопросу. колько не пытался, не выходит заспауниить одинаковых юнитов(один и тот же префаб) в разных точках, точек несколько, так что думаю вполне логично переменную спавна в массиве хранить. Вот не выходит их заспаунить в самих точках, к тому же хотелось еще каждые 5 секунд.. Как это реализовать?
вот тут есть скрипт и видео-урок к нему. Не знаю толи что тебе надо или нет) (скрипт где-то в описании к видео ) Мой блог: http://terv-blog.blogspot.ru/
спасибо разобрался)) нашел это видео перевел на c#, добавил нужных мне функций) просто у меня была проблема с правильным написанием функции Instantiate, почитал мануалы все получилось)
Такая проблема. Есть точки, в которых одновременно в произвольном порядке спавнятся боты. Но часто в одной точке спавнится сразу несколько ботов, и в итоге они топчутся друг у друга на головах. Конечно, можно сделать точку спавна в виде триггера и проверять наличие в ней бота, если она занята - точка удаляется из массива, если вновь свободна - добавляется. Но этот способ кажется чересчур громоздким и неудобным. Есть какие-нибудь менее ресурсоемкое и более изящное решение?
Собственно, сам код:
Код
void Spawn () { int spawnChk = Random.Range (0, spawnPoints.Length); if (...) { ... Instantiate (_Enemy, spawnPoints[spawnChk].position, spawnPoints[spawnChk].rotation); } }
Как бы сделал я. Создаем менеджер спавна. В нем два List. Первый - свободные точки, второй - занятые. Когда кто-то хочет создасться - он запрашивает у менеджера точку для спавна - GetSpawnPoint() Менеджер берет первую из списка свободных - перекладывает ее в список занятых и возвращает тому, кто запросил. Как освобождать? Тот кто запрашивал точку спавна после того как появился в мире - начинает в Update проверять расстояние до точки спавна. Когда это расстояние станет больше чем его размер, вызываем функцию в менеджере ReleaseSpawnPoint(Vector3 point) Менеджер в ней перекладывает точку из списка занятых в список свободных.
Это в первом приближении. Что Можно улучшить? Кто-то вполне может шастая по миру занять точку спавна из списка свободных. Поэтому точку спавна все же лучше сделать триггером. Когда кто-то в нее входит - триггер говорит менеджеру, что точка занята - GrabSpawnPoint(Vector3 point), когда выходит - говорит что освободилась - ReleaseSpawnPoint(Vector3 point). При этом не нужно проверять в Update расстояние (см. курсив выше). Когда созданный объект выйдет из триггера - автоматом вызовется ReleaseSpawnPoint(Vector3 point) ________________________________________ Есть другой вариант - просто при спавне проверять свободно ли место. Если занято - либо пытаться спавниться на некотором расстоянии, либо запускать таймер и пытаться спавниться после того как выйдет время