Как сделать сетку в unity

Добавил пользователь Skiper
Обновлено: 18.09.2024

Итак, строительство базы в стратегии. Параметры, которые участвуют в этом процессе могут самые разные. Возможно золото или минералы, доступность энергии и прочее. В каждом проекте может быть что-то индивидуальное, однако, общее для всех это само строительство, то есть, расстановка объектов в определенной области. Что нам нужно сделать? Во-первых, у нас есть набор иконок, каждый обозначает некую постройку. При клике по иконке, получаем заготовку постройки, которую можно двигать по плоскости XZ. Во-вторых, нужно сделать так, чтобы новые здания нельзя было создать там где уже есть постройка и там, где запрещено строить что-либо.

Данный вариант подходит только для 3D, для двухмерного проекта надо переделывать рэйкаст и плоскость движения объектов.

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

Строительство базы / расстановка объектов [RTS]

Коллайдер должен закрывать весь объект.

После создания основного строения - делаем его копию и заменяем материал. То есть, задача создать предварительный просмотр будущей постройки. В любой стратегии, мы перетаскиваем сначала макет постройки, обычно их делает полупрозрачными. Поскольку это макет, то на нем мы убираем анимацию если есть и подбираем внешний вид, например:


Точно также, объект должен закрываться коллайдером, но в режиме Is Trigger. При этом коллайдер макета можно сделать чуть-чуть больше чем у оригинала, на +0.1 допустим, это повысит чувствительность и гарантирует, чтобы невозможно было создать один объект поверх другого. У всех макетов должен быть установлен слой Ignore Raycast! Дополнительно на модельку вешаем Rigidbody и выключаем гравитацию. Плюс, вешаем небольшой скрипт MaskControl:

Задача этого скрипта в том, чтобы определять где можно установить объект, а где нет. В переменной respawnTag мы указываем тег, который разрешает установку. Допустим если сделать плоскость с тегом, то здание можно строить только в этой области, а если объект наткнется на другие строения то автоматически заблокируется. В общем всё как и обычной стратегии.

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

Теперь вешаем на пустой объект скрипт DragAndDrop:

original - массив всех префабов с оригинальными моделями построек.

mask - массив всех префабов макетов.

shift - сдвиг по оси Y для модельки.

respawnTag - тег плоскости на которой разрешено строительство.

На сцену нужно добавить несколько UI элементов, точнее иконки, GameObject > UI > Image. Создаем нужное количество иконок, размещаем как нужно. Затем, на каждую иконку надо добавить компонент Event Trigger, выбрать в нем функцию Pointer Click а потом перетащить в активное поле объект со скриптом DragAndDrop и меню выбрать функцию скрипта - SetMask и указываем номер макета. Например:


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

ЛКМ по иконке - получить макет здания. Повторный ЛКМ - установить здание. ПКМ - отмена. Колесико мыши - вращать.

Отличительной чертой Unity является его гибкость, адаптивность к разработке как небольших 2D-паззлов или аркад, так и к разработке больших-серьезный стратегий, RPG или игр других жанров. В то же время, одной из парадигм Unity является простота освоения и удобство работы.

Создание ландшафта в Unity сравнимо с работой в редакторе ландшафта Warcraft 3. Немногим сложнее, зато предоставляются возможности по созданию действительной красивых ландшафтов.

Часть первая. С чего начать?

Начать следует, конечно, с установки и запуска редактора.
Процесс установки пропустим, так как он не вызовет затруднений ни у кого.
Итак, редактор запущен. Создаем или загружаем проект, в котором предстоит делать ландшафт. Если вы уверены, что не используете никаких ассетов с графикой, то следует выбрать ассет Environment из стандартной комплектации.
Следующее действие - добавить в проект этот самый "террейн", который будем создавать.
Для этого в верхнем (главном) меню выбираем GameObjects - > 3D Objects - > Terrain.

Появляется непонятный грязновато-белый квадрат с сеткой.
Выбираем новосозданный террейн на панели иерархии сцены (слева). Там же его можно переименовать, копировать, или удалить, но это не то, что нам нужно для создания. Итак, после этого в инспекторе (панель справа от сцены или вкладка. Кстати, её можно перетаскивать, чтобы расположить так, как вам удобно) появится символическое изображение стилизованного кубика как земля в майнкрафте с подписью террейн и несколькими инструментами.

Часть вторая. И что это за кнопки?

Первый инструмент, на иконке которого изображены горы со стрелочкой вверх (и который выделен на рисунке бирюзовым)- это создание неровностей. Им можно создавать возвышения (кликнув на террейне в нужном месте) или впадины (то же самое, но с зажатым шифтом).
Обратите внимание , что для получения эффекта нужно настроить кисть - её форму, размер и "силу" (Opacity - непрозрачность).
Обратите внимание также, что для создания полноценных впадин террейн нужно сначала поднять. В противном случае ландшафт лишь выровняется до минимального уровня.
В этом уроке не будет рекомендаций по созданию красивого ландшафта. Не будет даже советов по использованию созданного ландшафта. Цель урока - помочь освоиться с базовыми функциями редактора и, может быть, помочь преодолеть так называемый "ступор незнакомого интерфейса", возникающий у многих людей при запуске незнакомой программы или знакомой с изменившимся интерфейсом.

