Немножко про создание видеоигры. Заполнение текстов
Любая игра должна с чего-то начинаться. Как и книга или фильм. Мне всегда нравилось, когда есть повествование истории. Поэтому подумал, как бы сделать так, чтобы создалось ощущение, будто мы играем в чьих-то воспоминаниях.
Первое, что вспомнилось, как начинается мультфильм Шрек 2001 года. Идет наводка камеры на книгу, которая открывается, перелистывается и начинается повествование. Красиво!
Но мы пошли другим путем. И вот, что получилось:
Исходные данные: Unity 3d, парочка симпатичных ассетов и желание сделать интересно (получилось или нет, на ваш суд, господа).
Предпринятые шаги:
1. Анимация движения камеры:
В аниматоре создаем клип и записываем движение камеры (если кому интересно более подробно узнать про создание анимации движения объекта в Unity, дайте знать в комментариях, сделаю отдельный пост). Изменяем позицию, вращение и угол обзора камеры.
Выглядит это так:
2. Заполнение текста:
2.1 Заполнение текста осуществляется кодом функции. Скрипт с функцией вешаем на камеру и в анимации камеры, кликнув правой кнопкой мыши на верхней темной линии добавим анимационное событие:
И выбираем функцию:
Функция должна быть публичной. Тогда она отобразится в листе для выбора. Лист ищет все допустимые функции для выбора из всех скриптов, которые были повешены на камеру.
2.2 Создание скрипта:
Что за тексты мы будем заполнять. Их 4:
Создаем скрипт, назовем его FillTexts и пропишем 4 публичных текстовых переменных и сохраним скрипт:
Дальше назначим каждый текст своей переменной:
Пропишем сами тексты, которые хотим изобразить:
tempText - это та переменная, которая будет отображаться в конкретный момент для того или иного текста. Понятнее станет чуть ниже ;)
Очистим тексты при запуске сцены:
Сама функция, которая запускается в анимации:
textIs - переменная, отвечающая за то, какой в данный момент заполняется текст. То как только анимация запускает эту функцию мы говорим: заполняется первый текст.
Заполнение будет происходить в функции Update(), стандартная функция Unity, которая запускается каждый фрейм.
Мы хотим сделать эффект записей. Значит, если мы будем писать новую букву каждый фрейм, будет очень быстро. Нужно сделать пропускание n-го числа фреймов и писать новую букву каждый 5-й раз, например.
Для пропускания n-го количества фреймов использую переменные step, fasterStep (если хочу пропускать меньше фреймов и быстрее заполнять тексты) и ts (счетчик, который считает количество пропущенных фреймов).
Логика пропуска фреймов линии 41 - 47
Линии 49-61 - логика заполнения текста. В данном случае первого. Когда первый текст заполнится, переменная textIs принимает значение 2. Переходим к заполнению второго текста:
Как видим, логика заполнения такая же. Переходим к тексту 3.
В данном случае, когда заполнится третий текст, мы хотим, чтобы скорость заполнения четвертого текста стала быстрее. Для этого меняем step на fasterStep.
Четвертый текст заполняется по такой же логике, что и остальные:
Больше текстов нет, поэтому textIs, принимая значение 5, просто закончит всю полезную работу скрипта.
P.S. постарался сделать код как можно понятнее, поэтому есть повторяющиеся блоки (опытные программисты, привет), новички, надеюсь, вам понравилась идея и вы ее попробуете.
Это мой первый пост про создание игр. Вернее, одной игры. Делаю ее уже 5-й год. Но это уже совсем другая история.
Если кому интересно, в инстаграме меня можно найти leonardo.island
Там все остальные ссылки.
Спасибо за внимание и напоследок видео (качество съедает, правда):
Лига Разработчиков Видеоигр
6.7K постов22.2K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"