Sandbox часть 3
В прошлой части я рассказал немного о генерации сетки и теперь пришло время эту сетку изменять. Так как я решил что при изменении ландшафта у меня будет изменяться не только та ячейка которую меняет игрок, но и в некоторых случаях соседние, но для этого нужно чтобы эта ячейка "знала" о них, как бы не странно это звучало. Вот я накидал схемку расположения :
Синие точки это вершины, жирные синие точки это основные вершины, именно с ними будет взаимодействовать игрок, зеленым маркером я обвел ячейку. Как видно на схеме каждая ячейка, если она не находится в крайнем ряду или крайнем столбце имеет 8 соседних ячеек и если провести линию между двумя основными вершинами между ними всегда будет находиться одна промежуточная. Пройдя по массиву ячеек можно создать некоторое подобие LinkedList сохранив в ячейке ссылки на её соседей, только список получается не двунаправленный а аж восьминаправленный) Таким образом допустим наша ячейка знает о соседе справа, а сосед справа знает о своем соседе справа и так можно обойти весь список просто задав направление.
Для чего же это нужно? Это нужно в первую очередь для того чтобы mesh менялся более реалистично, ведь я уже говорил о том что игрок взаимодействует только с основной вершиной. Допустим высота основной вершины была увеличена на 1 . Ячейка берет высоты соседних основных вершин по очереди и устанавливает в промежуточных (мелкие синие точки на схеме) среднее арифметическое между собой и соседней основной вершиной. Ну а осыпание это уже мелочи по сравнению с тем что было выше. просто при повышении или понижении высоты проверяются перепады с соседними клетками, и если он после изменения станет больше чем нужно, то изменение не происходит, а вызывается (рекурсивно) тот же самый механизм но уже для той ячейки с которой не выполнилось условие и так далее пока оно не выполнится. Получилось жутко занудно, сам от себя не ожидал, но как без занудства объяснить это я не знаю, разве что за бутылочкой исчеркав пару блокнотов))
Вот как то так это выглядит после изменения. На сегодня думаю хватит информации. До новых встреч!
Лига Разработчиков Видеоигр
7.3K постов22.4K подписчика
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"