Как сделать террейн в юнити

Unity: работа с Terrain

Предисловие

Привет, народец! Меня всё-таки попросили написать отдельную статью, как работать с Terrain и создать локацию. Предыдущие статьи Вы можете обнаружить по ссылкам:

Terrain

Отлично, половина работы сделана. Давайте придадим некие очертания нашему квадрату, а именно, создадим горы у краёв Terrain. Для этого переходим в Inspector и находим кисточку Paint Terrain, в ней выбираем графу Raise or Lower Terrain.

После выбираем подходящую кисть, размер(Brush size) и Opacity(силу воздействия). Я выбрал параметры 7 и 10. Начинаем водить нашей кистью по краям Terrain и получаем горы по краям, если Вы всё сделали правильно, у Вас должно получиться что-то подобное.

После я возьму другую кисть (тут уже на ваш выбор), выставлю Opacity на 3 и начну водить ей по ровным поверхностям что бы создать эффект российских ровных дорог =). Получилось вот так.

Мне кажется, я объяснил, как пользоваться кистями. Поигравшись с настройками, вы вполне сможете создать от пустыни до тропиков, всё зависит от фантазии, единственное что еще скажу, если вы ходите сделать возвышенность меньше, то просто зажмите клавишу Shift, от этого будет обратный эффект. Сейчас же не будем на этом зацикливаться и двинемся дальше.

Текстуры

После всех манипуляций у меня появился серый квадрат с непонятными выпуклостями, нужно придать ему немного жизни.И снова тут несколько вариантов:

Идём в Asset Store и вводим в поисковике standard assets, он сразу же нам выдаст необходимый пак. Скачиваем, интегрируем, радуемся =).

Снова нажимаем на кисточку в Inspector Terrain и выбираем строку Paint Textures. Ниже видим строку Edit Terrain Layers, выбираем Create Layer. В появившемся окне я нахожу текстуру травы(GraceHillAlbedo) применяю и вижу, что моя серая постройка стала зеленой.

Добавляем очередную текстуру, у меня это CliffAlbedoSpecular, её я буду использовать для разрисовки гор, негоже что бы всё было одного цвета. Выбираю кисть, размер, и текстуру гор, начинаю рисовать.

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

Получился конечно не шедевр, но у меня нет желание тратить на это больше 5 минут =). А теперь, для Зеленых, посадим несколько деревьев! Выбираем Paint Trees рядом с кистью, нажимаем Edit Trees и выбираем Add Tree. Нажимаем на кружочек в поле Tree Prefab и выбираем дерево которое нам понравилось. В паке оказалось всего три дерева, и я решил добавить их все. Поставив первое дерево, я обнаружил что оно слишком уж большое, поэтому перетаскиваем бегунок Tree Height влево до нужного нам размера и начинаем посадку деревьев.

Получилось довольно неплохо для проекта, собранного на скорую руку.

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

Заключение

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

Источник

Creating and editing Terrains

To add a Terrain GameObject to your Scene, select GameObject > 3D Object > Terrain from the menu. This also adds a corresponding Terrain Asset to the Project view. When you do this, the landscape is initially a large, flat plane. The Terrain’s Inspector window provides a number of tools to create detailed landscape features.

Как сделать террейн в юнити. Смотреть фото Как сделать террейн в юнити. Смотреть картинку Как сделать террейн в юнити. Картинка про Как сделать террейн в юнити. Фото Как сделать террейн в юнитиTerrain editing tools in the Inspector

Terrain editing tools in the Inspector

The toolbar provides five options to adjust your Terrain:

Select the paintbrush icon to access painting tools, which allow you to modify the Terrain. Use the cursor to sculpt the height of the Terrain, or paint texture onto the Terrain. Choose from several built-in Brush shapes, or define your own Brush using a texture. You can also change the size and opacity (the strength of the applied effect) of the Brush. Once you’ve defined the properties, your cursor takes the shape of the selected Brush. Click or drag on the Terrain to create different shapes and textures.

Similar to how you paint with a Brush on the Terrain, you can add textures, trees, and details like grass, flowers, and rocks. You can also create additional connected Terrain tiles, change the height of an entire tile, and even write custom Brushes with complex effects.

Terrain keyboard shortcuts

The Terrain Inspector has the following keyboard shortcuts enabled by default.

To set your own custom shortcuts, use the Shortcuts Manager.

Under Category, select Terrain to display Terrain-related shortcut assignments. For more information about setting and modifying shortcuts, see the Shortcuts Manager page.

Как сделать террейн в юнити. Смотреть фото Как сделать террейн в юнити. Смотреть картинку Как сделать террейн в юнити. Картинка про Как сделать террейн в юнити. Фото Как сделать террейн в юнитиList of Terrain shortcuts

