Как сделать рогалик на unity

Nomad Hermit’s Grove

Pages

This poll is no longer accepting votes

Newsletter

Recent Posts

Recent Comments

Categories

Building a Roguelike From Scratch – Unity Tutorial part 1 – Setup

There aren’t many tutorials for how to make a roguelike on Unity out there, so I thought I would create one. Not for arrogance, but just to share a bit of my knowledge with people who are on the point I was not so long ago. This is my first tutorial ever, and I don’t know how good it will end up being, or even if good at all.

DISCLAIMER: I’m not saying this is THE way of building roguelikes on Unity. It’s just ONE way of making them. And probably not the best or more effective, just the way I learned by trial and error. And even some stuff I’ll be actually learning along with you as I go.

​I will assume you are at least familiar with the basics of Unity, like how to create a prefab, or a script, and things like that. Don’t expect me to teach you how to create a spritesheet, there are dozens of wonderful tutorials out there about that. I won’t focus at all on the hows of the engine, instead, I’ll be focusing on the hows of the game we’ll be creating together. If you are stuck on anything, go to one of the awesome communities we have on Discord and don’t hesitate on asking for help there:

This is Part 1 of the tutorial. You may find the other parts here:

So, let’s strike the earth!

Step 0 – Planning

Yes, that’s right. The first thing to do is to plan. It’s good for you to plan the game, and it’s good for me to plan the tutorial, so we won’t get too much out of focus after a while. It’s easy to get lost on game features, as it is to get lost on roguelike dungeons.

We’ll be doing a roguelike. Mostly we’ll follow some sound advice from Cogmind’s dev Josh Ge on this link here. Seriously, go there and either read the post or watch the video, and then come back here.

So, what is our goal with this tutorial? It is to have a basic, simple, and solid roguelike to play with. It should have a dungeon generation, a player that moves around, a fog of view, some enemies and some items. Just the basic stuff. Right. The player should be able to go down the stairs a couple of levels, let’s say five, level up, get better, and at the end fight a boss and win. Or die trying. That’s pretty much it.

So, following Josh Ge’s advice, we’ll beeline with our features towards that goal. Then we’ll have a roguelike framework you can expand onto, do your own twists, and then make it your own. Or throw it all aside, take what you’ve learnt, and start again from scratch your way. Anyway is fantastic.

I won’t provide any art assets. Do your own, or use a premade free tileset you can find here, here, or through a google search. Just make sure to give the appropriate credits in your game.

Now, let’s list all the features we’ll have on our Roguelike, on the order we’ll implement it:

With that we’ll have a sound roguelike, and you’ll have improved your gamedev skills a lot. It was actually my way of increasing my skills, learning by going there and doing stuff. So I bet you’ll be able to handle it too. So, let’s go.

Step 1 – The MapManager Class

This is the first script you’ll create, and it will be the spine of your game. It’s a straightforward script, but it will store the majority of the relevant information of the game.

So, create a cs script called MapManager and open it.

Delete the “: MonoBehaviour,” as this script won’t inherit from it and won’t be attached to any GameObject.

Delete the Start() and Update() functions.

Below the end of the MapManager class, create a new one, a public class named Tile.

The Tile class will hold every information of any tile. For now, we won’t need much, just the x and y positions, and the game object that is on that position on the map.

Now we have our basic tile information. Let’s create a map out of that tile, shall we? It’s simple, we just need a two-dimensional array of Tiles. It sounds complicated, but it’s not that much. We need only to add a Tile[,] variable to the MapManager class, like this:

Voilá! We have a map!

Okay, it’s empty. But it’s a map. Every time anything will move or change state on the map, it will update the information on this map. So when, for example, the player will try to move to a new tile, it will check the target tile adress on the map, and see if there is an enemy there, or if the tile is walkable. That way, we won’t need to check a thousand collisions each turn, nor will need colliders on every single game object, this way making the game a lot lighter and easier to handle.

The resulting code will look like this:​

First step done, let’s move on to populating that map. Stay tuned for the next post.

Источник

Создание roguelike в Unity с нуля: генератор подземелий

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

На этот раз мы погрузимся в реализацию алгоритма генератора подземелий. В прошлой статье мы создали первую комнату, а теперь сгенерируем остальной уровень подземелья.

Но прежде чем мы начнём, я бы хотел исправить ошибку из предыдущего поста. На самом деле, за последние недели я научился кое-чему новому, из-за чего часть проделанной мной работы устарела, и я хочу рассказать об этом.

