Вторник, 17 октября 2017, 10:57

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [306]
Статьи об общих понятиях связанных с созданием игр.
Программирование [68]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [123]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [4]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [69]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [55]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Типа какой из этих игр вы предпочитаете делать игры?
Всего ответов: 16193
Главная » Статьи » Создание игр

[Урок] Unity. Создание космического параллакса
Приветствую, уважаемое сообщество!

Сегодня, я хотел бы поделится с вами простым способом создания параллакс-эффекта в космосе.
Данный скрипт, как и его реализация очень и очень прост и под силу любому.
На создание собственного параллакса меня подвигло усиление эффекта присутствия при разработки простенькой 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. Функция смены проверки необходимости смены направления движения
Код

public void checkDirection()
{
  moveTimeTimer -= Time.deltaTime;
  if(moveTimeTimer<=0)
  {
  moveTimeTimer = moveTime;
  changeMoveDirection();
  }
}


3. Функция перемещения отдельного слоя
Код

public void moveBg()
{
  if(moveDirection)
  {  
  transform.Translate(Vector3.forward*Time.deltaTime*speed, Space.World);
  }
  else
  {  
  transform.Translate(Vector3.back*Time.deltaTime*speed, Space.World);
  }
}


Далее, найдите функцию Update() и пропишите в ней вызовы наших функций:
Код

void Update () {
  checkDirection();
  moveBg();
}




Сохраняем наш скрипт и открываем Unity.

Финишная прямая
Выбираем самый нижний Plane с текстурой фона космоса, в окне Inspector нажимаем кнопку "Add Component", выбираем Script и выбираем созданный нами скрипт. После этого, в окне Inspector появится дополнительный блок "Background Move (Script)" с настройками нашего скрипта.
Задайте значения Speed и Move Time (скорость и время перемещения слоя).


Проделайте аналогичные действия с двумя другими Plan'ами. Рекомендую выставлять значения Move Time одинаковыми для всех слоёв. Значения Speed у каждого слоя должны отличаться, у самого верхнего слоя значение Speed должно быть больше всего.

Хотя, вам никто не мешает экспериментировать. Запускаем сцену - радуемся результату.

Посмотреть что получилось можно тут

Всем спасибо за внимание! Удачи в разработке!
Категория: Создание игр | Добавил: DIMM (05 октября 2013) | Автор: DIMM
Просмотров: 8123 | Комментарии: 8 | Рейтинг: 4.8/10 |
Теги: Минерит, Код, Космос, скрипт, урок, Unity, Unity3D, Параллакс, U3D
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «[Урок] Unity. Создание космического параллакса», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 8
+1-
8 Ayawaska   (14 ноября 2013 14:48)
AyawaskaСсылка на результат не работает.

+2-
1 NEBR   (06 октября 2013 23:20)
NEBRКлассно! И, действительно, все просто. Спасибо )))

+1-
2 DIMM   (07 октября 2013 07:41)
Спасибо!
На самом деле, знающие люди советуют оптимизировать саму "поверхность" размещение текстур, ибо Plane имеет кучу полигонов, а квад (вроде так называется новая фишка юньки) имеет всего два полика.

+1-
3 NEBR   (07 октября 2013 09:27)
NEBRквад? не слышал. он еще не появился в юньке? Я использую обычно простые сильно сплющенные кубы, предварительно сделав его модель с UV разверткой на нужной мне плоскости. С оптимизацией вроде порядок пока )

+1-
4 DIMM   (07 октября 2013 09:29)
это в новом патче обещается, честно, не в курсе подробностей и до этого не сталкивался.

+1-
5 NEBR   (07 октября 2013 09:41)
NEBRблин, какой же офигенный должен быть этот новый пак ) быстрее бы ) happy

+1-
6 error111   (07 октября 2013 13:54)
error111Квад есть в 4.2, ну по крайней мере у меня. GameObject > CreateOther > Quad.

+1-
7 NEBR   (07 октября 2013 17:03)
NEBRспасибо, удобный примитив )

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • AresEd
  • Golden T Game Engine
  • Game Hammer 2
  • Maker3D
  • EasyRPG
  • Fabula
  • INSTEAD
  • PointJS
  • LuxRender
  • Jake2
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    GameDev, Уроки OpenGL, Программирование, Создать Minecraft
    Все права сохранены. GcUp.ru © 2008-2017 Рейтинг