Additionally, the standard F keystroke works slightly differently for Terrain. As Terrains are typically very large, when you press the F key, the Scene view focuses on the area where you position the cursor. This provides a very quick and intuitive way to jump to the Terrain area you want to edit. If you press F while the cursor is not over a Terrain tile, it uses the standard framing behavior, framing the selection around the whole GameObject when you place the cursor over the Scene view.

Additional resources

2019–04–17 Page amended

Updated content to match new UI and added information about keyboard shortcuts

Источник

Creating and editing Terrains

To add a Terrain GameObject to your Scene, select GameObject > 3D Object > Terrain from the menu. This also adds a corresponding Terrain Asset to the Project view. When you do this, the landscape is initially a large, flat plane. The Terrain’s Inspector window provides a number of tools to create detailed landscape features.

Как сделать террейн в юнити. Смотреть фото Как сделать террейн в юнити. Смотреть картинку Как сделать террейн в юнити. Картинка про Как сделать террейн в юнити. Фото Как сделать террейн в юнитиTerrain editing tools in the Inspector

The four-icon toolbar provides options to sculpt and paint your Terrain, add trees and details such as grass, flowers, and rocks, and change general settings for the selected Terrain. For more information about each of these icons, see Terrain tools, Trees, Grass and other details, and Terrain Settings.

Select the paintbrush icon to access painting tools, which allow you to modify the Terrain. Use the cursor to sculpt the height of the Terrain, or paint texture onto the Terrain in various ways. Your cursor takes the shape of the selected brush; choose from several built-in shapes, or define your own brush using a texture. You can also change the size and opacity (the strength of the applied effect) of the brush. Then, click or drag on the Terrain to create different shapes and textures.

Similar to how you paint with a brush on the Terrain, you can add textures, trees, and details like grass. You can also create additional connected Terrain tiles, change the height of an entire tile, and even write custom brushes with complex effects.

Terrain keyboard shortcuts

The Terrain Inspector has the following keyboard shortcuts:

Additionally, the standard F keystroke works slightly differently for Terrain. Normally, it frames the selection around the whole GameObject when you place the cursor over the Scene view. However, Terrains are typically very large, so when you press the F key, the Scene view focuses on the area where you position the cursor. This provides a very quick and intuitive way to jump to the Terrain area you want to edit. If you press F while the cursor is not over a Terrain tile, it reverts to the standard framing behavior.

Additional resources

2019–01–29 Page amended with editorial review

New layout and functionality added in 2018.3

Источник

Трава и другие детали

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

Как сделать террейн в юнити. Смотреть фото Как сделать террейн в юнити. Смотреть картинку Как сделать террейн в юнити. Картинка про Как сделать террейн в юнити. Фото Как сделать террейн в юнитиTerrain с травой

Включение деталей

Кнопка details на панели инструментов включает заливку травой/деталями.

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

Изначально, у terrain нет доступной травы или деталей, но если вы нажмете на кнопку Edit Details в инспекторе, откроется меню с пунктами Add Grass Texture и Add Detail Mesh. Эти окна позволяют выбрать ассеты, которые вы хотите добавить к terrain’у для заливки.

For grass, the window looks like this:

Как сделать террейн в юнити. Смотреть фото Как сделать террейн в юнити. Смотреть картинку Как сделать террейн в юнити. Картинка про Как сделать террейн в юнити. Фото Как сделать террейн в юнитиОкно Add Grass Texture

Значения полей Min Width, Min Height, Max Width и Max Height задают верхние и нижние пределы размеров пучков генерируемой травы. Для создания более естественного вида, трава генерируется со случайными “шумными” шаблонами, которые имеют “проплешины”, засаженные травой.

Значение поля Noise Spread задает приблизительный размер чередующихся участков, большее значение определяет большее распределение в заданной области. Техническое замечание: шум на самом деле генерируется с использованием Perlin noise (шума Перлина); распределение шума ссылается на применённое масштабирование между x,y координатами на terrain’е и картинкой шума. Чередующиеся скопления травы считаются более свежими ближе к центру, чем на краях, и настройки Healthy/Dry Color задают цвета степени свежести травы.

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

Для мешей деталей, таких как камни, окно выбора выглядит так:-

Как сделать террейн в юнити. Смотреть фото Как сделать террейн в юнити. Смотреть картинку Как сделать террейн в юнити. Картинка про Как сделать террейн в юнити. Фото Как сделать террейн в юнитиОкно Add Detail Mesh