Помните созданный нами класс Position? Вообще-то в Unity уже имеется встроенный класс, выполняющий точно такие же функции, но с немного более качественным управлением — его проще объявлять и обрабатывать. Этот класс называется Vector2Int. Поэтому перед началом мы удалим из MapManager.cs класс Position и заменим каждую переменную Position на переменную Vector2Int.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Это же надо проделать в нескольких местах скрипта DungeonGenerator.cs. Теперь давайте приступим к остальной части алгоритма.

Этап 7 — генерация комнаты/коридора

Мы начнём с небольшого изменения созданной в прошлый раз функции FirstRoom(). Вместо создания другой функции для генерации всех остальных элементов карты и дублирования кучи кода, мы просто преобразуем эту функцию, превратив её в обобщённую GenerateFeature(). Поэтому изменим имя с FirstRoom на GenerateFeature.

Теперь нам нужно будет передавать этой функции параметры. Во-первых функции нужно знать, какой элемент она генерирует — комнату или коридор. Мы можем просто передать строку с именем type. Далее функции нужно знать начальную точку элемента, то есть из какой стены она исходит (потому что мы всегда создаём новый элемент из стены более старого элемента), и для этого достаточно передачи в качестве аргумента Wall. Наконец, первая создаваемая комната имеет особые характеристики, поэтому нам нужна необязательная переменная bool, сообщающая, является ли элемент первой комнатой. По умолчанию она имеет значение false: bool isFirst = false. Итак заголовок функции сменится с этого:

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Отлично. Следующим шагом будет изменение способа вычисления ширины и высоты элемента. Пока мы вычисляем их, получая случайное значение между значениями min и max высоты и ширины комнат — для комнат это подходит идеально, но не будет работать для коридоров. Итак, пока у нас имеется следующее:

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Но коридоры будут иметь постоянный размер 3 в ширину или высоту, в зависимости от ориентации. Поэтому нам нужно проверять, чем является элемент — комнатой или коридором, а потом выполнять соответствующие вычисления.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Итак. мы проверяем, является ли элемент комнатой. Если да, то мы делаем так же, как и раньше
— получаем случайное число в интервале между min и max высоты и ширины. Но теперь в else того же if нужно сделать нечто немного иное. Нам нужно проверить ориентацию коридора. К счастью, при генерации стены мы сохраняем информацию о том, в какую сторону она направлена, поэтому используем её для получения ориентации коридора.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Но мы пока не объявили переменную minCorridorLength. Нужно вернуться к объявлениям переменных и объявить её, прямо над maxCorridorLength.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Теперь вернёмся к нашим условным операторам switch. Что мы здесь делаем: получаем значение направления стены, то есть, куда смотрит стена, из которой будет идти коридор. Направление может иметь всего четыре возможных значения: South, North, West и East. В случае South и North коридор будет иметь ширину 3 (две стены и пол посередине) и переменную высоту (длину). Для West и East всё будет наоборот: высота будет постоянно равна 3, а ширина иметь переменную длину. Итак, давайте сделаем это.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Здорово. И на этом мы закончили с определением размера нового элемента. Теперь нужно решить, куда его помещать. Первую комнату мы расположили в случайное место в пределах пороговых значений относительно центра карты.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Но для всех остальных элементов это не сработает. Они должны начинаться рядом со случайной точкой стены, из которой генерируется элемент. Поэтому давайте изменим код. Во-первых, нам нужно проверить, является ли элемент первой комнатой. Если это первая комната, то мы определяем начальные точки так же, как и ранее — как половину ширины и высоты карты.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

В else если элемент не является первой комнатой, то мы получаем случайную точку на стене, из которой генерируется элемент. Во-первых, мы должны проверить, имеет ли стена размер 3 (это будет означать, что она является конечной точкой коридора), и если это так, то всегда будет выбираться средняя точка, то есть индекс 1 массива стены (при 3 элементах массив имеет индексы 0, 1, 2). Но если размер не равен 3 (стена не является конечной точкой коридора), то мы берём случайную точку в промежутке между точкой 1 и длиной стены минус 2. Это нужно, чтобы избежать проходов, создаваемых в углу. То есть, например, на стене с длиной 6 мы исключаем индексы 0 и 5 (первый и последний), и выбираем случайную точку среди точек 1, 2, 3 и 4.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Теперь у нас есть позиция точки на стене, в которой будет создаваться новый элемент. Но мы не можем просто начать генерировать элемент оттуда, потому что так он будет заблокирован уже размещёнными стенами. Также важно заметить, что элемент начинает генерироваться с его левого нижнего угла, а затем инкремент выполняется вправо и вверх, поэтому мы должны задавать начальную позицию в разных местах, в зависимости от направления, в котором смотрит стена. Кроме того, первый столбец x и первая строка y будут стенами, и если начать новый элемент прямо рядом с точкой на стене, то мы можем создать коридор, заканчивающийся в углу комнаты, а не в подходящем месте на стене.

