Вторник, 19 Марта 2024, 07:06

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

Меню сайта
Категории каталога
Создание игр [354]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [144]
Статьи о программах для создания игр, уроки и описания.
Софт [39]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [160]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [128]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Вы создаете собственные сайты?
Всего ответов: 1917
Главная » Статьи » Создание игр

[Урок] 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
Просмотров: 18419 | Комментарии: 9 | Рейтинг: 4.8/10 |
Теги: Минерит, код, космос, скрипт, Урок, Unity, Unity3D, Параллакс, U3D
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

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

Всего комментариев: 9
+0-
9 peniks   (13 Августа 2019 11:49) [Материал]
На самом деле... примитивно, но прикольно!
Вот порно которое тоже подходит по теме!
https://peniks.ru/video478
Пишите в комментах ваше мнение!

+2-
8 Ayawaska   (14 Ноября 2013 14:48) [Материал]
AyawaskaСсылка на результат не работает.

+3-
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 случ. движков
  • PGD Community Engine
  • QCake
  • PuzzleScript
  • Ultra App Kit
  • GLHeretic
  • Eternity
  • Gamvas
  • OpenSceneGraph
  • Grit
  • TDG
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг