Сегодня, я хотел бы поделится с вами простым способом создания параллакс-эффекта в космосе. Данный скрипт, как и его реализация очень и очень прост и под силу любому. На создание собственного параллакса меня подвигло усиление эффекта присутствия при разработки простенькой Tower Defence игрульки.
Итак, приступим.
Задача Разработать универсальный скрипт параллакс-эффекта
Используемые средства Photoshop для создания фонового изображения Unity3D/Mono Develop
Подготовка Для начала, создадим простой бекграунд для нашей игры в любому подходящем графическом редакторе. Прошу обратить внимание: при создании такого бекграунда, задействованно три слоя минимум. Если фоновых слоёв будет меньше – красота эффекта не будет видна. При большем количестве слоёв эффект усиливается и приобретает потрясающий вид.
Итак, разбивка нашего бекграунда по слоям: 1. Самый нижний, тёмный фон, туманность, планета 2. Средний слой, звезды, находящийся к зрителю визуально ближе, т.е. крупнее 3. Верхний слой, самые крупные звезды, находятся максимально близко к зрителю
Все слои, за исключением нижнего, должны иметь прозрачный фон с отрисованными на нём объектами (звездами, кометами, астероидами т.п.)
Старт Запустите Unity3D, создайте новый проект в любом удобном для вас месте. Дополнительные пакеты нас не интересуют. В окне Project в директории Assets создайте дополнительные директории Textures – Backgrounds. Скопируйте в папку Background три файла нашего космоса.
Вверху, выберите пункт меню Game Object – Create Other – Plane. Это позволит создать «площадку» для размещения наших космических изображений. Повторите данное действие ещё два раза.
В окне Hierarchi переименуйте созданные Plane в background_1, background_2, background_3.
Выставите размеры Plan’ов на свою усмотрение, я использовал Scale (окно Inspector – Transform) X 2.5 , Y 1 , Z 2.5
И следующие значения Position Background_1 X 0, Y 0, Z 0 Background_2 X 0, Y 1, Z 0 Background_3 X 0, Y 3, Z 0
Как видите, три наших площадки разместились по центру ровно друг над другом. Перетащите на каждую из них соответствующий их положению слой космоса (нижня площадка – нижний слой космоса с планетами/туманностями и т.д.) Настройте позицию и угол наклона нашей камеры так, как вам удобно, я раземстил её ровно по центре над всеми Plan’ами и направил вертикально вниз. Теперь, давайте разместим источник освещения нашей сцены. Выберите Game Object – Create Other – Point Light. Опять же, позицию источника света, а также уровень его мощности выберите согласно вашим пожеланиям.
Подведём итог: У нас размещены три Plane, одна камера, один источник освещения. Каждому Plane «пришиты» соответствующие текстуры космоса. Всё смотрится круто и замечательно, продолжим, и начнём писать сам скрипт, добавляющий нашей сцене эффект параллакса.
Код В директории Assets создайте поддиректорию Scripts. Я использую C#, поэтому, зайдите в папку Scripts в окне Project, нажмите правой кнопкой мыши, выберите в выпадающем меню Create – C# Script. Назовём наш скрипт BackgroundMove. Двойным кликом на скрипте запустим MonoDevelop.
Во-первых, объявим необходимые для нас переменные:
Код
public float speed; public float moveTime; float moveTimeTimer; bool moveDirection; //true - right move, false - left move
Разберём: Переменная speed будет отвечать за скорость перемещения отдельного слоя космоса; переменная moveTime отвечает за длительность перемещения отдельного слоя космоса; переменная moveTimeTimer служит простым счетчиком времени; переменная moveDirection позволяет нам контролировать направление движения отдельного слоя космоса. Переменные speed и moveTime имеют приставку public, дабы мы могли задавать им значения прямо из окна Inspector в Unity.
Найдите в вашем скрипте функцию Start, пропишите ей следующие действия:
Код
void Start () { moveDirection = true; //выставляем начальное значения стороны движения moveTimeTimer = moveTime; //присваиваем таймеру начальное значение }
Создайте три функции: 1. Функция смены направления движения
Код
public void changeMoveDirection() { moveDirection = !moveDirection; }
2. Функция смены проверки необходимости смены направления движения
Финишная прямая Выбираем самый нижний Plane с текстурой фона космоса, в окне Inspector нажимаем кнопку "Add Component", выбираем Script и выбираем созданный нами скрипт. После этого, в окне Inspector появится дополнительный блок "Background Move (Script)" с настройками нашего скрипта. Задайте значения Speed и Move Time (скорость и время перемещения слоя).
Проделайте аналогичные действия с двумя другими Plan'ами. Рекомендую выставлять значения Move Time одинаковыми для всех слоёв. Значения Speed у каждого слоя должны отличаться, у самого верхнего слоя значение Speed должно быть больше всего.
Хотя, вам никто не мешает экспериментировать. Запускаем сцену - радуемся результату.
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «[Урок] Unity. Создание космического параллакса», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Спасибо! На самом деле, знающие люди советуют оптимизировать саму "поверхность" размещение текстур, ибо Plane имеет кучу полигонов, а квад (вроде так называется новая фишка юньки) имеет всего два полика.
квад? не слышал. он еще не появился в юньке? Я использую обычно простые сильно сплющенные кубы, предварительно сделав его модель с UV разверткой на нужной мне плоскости. С оптимизацией вроде порядок пока )