Итак, если стена направлена на север, то нужно, чтобы элемент начинался в одной позиции на север по оси y, но в случайном числе позиций к западу по оси x, в интервале от 1 до ширины комнаты-2. В направлении юга ось x действует так же, но начальная позиция по оси y является позицией точки на стене минус высота комнаты. Западная и восточная стены следуют той же логике, только с перевёрнутыми осями.

Но прежде чем всё это делать, нам нужно сохранить позицию точки стены в переменную Vector2Int, чтобы можно было позже ею манипулировать.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Замечательно. Давайте сделаем это.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Итак, мы сгенерировали элемент с размером и позицией, и следующим этапом будет размещение элемента на карте. Но для начала нам нужно узнать, действительно ли на карте есть пространство для этого элемента в этой позиции. Пока мы просто вызовем функцию CheckIfHasSpace(). Она будет подчёркнута красным, потому что мы пока её не реализовали. Мы сделаем это сразу же после того, как закончим то, что нужно сделать здесь, в функции GenerateFeature(). Поэтому не обращайте внимания на красное подчёркивание, и продолжайте.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

В следующей части создаются стены. Пока мы не будем её трогать, за исключением фрагмента во втором цикле for.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Во время написания этого поста я заметил, что эти конструкции if-else совершенно неверны. Например, некоторые стены в них будут получать длину 1. Так происходит потому, что когда позиция должна прибавляться, допустим, к северной стене, то если она была на углу с восточной стеной, она не добавится к восточной стене, как и должна. Это вызывало раздражающие баги алгоритма генерации. Давайте их устраним.

Исправить их довольно просто. Достаточно удалить все else, чтобы позиция проходила через все конструкции if, а не останавливалась на первой, если та вернула значение true. Затем последнюю else (ту, которая не else if) мы меняем на if, который проверяет, что позиция уже добавлена как Wall, и если это не так, добавляет её как Floor.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Потрясающе, мы почти здесь закончили. Теперь у нас есть совершенно новый элемент, создаваемый на нужном месте, но он такой же, как и имеющаяся у нас первая комната: полностью замкнут стенами. Это означает, что игрок не сможет попасть в это новое место. То есть нам нужно преобразовать точку на стене (которая, как мы помним, хранится в переменной типа Vector2Int) и соответствующую точку на стене нового элемента во Floor. Но только тогда, когда элемент не является первой комнатой.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

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

Мы достигли последней части функции GenerateFeature(). В ней уже есть строки, добавляющие информацию о создаваемом функцией элементе.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Здесь нам нужно кое-что изменить. Во-первых, тип элемента не всегда равен Room. К счастью, функции передаётся как параметр нужная переменная, а именно строка type. Так что давайте просто заменим здесь «Room» на type.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Хорошо. Теперь, чтобы генерирующий все элементы игры алгоритм работал правильно, нам нужно добавить сюда новые данные. А именно int, который подсчитывает количество созданных элементов и список всех созданных элементов. Поднимемся к месту, где мы объявляем все переменные, и объявим int с именем countFeatures, а также List элементов с именем allFeatures. Список всех элементов должен быть публичным, а счётчик int может быть и приватным.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Теперь вернёмся к функции GenerateFeature() и добавим в конец несколько строк: инкремент переменной countFeatures и добавление нового элемента в список allFeatures.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Итак, наша GenerateFeature() практически завершена. Позже нам нужно будет к ней вернуться, чтобы заполнить пустую функцию CheckIfHasSpace, но сначала надо её создать. Именно этим мы сейчас и займёмся.

Этап 8 — проверяем, есть ли место

Теперь давайте создадим новую функцию сразу после завершения функции GenerateFeature(). Ей нужны два аргумента: позиция, в которой начинается элемент, и позиция, в которой он заканчивается. В качестве них можно использовать две переменные Vector2Int. Функция должна возвращать значение bool, чтобы можно было использовать его в if для проверки наличия места.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Она подчёркнута красным, потому что пока ничего не возвращает. Скоро мы это исправим, а пока не будем обращать внимания. В этой функции мы будем обходить в цикле все позиции между началом и концом элемента, и проверять, равна ли текущая позиция в MapManager.map значению null или там уже что-то есть. Если там что-то есть, то мы прекращаем выполнение функции и возвращаем false. Если нет, то продолжаем. Если функция доходит до конца цикла, не встретив заполненных мест, то возвращаем true.

