спавн юнитов в точках - Форум Игроделов
Пт, 03 Май 2024, 13:46 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » HELP & FAQ » спавн юнитов в точках (c#)
спавн юнитов в точках
korveenДата: Пн, 27 Янв 2014, 19:21 | Сообщение # 1
Победитель конкурса GCC
 
Сообщений: 183
Награды: 2
Репутация: 45
Статус: Offline
Здравствуйте! Перейду сразу к вопросу.
колько не пытался, не выходит заспауниить одинаковых юнитов(один и тот же префаб) в разных точках, точек несколько, так что думаю вполне логично переменную спавна в массиве хранить. Вот не выходит их заспаунить в самих точках, к тому же хотелось еще каждые 5 секунд.. Как это реализовать?


 
СообщениеЗдравствуйте! Перейду сразу к вопросу.
колько не пытался, не выходит заспауниить одинаковых юнитов(один и тот же префаб) в разных точках, точек несколько, так что думаю вполне логично переменную спавна в массиве хранить. Вот не выходит их заспаунить в самих точках, к тому же хотелось еще каждые 5 секунд.. Как это реализовать?

Автор - korveen
Дата добавления - 27 Янв 2014 в 19:21
TeRVДата: Пн, 27 Янв 2014, 20:10 | Сообщение # 2
Белый Волк
 
Сообщений: 1517
Награды: 13
Репутация: 331
Статус: Offline
Цитата korveen ()
Здравствуйте! Перейду сразу к вопросу.
колько не пытался, не выходит заспауниить одинаковых юнитов(один и тот же префаб) в разных точках, точек несколько, так что думаю вполне логично переменную спавна в массиве хранить. Вот не выходит их заспаунить в самих точках, к тому же хотелось еще каждые 5 секунд.. Как это реализовать?




вот тут есть скрипт и видео-урок к нему. Не знаю толи что тебе надо или нет) (скрипт где-то в описании к видео smile )


Мой блог:
http://terv-blog.blogspot.ru/
 
Сообщение
Цитата korveen ()
Здравствуйте! Перейду сразу к вопросу.
колько не пытался, не выходит заспауниить одинаковых юнитов(один и тот же префаб) в разных точках, точек несколько, так что думаю вполне логично переменную спавна в массиве хранить. Вот не выходит их заспаунить в самих точках, к тому же хотелось еще каждые 5 секунд.. Как это реализовать?




вот тут есть скрипт и видео-урок к нему. Не знаю толи что тебе надо или нет) (скрипт где-то в описании к видео smile )

Автор - TeRV
Дата добавления - 27 Янв 2014 в 20:10
korveenДата: Пн, 27 Янв 2014, 20:32 | Сообщение # 3
Победитель конкурса GCC
 
Сообщений: 183
Награды: 2
Репутация: 45
Статус: Offline
спасибо разобрался)) нашел это видео перевел на c#, добавил нужных мне функций) просто у меня была проблема с правильным написанием функции Instantiate, почитал мануалы все получилось)

 
Сообщениеспасибо разобрался)) нашел это видео перевел на c#, добавил нужных мне функций) просто у меня была проблема с правильным написанием функции Instantiate, почитал мануалы все получилось)

Автор - korveen
Дата добавления - 27 Янв 2014 в 20:32
УпырьДата: Вс, 15 Фев 2015, 16:57 | Сообщение # 4
 
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline
Такая проблема. Есть точки, в которых одновременно в произвольном порядке спавнятся боты. Но часто в одной точке спавнится сразу несколько ботов, и в итоге они топчутся друг у друга на головах.
Конечно, можно сделать точку спавна в виде триггера и проверять наличие в ней бота, если она занята - точка удаляется из массива, если вновь свободна - добавляется. Но этот способ кажется чересчур громоздким и неудобным. Есть какие-нибудь менее ресурсоемкое и более изящное решение?

Собственно, сам код:
Код
void Spawn () {
int spawnChk = Random.Range (0, spawnPoints.Length);
   if (...) {
       ...
    Instantiate (_Enemy, spawnPoints[spawnChk].position, spawnPoints[spawnChk].rotation); }
}
 