Наверняка после недолгих экспериментов вы получили некие резкие перепады высот, которые смотрятся "не очень". Для их устранения нам поможет Smooth terrain, расположенный справа через одну. Выглядит он как всё та же горка с каплей воды рядом (На рисунке выделен желтым). Это отнюдь не создание воды, как может показаться. Это сглаживание.
Левее, кстати, расположен инструмент для создания плато ( выделен зеленым ) - он выравнивает высоту. Для захвата необходимой высоты зажимаем Shift, после чего "рисуем" плато без зажатого шифта.
Следующие инструменты позволяют наложить на ландшафт текстуры, расположить деревья и декорации. Последняя кнопка на этой панели - настройки.

Для добавления текстуры (иконка - кисть, выделена красным ), нужно сначала добавить тайлы. Ниже настроек кистей будет панель текстур. Нажимаем Edit textures - > Add texture и подбираем нужную (и как Normal, и как Smoothness) из списка предложенных (к слову, их можно добавлять самостоятельно, но об этом в другой раз). Для наглядности можно создать первой текстурой GrassRockyAlbedo, а второй - GrassHillAlbedo, после чего поэкспериментировать с настройками кисти и текстуры, порисовав травой.
Преимуществом Unity является обилие кистей и довольно высокая гибкость их настроек, что после небольшой практике позволяет с легкостью создавать интересные ландшафты с минимумом усилий.

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

Также, на панельке можно найти кнопку "Mass Place Trees", которая позволяет заполнить весь террейн указанным количеством деревьев.
Последний инструмент ( выделен синей рамкой) - расположение деталей, то есть всяческих украшений, вроде травы. Опять же, в изначальной поставке их не то, чтобы много.
К примеру, выбираем Edit Details -> Add Grass Texture и выбираем текстуру GrassFrond01AlbedoAlpha после чего испытываем её кистью.

Заключение

Создание ландшафта в Unity3D - это не трудно. Конечно, использование Unity не гарантирует запредельный уровень графики без приложения каких-либо усилий, да и модели и текстуры, вероятно, придется делать самостоятельно или с привлечением художников и 3D-артистов, искать в сети, либо покупать. Охватить все тонкости в рамках одной статьи решительно невозможно. Более того, статья рассматривает лишь одну грань работы с Unity.

Надеюсь, что она помогла абсолютным новичкам немного разобраться с интерфейсом и возможностями Unity.

Спасибо за совет! Но мне нужно что то типа A*Pathfinding grid саму сетку рендерить не обязательно она нужна только для проверки можно ли здесь строить или нет.
Для лучшего понимания чего мне нужно опишу алгоритм: Жмем по кнопке строить пускаем луч в террайн проверяем попали ли мы в ячейку сетки или нет если да то перемещаем объект к левой верхней точки данной ячейки ну и проверяем сколько объект занимает ячеек вот как то так. Надеюсь так будет понятней. Хотя может Ваш совет именно то что мне и нужно.

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

Еще в интернете нарыл, что как то можно сделать это через Projectors может кто делал?

У меня есть GameObject с Quad MeshFilter . Размер по умолчанию равен 1x1, и я могу изменить его размер, установив его масштаб, но это также изменяет размеры всех его дочерних элементов относительно изменения масштаба. Я попытался дать ему RectTransform но изменение ширины и высоты не изменило его размер. Регулярный компонент Transform не имеет элементов управления шириной и высотой.

Как установить размер сетки в Unity без масштабирования всех дочерних элементов?

Вам нужно рассчитать это :)

Возьмите текущие границы от компонента рендеринга. Это ваш реальный размер объекта на сцене. Вычислите новую шкалу для ожидаемых границ.

В качестве примера у вас есть:

Масштаб всех измерений равен 1 .

А потом просто установите эту newScaleX на X :)

Unity рассматривает сетки, а также изображения и звуки, как активы, созданные за пределами приложения. Конечно, в Unity вы можете перемещать 3D-модели вокруг, масштабировать и вращать их, но это очень простые возможности 3D-моделирования, и вы не сможете правильно редактировать 3d-модели в нем. Лично я считаю, что этого достаточно только для грубых прототипов, сделанных из масштабированных кубов.

Итак, если вы хотите изменить эти активы, вы можете:

Откройте отдельное приложение (Blender, 3ds Max, Maya для 3d моделей) и создайте сетку, которую вы хотите. Вероятно, это решение, которое вы хотите.

Создайте скрипт, который изменит объект Mesh во время выполнения. Хотя это хорошее решение для некоторых проблем, возможно, это не то, что вы ищете.

Используйте один из сторонних пакетов, которые предоставляют возможности 3D моделирования для Unity, например ProBuilder. Имейте в виду, что я не использовал его, и это не рекомендация. Я просто показываю, что эта альтернатива существует.

Читайте также: