Создайте систему, которая будет генерировать сетку стен и полов из текстового файла.
Цели
Сегодня я хочу сделать так, чтобы моя игра могла отображать план этажа в виде текстового файла, который выглядит как матрица с такими тегами:
Затем мой grid_manager прочитает этот файл и сгенерирует из него сетку. Я хочу, чтобы мой grid_manager был достаточно умен, чтобы принимать прямоугольную матрицу любого размера, если в ней есть допустимые теги.
Оттуда мой grid_manager сможет сгенерировать пол с соответствующими игровыми объектами.
Спрайт
Во-первых, давайте просто создадим спрайт стены и превратим его в сборный, как и все остальные мои спрайты.
В целях тестирования я собираюсь придерживаться правила хранить важные вещи в ярких цветах и использовать землистые цвета для неважных элементов игры.
Для моей стены подойдет серовато-коричневый цвет.
Между прочим, я получаю все свои цвета, спамя кнопку случайный выбор на этом веб-сайте, пока не найду то, что мне нужно.
Мы здесь :
Сборный
Как и в прошлый раз, в моей игре будет много стен, поэтому мне понадобится многоразовый актив, который можно легко создать, и он, вероятно, будет иметь больше функциональных возможностей, чем просто спрайт, поэтому я делаю его в префаб и помещаю его в каталог ресурсов.
Поместите стены в мою сетку
Я решил, что хочу сделать это, чтобы создать матрицу через текстовый файл, затем прочитать текстовый файл и сгенерировать сетку для каждой ячейки в матрице. Для каждой ячейки в матрице я хочу создать стену, где есть стена, и создать пол для каждой плитки, даже если есть стена. таким образом, под стеной останется пол.
Это пригодится мне позже, когда или если я захочу добавить игровую механику, позволяющую игроку прорываться сквозь стены.
Зачем нужна эта реализация?
Я выбрал именно так, потому что могу быть уверен, что такая реализация возможна. У Unity может быть более элегантный вариант, но я не знаю, что это такое.
Кроме того, это позволяет мне легко создавать библиотеку уровней с помощью различных методов.
Одна из моих будущих целей - создать веб-портал, где друзья, семьи и фанаты смогут создавать уровни для моей игры с помощью простого редактора сетки. Моя реализация настроена таким образом, что эта цель не будет слишком сложной. Я могу просто создать API, который сможет генерировать текстовые файлы на основе входных данных в редакторе сетки.
Позже может автоматически генерировать всевозможные лабиринты, используя различные матричные алгоритмы.
Как это работает
Мой код стал немного запутаннее, но я сохранил все компоненты такими же и расширил свой игровой объект grid_manager.
Я убрал сериализацию строк и столбцов и вместо этого создал метод, который будет читать локальный текстовый файл по некоторому пути, который я передаю в вызов метода.
Этот метод автоматически определит размер моей матрицы и передаст ее содержимое моему grid_generator.
Этот бизнес по передаче моего пути моему файловому ридеру важен, потому что он позволит мне контролировать, какой уровень я рисую на экране, когда я вызываю свой grid_generator из master_manager.
Это поможет мне позже, когда я захочу позволить игроку переходить с одного уровня на другой.
Вместо того, чтобы создавать экземпляр плитки пола, мой grid_manager вместо этого обнаружит тег в каждой позиции моей матрицы и создаст экземпляр префаба, связанного с этим тегом.
С какими неприятностями я столкнулся?
Ну, я использую Ruby на своей повседневной работе, и я почти никогда не использовал C #, поэтому мне потребовалось около часа, чтобы понять, как читать из локального текстового файла в Unity. К счастью, матричный синтаксис C # очень удобен, так что это было несложно.
Примерно через час я пожаловался друзьям и сделал небольшой перерыв, чтобы посмотреть фильм, но после этого быстрого освежения у меня не было проблем.
После небольшого исправления ошибок все заработало!
Результат :
Ресурсы, используемые сегодня
Я создал всю сегодняшнюю работу следующим образом:
3. различные потоки переполнения стека
Это все на сегодня!
В следующий раз я сделаю так, чтобы мой персонаж не мог проходить сквозь стены.