Значение поля Detail используется, чтобы выбрать префаб из проекта, который будет масштабирован в пределах Random Width и Random Height для каждого экземпляра. Параметры Noise Spread и Healthy/Dry Color делают тоже, что и в случае с травой (хотя концепт “свежести” несколько натянут, когда речь идёт о применении к таким объектам, как камни!). Выпадающий список Render Mode может быть установлен в состояние Grass или Vertex Lit. В режиме Grass Mode, экземпляры объектов детализации на сцене будут преобразованы в плоские двумерные изображения, которые ведут себя как трава. В режиме Vertex Lit, элементы детализации будут отрисованы как объемные объекты с вершинным освещением.

Источник

Блендинг террейна и меша в Unity

Всем привет, в июне OTUS вновь запускает курс «Разработчик игр на Unity». В преддверии старта курса, мы подготовили перевод интересного материала по теме.

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

Итак, начнем. Для начала я выделю проблему и углублюсь в теорию, на которой будет основано решение. Чтобы сделать блендинг между террейном и другими мешами нужно как-то сказать шейдеру, где происходит пересечение с террейном. Сказать легче, чем сделать, но способ есть. И в чем же он заключается? Нам поможет Render Texture!

Что такое Render Texture?

Render Texture – это, по сути, позиция камеры, которая сохранена в asset-файле. Render Texture в играх чаще всего используется для таких вещей, как создание экранов видеонаблюдения. Мы можем использовать Render Texture для сохранения вида с камеры в редакторе, чтобы затем эту текстуру можно было использовать как шейдер. Полезно это, потому что мы можем запекать информацию о нашем террейне, такую как высота, нормали и цвета, в текстуру, которую затем можно использовать в рантайме для блендинга между мешами и террейном.

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

Рендеринг текстур используется для вывода изображения гуся на телевизоры в Untitled Goose Game

Настройка

Для начала давайте создадим новую сцену и террейн. Установим какой-нибудь удобный для работы размер, например, 200×200. Теперь вы можете обустроить террейн, как вам захочется. Затем создайте новый слой и назовите его “Terrain” и присвойте террейн этому слою. Это нужно, чтобы маска камеры могла записывать террейн в Render Texture.

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

Мой шедевральный террейн

В исходных файлах проекта есть префаб, который называется “BlendBakingCamera” – перетащите его на сцену. Вы получите простую ортографическую камеру. На камере вам нужно поставить culling mask на новый слой террейна. Расположите камеру по центру террейна немного выше самой высокой точки на террейне. Затем отрегулируйте far clip plane так, чтобы камера видела пол террейна. В итоге выглядеть сцена должна примерно так:

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

Replacement Shader

Теперь, когда камера настроена, нужно найти способ записывать данные террейна. Для этого нам понадобятся Replacement Shaders. Replacement Shader кажется сомнительной перспективой, я и сам долгое время не понимал, как он работает. Но на самом деле все очень просто и эффективно. Использование Replacement Shader, по сути, означает визуализацию каждого объекта в поле зрения камеры с помощью одного шейдера, независимо от того, какой шейдер наложен на объекты. В итоге все объекты будут рендериться с помощью выбранного Replacement Shader, который на самом деле просто является обычным шейдером.

Шейдер, который нам понадобится для блендинга – это шейдер глубины. Он рендерит глубину сцены и является ключевым компонентом в создании нашего эффекта блендинга, поскольку он записывает значения глубины нашей камеры в текстуру, чтобы позже мы смогли их прочитать. Чтобы узнать больше об этом шейдере и о Replacement Shader в целом, рекомендую ознакомиться с этим руководством от Making Stuff Look Good in Unity.

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

Пример шейдера глубины

Начнем запекать

Давайте создадим новый класс и назовем его “TerrainBlendingBaker”. Начнем с реализации маски глубины для базового террейна. Позже мы еще вернемся к этому скрипту, чтобы добавить цвета и нормали.

Определим несколько переменных.

Теперь давайте создадим новый метод и назовем его «UpdateBakingCamera». В этом методе мы определим данные о камере, которые могут понадобиться шейдеру для рендера блендинга в глобальных переменных.

Теперь давайте запечем глубину террейна в текстуру.

Значения станут понятнее, когда мы начнем работать с шейдером. Вот небольшая картинка, которая может пролить немного света:

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

Мы собираемся перенести террейн на текстуру глубины, чтобы впоследствии прочитать ее и понять, где делать блендинг

Теперь у нас есть все, что нужно для создания базового эффекта блендинга в шейдере. На данном этапе скрипт выглядит примерно так: pastebin.com/xNusLJfh

Хорошо, теперь, когда у нас есть скрипт, мы можем добавить его к baking camera, которую мы добавили ранее. В начальных ассетах есть шейдер, который называется ‘DepthShader’ (Inresin/Shaders/DepthShader) и Render Texture, которая называется ‘DepthTerrainRT’ (Inresin/RenderTextures/DepthTextureRT), вам нужно поместить их в соответствующие поля в инспекторе.