Кроме того, перед проверкой позицией на null нам нужна строка для проверки, находится ли позиция в пределах карты. Потому что в противном случае мы можем получить ошибку индекса массива и сбой игры.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Отлично. Теперь вернёмся к тому месту, где мы вставляем эту функцию внутрь функции GenerateFeature(). Нам нужно исправить этот вызов, потому что он не передаёт нужных аргументов.

Здесь мы хотим вставить оператор if для проверки наличия достаточного места для элемента. Если результат равен false, то на этом мы завершаем функцию, не вставляя новый элемент в MapManager.map.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Нам нужно передать требуемые аргументы, то есть две переменные Vector2Int. С первой всё просто, это позиция с координатами x и y точки начала элемента.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Со второй всё сложнее, но не намного. Это начальная точка плюс высота для y и ширина для x, с вычитанием из обоих 1 (потому что начало уже учтено).

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Теперь давайте перейдём к следующему этапу — созданию алгоритма для вызова функции GenerateFeature().

Этап 9 — вызов генерируемых элементов

Вернёмся к функции GenerateDungeon(), созданной в предыдущей части статьи. Сейчас она должна выглядеть так:

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Вызов FirstRoom() подчёркнут красным, потому что мы изменили имя этой функции. Поэтому давайте просто вызовем генерацию первой комнаты.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Мы передали необходимые аргументы: «Room» в качестве type, потому что первая комната всегда будет Room, new Wall(), потому что первая комната не создаётся ни из какой другой, поэтому мы просто передаём значение null, и это вполне нормально. Вместо new Wall() можно подставить null, это вопрос личных предпочтений. Последний аргумент определяет, является ли новый элемент первой комнатой, поэтому в нашем случае мы передаём true.

Теперь мы подходим к главному. Используем цикл for, который будет выполняться 500 раз — да, мы попробуем добавить элементы 500 раз. Но если количество созданных элементов (переменная countFeatures) равно максимальному заданному количеству элементов (переменная maxFeatures), то мы прерываем этот цикл.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Первым делом в этом цикле мы объявим элемент, из которого будет создаваться новый элемент. Если у нас создан только один элемент (первая комната), то именно она будет исходной. В противном случае мы случайным образом выбираем один из уже созданных элементов.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Теперь мы выберем, какая стена этого элемента будет использоваться для создания нового элемента.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Учтите, что у нас пока нет этой функции ChoseWall(). Давайте быстренько её напишем. Спустимся вниз, к завершению функции, и создадим её. Она должна возвращать стену, а в качестве аргумента использовать элемент, чтобы функция могла выбрать стену этого элемента.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

В этой функции мы будем находить стену, из которой пока не был создан элемент. Иногда у нас будут получаться элементы, к одной или нескольким стенам которых уже присоединены другие элементы, поэтому нам нужно снова и снова проверять, свободна ли какая-нибудь из случайных стен. Для этого мы используем цикл for, повторяемый десять раз — если после этих десяти раз свободная стена не найдена, то функция возвращает null.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Теперь вернёмся к функции GenerateDungeon() и передадим исходный элемент как параметр функции ChoseWall().

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Строка if (wall == null) continue; означает, что если функция поиска стены вернула false, то исходный элемент не может породить из себя новый элемент, поэтому функция продолжит (continue) цикл, то есть не она не смогла создать новый элемент и переходит к следующей итерации цикла.

Теперь нам нужно выбрать тип для следующего элемента. Если исходный элемент является комнатой, то следующий обязательно должен быть коридором (мы не хотим, чтобы комната прямиком вела в другую комнату без коридора между ними). Но если это коридор, то нам нужно создать вероятность того, что следующим будет ещё один коридор или комната.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Отлично. Теперь нам просто нужно вызвать функцию GenerateFeature(), передав ей в качестве параметров стену и тип.

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

И последнее — перейдите в инспектор Unity, выберите объект GameManager и измените значения на следующие:

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Если теперь нажать на кнопку play, то вы уже увидите результаты!

Как сделать рогалик на unity. Смотреть фото Как сделать рогалик на unity. Смотреть картинку Как сделать рогалик на unity. Картинка про Как сделать рогалик на unity. Фото Как сделать рогалик на unity

Как я и говорил, это не самое лучшее подземелье. У нас получилось много тупиков. Но оно вполне функционально, и оно гарантирует, что у вас не будет комнаты, не соединённой ни с какой другой.

Надеюсь, вам понравилось! В следующем посте мы создадим игрока, который будет перемещаться по подземелью, а потом мы превратим карту из ASCII в спрайтовую.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *