Немножко про создание видеоигры. Заполнение текстов

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


Первое, что вспомнилось, как начинается мультфильм Шрек 2001 года. Идет наводка камеры на книгу, которая открывается, перелистывается и начинается повествование. Красиво!


Но мы пошли другим путем. И вот, что получилось:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Исходные данные: Unity 3d, парочка симпатичных ассетов и желание сделать интересно (получилось или нет, на ваш суд, господа).


Предпринятые шаги:


1. Анимация движения камеры:

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

Выглядит это так:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

2. Заполнение текста:

2.1 Заполнение текста осуществляется кодом функции. Скрипт с функцией вешаем на камеру и в анимации камеры, кликнув правой кнопкой мыши на верхней темной линии добавим анимационное событие:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

И выбираем функцию:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Функция должна быть публичной. Тогда она отобразится в листе для выбора. Лист ищет все допустимые функции для выбора из всех скриптов, которые были повешены на камеру.


2.2 Создание скрипта:

Что за тексты мы будем заполнять. Их 4:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Создаем скрипт, назовем его FillTexts и пропишем 4 публичных текстовых переменных и сохраним скрипт:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Дальше назначим каждый текст своей переменной:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Пропишем сами тексты, которые хотим изобразить:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

tempText - это та переменная, которая будет отображаться в конкретный момент для того или иного текста. Понятнее станет чуть ниже ;)


Очистим тексты при запуске сцены:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Сама функция, которая запускается в анимации:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

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


Заполнение будет происходить в функции Update(), стандартная функция Unity, которая запускается каждый фрейм.

Мы хотим сделать эффект записей. Значит, если мы будем писать новую букву каждый фрейм, будет очень быстро. Нужно сделать пропускание n-го числа фреймов и писать новую букву каждый 5-й раз, например.

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Для пропускания n-го количества фреймов использую переменные step, fasterStep (если хочу пропускать меньше фреймов и быстрее заполнять тексты) и ts (счетчик, который считает количество пропущенных фреймов).

Логика пропуска фреймов линии 41 - 47


Линии 49-61 - логика заполнения текста. В данном случае первого. Когда первый текст заполнится, переменная textIs принимает значение 2. Переходим к заполнению второго текста:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Как видим, логика заполнения такая же. Переходим к тексту 3.

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

В данном случае, когда заполнится третий текст, мы хотим, чтобы скорость заполнения четвертого текста стала быстрее. Для этого меняем step на fasterStep.

Четвертый текст заполняется по такой же логике, что и остальные:

Немножко про создание видеоигры. Заполнение текстов Gamedev, Unity, Unity3D, Medieval, Анимация, Инди, Компьютерные игры, Видеоигра, Геймеры, Steam, Разработка, Game Art, Гифка, Видео, Длиннопост

Больше текстов нет, поэтому textIs, принимая значение 5, просто закончит всю полезную работу скрипта.


P.S. постарался сделать код как можно понятнее, поэтому есть повторяющиеся блоки (опытные программисты, привет), новички, надеюсь, вам понравилась идея и вы ее попробуете.


Это мой первый пост про создание игр. Вернее, одной игры. Делаю ее уже 5-й год. Но это уже совсем другая история.

Если кому интересно, в инстаграме меня можно найти leonardo.island

Там все остальные ссылки.


Спасибо за внимание и напоследок видео (качество съедает, правда):

Лига Разработчиков Видеоигр

6.7K постов22.2K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"