После этого просто запустите метод через контекстное меню, чтобы запечь нашу глубину террейна в Render Texture.

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

Шейдер

Давайте, наконец, создадим шейдер для блендинга. Создайте новый стандартный amplify shader и откройте его, назовите ‘TerrainBlending’ или около того.

Теперь нам нужно создать UV для Render Texture. Это будет разница между точкой, которая рендерится и позицией baking camera, масштабированной относительно общей площади. Три глобальные переменные здесь те, которые мы только что объявили в коде. Также мы задаем worldY как локальную переменную, она нам понадобится позже.

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

Давайте возьмем текстуру глубины, которую мы назначили в качестве глобальной переменной (для этого добавьте texture sample node, сделайте его глобальным и назовите ‘TB_DEPTH’), если мы поместим выходные данные в поле debug amplify shader’a, мы сможем увидеть, что происходит. Создайте плоскость с материалом, к которому будет применен наш новый шейдер.

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

Итак, в шейдере у нас есть информация о глубине, теперь нужно добавить смещение по y, чтобы получить блендинг.

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

Этот блок масштабирует положение по y маски far clip plane, вычитает это значение из позиции мира по оси у точки, которая рендерится, а затем, наконец, смещает его на к нижней стороне ограничительной рамки камеры (положение камеры по оси y минус farclip plane).

Уже что-то! Мы видим, как края плоскости сливаются с террейном.

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

Хорошо, давайте сделаем блендинг более подконтрольным.

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

Теперь мы можем контролировать толщину и область блендинга террейна.

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

Думаю, что мы можем даже добавить немного шума. Давайте воспользуемся world position, чтобы сгенерировать шум из текстуры.

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

Текстуры шума лежат в папке с текстурами в стартовом проекте, их можно назначить в инспекторе или как константу в самом шейдере.

Наконец-то пришло время добавить немного текстур! Для начала давайте используем несколько простых одноцветных текстур, я добавил две текстуры в папку с ассетами текстур. Сделайте текстуру ‘SingleColorGrass’ текстурой террейна. Затем в шейдере нужно создать текстуру террейна и object texture node. Мы будем переключаться между ними по красному каналу маски, которую мы только что создали.

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

А вот и полный шейдер

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

Добавление кастомного освещение toon или модели unlit lighting обеспечит лучшие результаты работы этого шейдера. Я включил unlit шейдер террейна и unlit версию шейдера в полный пакет, доступный спонсорам.

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

Unlit террейн и меши

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

Что же, мы почти закончили с основной темой сегодняшнего руководства. Я добавил несколько разделов, которые могут помочь с расширением шейдера.

Расширение шейдера — нормали

Я добавил в файлы обычный шейдер, вы можете использовать его для записи нормалей к поверхности террейна и также использовать блендинг. Для моей игры мне не нужен блендинг нормалей, поэтому я просто немного поэкспериментировал, и похоже, что эксперимент удался, и моя идея хорошо работает для террейна без высокой степени изменения высоты. Я включил шейдер маппинга нормалей в директорию с шейдерами стартового набора. Здесь вы можете увидеть мою базовую реализацию карты нормалей:

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

Код почти такой же, как и в случае с картой глубины, но на этот раз мы будем использовать карту нормалей в качестве replacement shader. Также я добавил набор render texture для записи нормали (здесь может понадобиться дополнительная настройка).

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

Расширение шейдера – все цвета

Я не собираюсь глубоко вдаваться в подробности этой темы, поскольку она выходит за рамки того, что требуется для моей игры, но я додумался до этого во время написания этого руководства. Чтобы добавить блендинг множества цветов, мы можем выбрать unlit цвета террейна и сохранить их как текстуры. В этом случае мы ограничены достаточно низким разрешением, но этот метод хорошо работает при использовании одноцветных текстур террейна и текстур с низким разрешением, или же при использовании faint bleed. С учетом небольших корректировок, они также могут быть применены к мешам террейнов.

Здесь приведен код для многоцветного варианта:

Единственное изменение в шейдере заключается в том, что вместо использования предопределенной текстуры мы используем глобально заданную текстуру поверхности террейна, которая будет использовать относительное положение в качестве UV. Дополнительное расширение позволит получить более приятный блендинг текстур.

Как сделать террейн в юнити. Смотреть фото Как сделать террейн в юнити. Смотреть картинку Как сделать террейн в юнити. Картинка про Как сделать террейн в юнити. Фото Как сделать террейн в юнити
Блендинг нескольких текстур

Здесь представлен полный многоцветный граф с шейдером блендинга нормалей:

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

Заключение

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

Источник

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

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