СообщениеТакая проблема. Есть точки, в которых одновременно в произвольном порядке спавнятся боты. Но часто в одной точке спавнится сразу несколько ботов, и в итоге они топчутся друг у друга на головах.
Конечно, можно сделать точку спавна в виде триггера и проверять наличие в ней бота, если она занята - точка удаляется из массива, если вновь свободна - добавляется. Но этот способ кажется чересчур громоздким и неудобным. Есть какие-нибудь менее ресурсоемкое и более изящное решение?

Собственно, сам код:
Код
void Spawn () {
int spawnChk = Random.Range (0, spawnPoints.Length);
   if (...) {
       ...
    Instantiate (_Enemy, spawnPoints[spawnChk].position, spawnPoints[spawnChk].rotation); }
}

Автор - Упырь
Дата добавления - 15 Фев 2015 в 16:57
seamanДата: Вс, 15 Фев 2015, 18:42 | Сообщение # 5
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Как бы сделал я.
Создаем менеджер спавна. В нем два List. Первый - свободные точки, второй - занятые.
Когда кто-то хочет создасться - он запрашивает у менеджера точку для спавна - GetSpawnPoint()
Менеджер берет первую из списка свободных - перекладывает ее в список занятых и возвращает тому, кто запросил.
Как освобождать? Тот кто запрашивал точку спавна после того как появился в мире - начинает в Update проверять расстояние до точки спавна. Когда это расстояние станет больше чем его размер, вызываем функцию в менеджере ReleaseSpawnPoint(Vector3 point) Менеджер в ней перекладывает точку из списка занятых в список свободных.

Это в первом приближении.
Что Можно улучшить? Кто-то вполне может шастая по миру занять точку спавна из списка свободных. Поэтому точку спавна все же лучше сделать триггером. Когда кто-то в нее входит - триггер говорит менеджеру, что точка занята - GrabSpawnPoint(Vector3 point), когда выходит - говорит что освободилась - ReleaseSpawnPoint(Vector3 point). При этом не нужно проверять в Update расстояние (см. курсив выше). Когда созданный объект выйдет из триггера - автоматом вызовется ReleaseSpawnPoint(Vector3 point)
________________________________________
Есть другой вариант - просто при спавне проверять свободно ли место. Если занято - либо пытаться спавниться на некотором расстоянии, либо запускать таймер и пытаться спавниться после того как выйдет время
 
СообщениеКак бы сделал я.
Создаем менеджер спавна. В нем два List. Первый - свободные точки, второй - занятые.
Когда кто-то хочет создасться - он запрашивает у менеджера точку для спавна - GetSpawnPoint()
Менеджер берет первую из списка свободных - перекладывает ее в список занятых и возвращает тому, кто запросил.
Как освобождать? Тот кто запрашивал точку спавна после того как появился в мире - начинает в Update проверять расстояние до точки спавна. Когда это расстояние станет больше чем его размер, вызываем функцию в менеджере ReleaseSpawnPoint(Vector3 point) Менеджер в ней перекладывает точку из списка занятых в список свободных.

Это в первом приближении.
Что Можно улучшить? Кто-то вполне может шастая по миру занять точку спавна из списка свободных. Поэтому точку спавна все же лучше сделать триггером. Когда кто-то в нее входит - триггер говорит менеджеру, что точка занята - GrabSpawnPoint(Vector3 point), когда выходит - говорит что освободилась - ReleaseSpawnPoint(Vector3 point). При этом не нужно проверять в Update расстояние (см. курсив выше). Когда созданный объект выйдет из триггера - автоматом вызовется ReleaseSpawnPoint(Vector3 point)
________________________________________
Есть другой вариант - просто при спавне проверять свободно ли место. Если занято - либо пытаться спавниться на некотором расстоянии, либо запускать таймер и пытаться спавниться после того как выйдет время

Автор - seaman
Дата добавления - 15 Фев 2015 в 18:42
Форум Игроделов » UNITY3D » HELP & FAQ » спавн юнитов в точках (c#)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024