Динамическая подгрузка уровня

Программирование на Юнити.

Динамическая подгрузка уровня

Сообщение DiXel 04 ноя 2013, 16:21

Есть уровень, состоящий из клеток, очень большой, возможно - бесконечный.
Я понимаю, что нужно двигать землю под персонажем, вместо самого персонажа, чтобы не уходить далеко от Vector3(0,0,0), но как это реализовать на деле? допустим, уровень также поделен на чанки(области, допустим 10х10 клеток) как именно подгружать, инстансить чанки и удалять те, что позади по мере продвижения по уровню, учитывая то, что персонаж может двигаться в любую сторону? Не надо скрипты за меня писать, просто псевдокод или хотя бы просто на словах объясните мне, плиз. Решил проект сначала продумать от и до на бумаге, на псевдокоде, так что скрипты писать не надо.
Skype: dixellitum
Mail: _the.dixx@yandex.ru
DiXel
UNIверсал
 
Сообщения: 396
Зарегистрирован: 27 май 2011, 07:19

Re: Динамическая подгрузка уровня

Сообщение liver9711 05 ноя 2013, 13:25

Подождите, то есть вы считаете, что вам не хватит координатной сетки размерами от -2^31 до (2^31 - 1)? Даже если вы по каким-либо неописуемым причинам дойдёте до такого значения (порядка 2,1 млрд.), то у вас получится портал, пройдя через который, разве что рендер накосячит, а движение персонажа будет похоже на резкое перемещение от минимума к максимуму, но вообще без видимых последствий. Землю двигать не надо, это геморно, очень, не думаю, что хоть кто-нибудь при движении даже 100 корд./с, хоть когда-нибудь достигнет "края".
По поводу динамической прогрузки: Страшного тут ничего нет, нужно просто сделать проверку дистанции. Создаете мнимый квадрат от вида сверху, что в него попадает - то свойства обретает. Что-то вроде координатной сетки вокруг персонажа, так как это сетка, то используем шаг, скажем 1. Самое главное это проверка, и необязательно очень частая, 1 раз в 3-5 секунд хватит, InvokeRepeating("НазваниеФункции", через сколько сек начать, промежуток времени до повтора вызова) или http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.InvokeRepeating.html, загоняем все "стены" в массив, и смотрим, не вылетел ли кто за пределы мнимого куба? Ага! Весь ряд вот тут, следует, что на противоположной стороне целый ряд пуст, те что вышли за пределы либо передвигаем с изменением мэша, если надо, либо удаляем и в пустые места ставим новые. Но тут уже целиком идёт дело знания синтаксиса, тут столько разнообразной скриптовой "матершины", с которой и я иногда не справляюсь. :)
Почему вы решили начать со сложного?
liver9711
UNITрон
 
Сообщения: 285
Зарегистрирован: 14 мар 2012, 11:16

Re: Динамическая подгрузка уровня

Сообщение Diab10 05 ноя 2013, 17:29

liver9711 писал(а):Подождите, то есть вы считаете, что вам не хватит координатной сетки размерами от -2^31 до (2^31 - 1)?


При чём тут это? При большом отклонении от координаты 0,0,0 - начинаются дёрганья рендера из-за погрешности float'a
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Динамическая подгрузка уровня

Сообщение liver9711 05 ноя 2013, 18:09

Ну это явно далеко нужно уйти, чтоб такое произошло.
liver9711
UNITрон
 
Сообщения: 285
Зарегистрирован: 14 мар 2012, 11:16

Re: Динамическая подгрузка уровня

Сообщение seaman 05 ноя 2013, 18:36

Проверьте.
ЗЫ: У Левши в космосе начинались некие глюки с нескольких сот метров. Не знаю - решил ли он их.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Динамическая подгрузка уровня

Сообщение igoryan 05 ноя 2013, 21:43

Тестил до 10к все ок!
Самая популярная игра жанра квест называется "Где второй носок"
Аватара пользователя
igoryan
UNITрон
 
Сообщения: 174
Зарегистрирован: 16 сен 2012, 19:35
Откуда: Азов

Re: Динамическая подгрузка уровня

Сообщение liver9711 06 ноя 2013, 11:44

"Подвисаниями" залетел за 100к, всё тоже ок, может у Левши просто скрипты такие, неидеальные, с кем не бывает... тем более уж со мной...
liver9711
UNITрон
 
Сообщения: 285
Зарегистрирован: 14 мар 2012, 11:16

Re: Динамическая подгрузка уровня

Сообщение seaman 06 ноя 2013, 15:41

Проверил. Заметное на глаз дрожание появляется где-то чуть меньше 100000 от начала координат.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Динамическая подгрузка уровня

Сообщение Diab10 07 ноя 2013, 08:58

Уже обсуждалось, что дело тут не только в цифрах, а и в масштабах моделей. К примеру, дом 2-х этажный на координате 10 000 будет себя вести нормально, а монетка 1 рубль - будет колбаситься.
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Динамическая подгрузка уровня

Сообщение seaman 07 ноя 2013, 15:42

Стандартный куб. По углам уменьшенные в 5 раз шарики. Это как - соответствует двухэтажному дому? Видимое на глаз дрожание шариков относительно куба начинается на расстоянии около 100 000. Хотя, конечно здесь есть уники, которые видят больше 100 кадров в секунду. Возможно они увидят дрожание и на 10 метрах от начала координат.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Динамическая подгрузка уровня

Сообщение Multirezonator 16 ноя 2013, 20:38

Если земля будет двигаться под песонажем - движку прийдется каждый кадр просчитывать все коллайдеры - это приведет к значительному падению производительности при наполнении сцены объектами.
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Динамическая подгрузка уровня

Сообщение Guyver 18 ноя 2013, 07:10

портальте игрока при отдалении больше чем эпсилон. т.о. не будет флоат погрешности + не будет проблем с движением коллайдеров т.е. всё статик

п.с. когда делал для себя технодемку за космос .. двигал рут ноду, звёзды по октри кулил, физики не юзал. зато была проблема при массовом включении 100500 тел при резком повороте камеры. решал через очередь претендентов на включение и размазывал по времени.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6