Как сделать фон в юнити 3д

Добавил пользователь Alex
Обновлено: 05.10.2024

Это сценарий, который я использую для Parallex. Мой корневой gameobject имеет 6 слоев в качестве дочерних. Скрипт изменит горизонтальное положение отдельного ребенка в зависимости от камеры. Вам придется настроить сборный. Корневой игровой объект будет иметь этот скрипт. Из инспектора вы можете установить индивидуальные ссылки.

PS: Это может выглядеть сложно, но это не так сложно реализовать. Дайте мне знать, если это поможет.

Еще в рубрике

Другие вопросы

установить текстуру графического интерфейса пользователя для установки панели пользовательского интерфейса


      1. У вас должны быть рисунки (я использую в формате png с прозрачным фоном), из которых будете делать палитру (Tile Pallete), а из палитры фон.
      2. В окне Project создаем папку для рисунков (Sprites), кликаем на правую кнопку — Import New Asset. Рисунке в проекте, с ними дальше можно работать.
      3. Нужно создать сетку для нанесения фона (Tilemap). Переходим в меню GameObject — 2D — Tilemap. В Hierarchy появляется Grid-Tilemap.
      4. Добавляйте сколько хотите слоев, в Inspector — Tilemap Renderer установите порядок слоев:


      1. Открывайте в меню Window — 2D — Tile Pallete (если нет такого пункта, читаем здесь как добавить). Нажимаем Create New Palette. Их можно создавать сколько угодно.
      2. Далее Tile Palette остается открытым, в Project открываем папку с рисунками, которые импортировали в п. 2 и перетаскиваем в Tile Pallete самый мелкий рисунок. Этот рисунок определит масштаб для более крупных рисунков. Далее перетаскиваем остальные рисунки. Например, это может выглядеть так:Зеленая точка слева определяет масштаб. Если бы перенес в палитру сначала футбольное поле, то оно бы уместилось в одну ячейку.
      3. Далее выбираем на каком слое будем рисовать (на рисунке выше Active Tilemap).
      4. Выбираем кисточку, выделяем на Tile Pallete тот кусок, который хотим перенести на слой, и собственно рисуем.
      5. Если, например, нужно раскрасить вокруг футбольного поля все зеленым, то выбираем зеленый пиксель, выбираем прямоугольник (рядом с кисточкой) и выделяем на сцене тот участок, который должен стать зеленым. Это ускоряет раскраску. Нам достаточно выделить область вместо того, чтобы кликать на каждую ячейку.

      Unity3D & CG / Unity 3D

      Евгений Коновалов

      Евгений Коновалов запись закреплена

      Илья Баженков


      Илья Баженков


      Сергей Бугров

      Евгений Коновалов

      Илья, у меня две картинки, фон и персонаж. В итоге у меня на заднем плане персонаж а на переднем фон который его перекрывает.
      2D игра.

      Евгений Коновалов


      Сергей Бугров ответил Евгению

      Константин Бакшеев

      Евгений, в 2д у всех элементов есть СЛОЙ (layer). Ставь фону 0, объектам 1.
      В 2д координата зет похоже не работает.

      Константин Бакшеев

      Владислав Орешкин

      Константин Бакшеев

      Рэйстлин, мы с тобой ниже переписывались, я фейерверк делал. У меня перемещение по зет не помогло. Я сначала фон минус первым слоем сделал, т.к. слой фейерверка не знал как поменять, потом меня научили и его слой менять. В общем помогло только перемещение слоёв.

      Константин Бакшеев

      Рэйстлин, ну я тоже не настаивают. Может конкретно в том проекте, по каким либо причинам. Буду способ иметь ввиду.


      В этом посте мы рассмотрим как можно применить подход Двигателя на Тёмной Материи для создания бесконечного 2D фона.

      Если вы сталкивались с мобильными играми в общественном транспорте, то наверняка могли заметить, что одними из самых популярных в поездке являются игры жанра Endless runner, например, Subway Surfers, а для любителей археологии примером может послужить Электроника ИМ23 “Автослалом”. Основным признаком данного жанра является бесконечно перемещающийся элемента(персонаж или другой объект), который обычно самостоятельно движется вперёд навстречу препятствиям, а управление даётся только для возможности эти препятствия избегать. Бесконечное перемещение подразумевает бесконечное пространство доступное для движения игрока, создание которых является не самой простой задачей, как могло бы показаться на первый взгляд. Этим постом мы открываем цикл, в котором рассмотрим элементы, которые помогут создать такие бесконечные, в каком-то смысле, миры.

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

      Проблематика

      Первым что приходит в голову, когда вас просят сделать корабль, который перемещается в пространстве, это добавить модель корабля, задать ему вектор скорости, привязать к нему камеру, подложить фон и начать сдвигать корабль вдоль вектора, помноженного на Time.deltaTime . Если откинуть очевидные вещи с ограниченными размерами фона, которые в любом случае придётся решать, главной проблемой бесконечного перемещения окажется координатное пространство Unity, которое привязано к переменным типа float и с увеличением координат точность будет падать. Для более точного описания проблемы вы можете посмотреть вот это видео "64 Bit In Kerbal Space Program".

      Dark Matter Engine

      Для решения данного вопроса можно использовать подход, с помощью которого работает Двигатель на Тёмной Материи из “Футурамы”. Если коротко описать принцип его действия, то двигатель двигает не корабль, а пространство вокруг корабля. То есть, в нашем случае вместо того чтобы двигать вдоль вектора скорости наш корабль мы будем двигать все объекты вокруг него в противоположном направлении. Таким образом, если наша камера привязана к кораблю, то мы всегда будем оставаться в точке начала координат и наша точность не будет падать из-за увеличения расстояния. Да и в целом для решения вопроса с бесконечным перемещением, выбрать началом координат наше положение выглядит более красивым решением, нежели привязываться к какой-либо другой точке в пространстве.

      Задача

      Сделать перемещение космического корабля вдоль бесконечного 2D фона. Корабль можно поворачивать вокруг оси Z при помощи клика по правой/левой стороне экрана. Камера всегда будет сонаправлена с вектором движения корабля.

      Решение

      Я не буду распространять ассеты, которые используются для примера. Найти подходящие вам ресурсы это тоже большая работа и я предлагаю вам в этом потренироваться, если не знаете с чего начать, то можно посетить бесплатный itch.io или поискать в интернете "Free game assets" .

      Нам понадобится текстура для корабля и текстура для фона. Основное требование к фону будет его зацикленность как в вертикальном, так и в горизонтальном направлении.

      1. Добавьте в проект текстуры корабля и фона, для фона необходимо выставить Mesh type - Full rect и Wrap mode - Repeat
      2. Создайте структуру объектов такого содержания
      3. Добавьте текстуру для корабля
      4. Добавьте текстуру для фона, выставите Draw mode - Tiled и Order in Layer = -1
      5. Создайте скрипт UniverseHandler, добавьте его к объекту Universe

      Результат

      Как можно увидеть в результирующей гифке объект фона смещается в начальное положение по направлению, в котором достигается сдвиг на изначальный размер фона, за счёт чего достигается визуальная бесшовность его перемещения.

      Альтернативные решения

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

      Заключение

      Когда мы задумываемся о создании бесконечных пространств подход Двигателя на Тёмной Материи является основным средством обхода ограничений точности для Unity. Совмещённый с обычными передвижениями сдвиг центра координат тоже можно отнести в эту же группу. Приведённый же пример прекрасно подходит для создания фонов и эффекта параллакса. Однако, работа с более сложными объектами требует иных подходов и для создания реальных неограниченных пространств необходимо ввести множество других механик. Эти вопросы мы рассмотрим в следующих статьях цикла про бесконечные миры. Пока! =)

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