Unity — один из самых популярных движков для создания 2D- или 3D-игр. На этой платформе разрабатывались популярные проекты в разных жанрах: платформеры, раннеры, экшен-игры, симуляторы и другие.
Школа программирования “Пиксель” обучает детей от 10 лет созданию проектов на “Юнити” и делится бесплатными уроками. В этом уроке мы научимся делать хоррор игру на “Юнити”. В конце материала мы прикрепим скрипты и видеоинструкцию.
Создание проекта на “Юнити” и скачивание материалов
Для игры нам понадобятся 3D-модели, звуки и картинки. Данные материалы мы скачали для примера из интернета, у вас же могут быть свои. Запускаем Unity Hub и создаем новый проект. Переходим по кнопке Window, Asset Store. Далее нажимаем Search Online и находим 2 бесплатных ассета.
Floor Materials Pack — это набор текстур для пола и стен, а также Mini First Person Controller, который добавляет управление от первого лица, он нам и понадобится. После добавления на сайте открываем Package Manager и импортируем ассеты в проект. А также перенесем скачанные материалы в “Юнити”.
Делаю РАБОЧИЕ ИГРЫ в PowerPoint, MS Word (2048)
Создание уровня в “Юнити”
Создаем Plane и придаем ему нужную форму с помощью инструмента Scale. Перемещаем в нулевые координаты. Теперь сделаем стены с помощь кубов, перемещаем и масштабируем их, пока не добьемся нужного результата.
Наложение текстур в Unity
Переходим в папку с текстурами и перетаскиваем нужную на Plane. Выбираем Plane и в инспекторе раскрываем компонент материала. Подбираем значения Tiling такие, чтобы текстура не была растянута или пережата. То же самое проделываем и с остальными частями комнаты.
Игровой персонаж в Unity
Удаляем камеру, которая установлена по умолчанию на сцене. Открываем папку с ассетом контроллера персонажа от первого лица. Перетаскиваем версию контроллера без дополнительных опций, так как они в данном случае не нужны. Запускаем и проверяем.
Освещение в Unity
Удаляем источник света на карте. Нажимаем Window, затем Rendering и открываем окно Lighting. Переместим его в более удобное место. Переключаемся во вкладку Environment. И здесь убираем материал у “Скайбокса”. Затем выставляем задний фон у камеры черного цвета. Теперь в окне Lightning уберем источник света и свечение окружения выставим темного цвета.
Мы добавили немного красного для более устрашающего эффекта.
Создадим фонарик для главного героя. Нажимаем на плюс в окне иерархии и выбираем Light, а затем — Spotlight. Перемещаем и поворачиваем в нужную позицию. Теперь в окне иерархии сделаем Spotlight дочерним по отношению к персонажу, чтобы фонарик перемещался вместе с нами. Запустим и проверим.
Сделал игру по фильму за 30 секунд #программист #gamedev #компьютер #игры #айти
Мы увеличим дальность света и сделаем игру темнее.
Звуковое сопровождение игры
Для создания в игре устрашающей атмосферы добавим звуки на задний план. Создаем источник звука и в инспекторе подключаем скачанный трек. Это можно сделать, переместив его из окна Project. Нажимаем на галочку Loop, чтобы трек играл бесконечно. Запустим и проверим наличие звука в игре.
Сделаем композицию тише. Также громкость можно регулировать в самой игре, но при завершении тестирования это значение сбросится, так что не забудьте выставить его после.
Скример-картинка в Unity
Создаем канвас (Canvas), а внутри канваса — Image. Увеличим размер картинки. Переходим в папку со скачанным изображением и кликаем по нему. Тип текстуры выставляем Sprite(2D and UI). Сохраняем изменения и переносим изображение в поле Source Image у картинки на канвасе.
Создаем источник звука для скримера и подключаем к нему короткий звуковой файл. Чтобы данный звук не включался вместе с игрой необходимо снять галочку.
Далее создаем папку для скриптов и внутри — скрипт, который будет отвечать за появление скримера. Удаляем все ненужное. Создаем переменную для пугающей картинки, а также переменную для сопровождающего ее звука. Далее объявим корутину, которая используется в данном случае для отсчета времени после появления скримера.
Как только вызывается корутина, будет картинка показываться на экран, а также проигрываться пугающий звук. Далее ставим задержку на 1 секунду, а после выключаем картинку. Также необходимо выключить игровой объект, на котором будет висеть скрипт, чтобы скример мог появиться только один раз.
Объявляем функцию OnTriggerEnter, которая вызывается, когда в коллайдер игрового объекта попадают другие объекты. Если таким объектом является игрок, то вызываем корутину, которую мы только что написали.
Переходим в “Юнити” и создадим ловушку, при попадании в которую появится скример. Растянем ее так, чтобы игрок точно в нее попал. Поставим галочку isTrigger и отключим вывод визуальной составляющей объекта. isTrigger отмечает, что данный объект используется для запуска скриптов при попадании внутрь других объектов. Переносим скрипт на ловушку.
И подключаем картинку и звук к соответствующим полям на скрипте. Чтобы все работало, не забудем поставить тег Player на игрового персонажа. Запускаем и проверяем.
Скример с 3D-моделью
Теперь копируем ловушку и подкорректируем ее коллайдер. Установим точечный источник света для привлечения внимания игрока. Удалим скрипт со скримером-картинкой. И создадим новый. Удаляем все лишнее.
Создаем переменную для звука скримера. А также переменную аниматора, в котором будет храниться анимация. По аналогии с предыдущим скриптом создаем корутину, только здесь после звука и таймера уже на 2 секунды отключим ловушку и запустим анимацию, которую создадим далее. После пишем точно такую же функцию OnTriggerEnter, как и до этого.
Переходим в “Юнити”. Переносим новый скрипт на вторую ловушку. Создадим призрака который будет вылетать, когда игрок попадет в нее. Создаем пустой объект. Перейдем в папку с моделью призрака.
Перетаскиваем его на сцену и делаем дочерним к созданному ранее пустому объекту. У данного призрака имеется своя камера, которую нужно отключить.
Создадим звук который будет издавать призрак. Перемещаем его внутрь объекта призрака. Подключаем скачанный звук к звуковому объекту “Юнити”. Снимаем галочку с Play On Awake, чтобы звук не включался вместе с игрой, а на Loop ставим галочку, чтобы при окончании композиция заиграла заново. Увеличим призрака для пущего эффекта и передвинем в нужное место.
Развернем его лицом к игроку.
Создаем папку для анимации. Нажимаем Window, открываем окно создания анимации. Создаем новую анимацию. Нажимаем на запись. Передвинем временную отметку, а затем и призрака, чтобы он переместился туда к назначенному нами времени.
Если перемещение происходит слишком быстро, необходимо увеличить время анимации в 2 раза. Переходим в окно аниматора. Создаем новое пустое состояние, в которое призрак будет переходить при запуске игры, а далее перемещаем анимацию полета. Делаем переход.
Создаем переменную “Старт”, которая отвечает за переход из пустого состояния в состояние полета. Добавим этому переходу условие, при котором полет начнется только тогда, когда мы переключим старт с помощью скрипта в true. Теперь в скрипте назначим анимацию и звук в соответствующих полях и отключим бесконечное повторение анимации.
На этом урок по созданию хоррора в “Юнити” окончен. Если вы хотите глубже разобраться в “Юнити”, приглашаем вас на онлайн-курс в школе “Пиксель”. Мы научим вас создавать 2D- и 3D-игры в различных жанрах с нуля. Вы сможете взглянуть на компьютерные и мобильные игры глазами разработчика и понять, подходит ли вам это направление.
Источник: clubpixel.ru
Как написать текстовую игру (для чайников)
Свою. С нуля. То есть, совсем с нуля — лично я на старте не знала ничего, совсем ничего, вообще ничего, а про CSS и джава-скрипт слышала только то, что они существуют где-то там, где я их не вижу и не увижу никогда.
Вот прошла где-то неделя со старта. Писала я, в основном, вечерами (потому что работа и личные дела), пару дней просто разбиралась в документации и наводила красоту, но несмотря на это — у меня уже есть полторы главы где-то на 15к слов (около 3к в одном прохождении, потому что я обожаю вариативность), я знаю что-куда-как делать дальше, и, в общем-то, по самому процессу больше не возникает вопросов. Надеюсь все закончить за месяц-два и, в общем-то, я тогда и собиралась написать этот пост, но мне нужна передышка, да и какие-никакие оправдания к тому, почему я не пишу запланированные повести к «Нано».
Может, и вам захочется написать что-то свое?
Я люблю текстовые игры. Я очень люблю текстовые игры. В основном, играю-читаю новеллы Choice of Games, но видела всякое. И вот причина того, что я решила написать что-то свое как раз была в том, что хотелось «как у чойсов», но на русском и свое. Не в обиду ру-сегменту, но лично мне просто как правило всегда чего-то не хватало в проходимых русскоязычных квестах — то длины, то вариантов, то какой-никакой кастомизации главного героя. Да и тот факт, что главгерой там обычно мужчина, малость поднадоел — я хочу играть за свой пол Т__Т
Поэтому у меня есть небольшая надежда, что чем больше людей узнает о возможности написать собственную текстовую игру, тем больше интересных текстовых игр на русском языке я увижу в будущем.
В общем, что делать.
1. Сначала скачиваем Twine — бесплатно с оффсайта.
Это такая прога, в которой можно легко делать собственные текстовые квесты. Открываем ее, выбираем язык, жмем +История и. в принципе, это все.
Для того, чтобы написать текстовый квест, вам достаточно знать одну вещь — ссылки на новый параграф делаются так:
Можно и по-другому их написать, но в целом — вот. Обладая этим сакральным знанием, вы уже можете написать простенький квест с разными вариантами прохождения. Да, вероятно, он будет довольно примитивен, но все же.
Если это вас не устраивает и хочется чего-то посложнее, то смотрим дальше.
2. В окне своей истории смотрим вниз, в выпадающий список — и выбираем «сменить формат истории». Там знакомимся с форматами и выбираем подходящий.
Я лично пишу на SugarCube 2, потому что там уже была встроена система сейвов. Возможно, если вы хотите делать не квест, а просто загнать свою историю в программу и побаловаться, то вам больше подойдет другой формат (например, относительно новый Chapbook).
Там же есть ссылки на документации по выбранному формату — очень подробные, поверьте. Проблема может быть в английском языке, но тогда — гугл в помощь. Гайды как минимум по SugarCube и Harlowe я точно видела и на русском.
Далее, третий пункт пишу с прицелом на SugarCube 2, в остальных форматах, возможно, все делается иначе.
3. Создаем параграф StoryInit, куда записываем наши переменные по умолчанию. Например, вы хотите, чтобы в игре главгерой сходил в магаз за хлебом, но на старте он находится дома и хлеба у него нет. Пишем в стори-инит что-то вроде:
Посылаем ГГ в магазин за хлебом, через ссылку из пункта один:
Появляется параграф magaz, в котором мы пишем, прежде чем приступить к описанию того, как главгерой купил хлеб:
Переменные $ нельзя называть кириллицей, но значения можно.
Если хотите, чтоб был вариант не купить хлеба, убираем > и пишем новые ссылки на новые параграфы и уже в них ставим > — если купил; ничего не ставим, если не купил. Этот момент можно упростить, если следующий параграф у вас планируется одинаковым — тогда можем сразу перейти к нему и привязать хлеб к выборам. Выглядеть это будет как-то так:
[[Я купил хлеба|passage2][$hleb to ‘est’]]
[[Я не купил хлеба|passage2][$hleb to ‘net’]]
или так, чтобы не повторять значение ‘net’, тк оно у нас и так по умолчанию:
[[Я купил хлеба|passage2][$hleb to ‘est’]]
Тогда мы в любом случае переходим в один и тот же параграф passage2, но в одном варианте переменная меняется, а в другом остается прежней.
А потом на магаз нападают инопланетяне! Герой бежит и скрывается в бункере! Или не бежит и остается в магазе!
Пишем в стори-инит дефолтное значение:
А в своем новом параграфе про нападение инопланетян:
> — если он в бункере; если все еще в магазине, то ничего не пишем, это значение сохранилось с прошлого параграфа.
Ну и так далее: если у ГГ есть хлеб в бункере, то он не умрет от голодной смерти —
>Пишем текст про то, как ГГ выжил в бункере на буханке бородинского.>
>Пишем текст про то, как ГГ умер с голода в бункере.>
Пишем варианты для ситуаций, когда ГГ остался в магазине или вообще не пошел за хлебом — и текстовый квест готов.
4. Далее все просто — гуглим, если чего-то не знаем и не нашли ответа в документации. Да, документацию надо бы прочитать. Или ее, или хотя бы найденный где-нибудь гайд. Сложно, понимаю, но на этом закончится вся сложная техническая часть. Для Twine довольно много готовых макросов для облегчения жизни и всех свистелок, которые вам хочется.
Лично у меня до сих пор главная проблема ровно одна — с полом главгероя, так как я решила сделать игру с выбором пола и теперь вынуждена прописывать условие для каждого глагола прошедшего времени, например. Второе лицо и настоящее время тут спасают, очень спасают, но все-таки эти коварные глаголы иногда встречаются. И я не нашла никакого варианта кроме как каждый раз писать что-то вроде —
Как только закончили, жмем «опубликовать историю в файл» — и получаем html-страничку со своей игрой. В процессе ее можно запускать через Twine и смотреть, все ли идет правильно. В итоге, если вы дойдете до конца и сделаете свой квест, — эту страничку можно где-нибудь опубликовать. Например, на itch.io, сайте для инди-разработчиков, где есть отдельный жанр interactive fiction. Или еще где, я пока не думала над этим вопросом.
В общем, подводя итоги, для написания текстового квеста в Twine требуется три умения:
1. Писать (думаю, на писательском сайте с этим проблем нет)
2. Читать (уже сложнее, но, подозреваю, начальные скиллы есть у каждого)
3. Гуглить (эй, это необходимый навык в современном мире!)
И все. Удачи Мне пора идти писать про то, как ГГ прячется от монстра в ночном клубе.
Источник: author.today
Как создать текстовую игру?
Бен Сервисс (Ben Serviss), программист, геймдизайнер и игровой продюсер из Нью-Йорка, в своем блоге описал этапы создания текстовой игры. Мы с его разрешения перевели текст и делимся им с вами.
Сочинять тексты — сложно. Сочинять тексты для интерактивной игры со множеством вариантов ответов — еще сложнее.
Умеете грамотно построить фразу? Отлично. Постройте семь. При этом каждая должна быть хорошо написана, подходить трем разным персонажам и встраиваться в четыре разных контекста. Сочинять сюжет и диалоги к нелинейной текстовой игре — означает упражняться в упорстве, изворотливости и трудолюбии.
Скажем, у вас есть описание текстовой игры. Вы знаете, о чем она, кто главные персонажи, какие основные события происходят в каждой главе и что за способности есть у игрока. Все составные части игры у вас на руках. Время начать писать — но вы в ступоре. Как написать историю, в которой может случиться что угодно?
С чего вообще начать?
Я недавно выпустил свою первую полноценную текстовую игру для Choice of Games под названием The Last Monster Master (в ней примерно 250 000 (!) слов). В процессе я пришел к определенным базовым схемам, — они помогли написать игру глава за главой. Я использовал отличный (и бесплатный) Chat Mapper, чтобы создать каждую нелинейную главу. Затем я перевел окончательный вариант текста в ChoiceScript, собственный язык программирования Choice of Games, удобный для создания текстовых игр.
Скриншот из игры The Last Monster Master
Я упростил процесс, разбив работу над каждой главой на шесть этапов. В Chat Mapper есть очень удобная функция — она позволяет присваивать свой цвет каждому текстовому блоку. Я использовал эту фичу, чтобы отслеживать ключевые моменты работы с текстом, — изменял цвет каждый раз, как заканчивал этап (это можно увидеть на приведенных ниже скриншотах)
Этап 1. Текстовые заготовки (без цветового маркера)
На первом этапе нужно создать общую структуру главы. Не пишите настоящие диалоги или описания, — вместо этого используйте текстовые заготовки, чтобы обозначить, кто и что скажет, когда он это скажет и какие будут возможности выбора у игрока.
Если возникают сюжетные ответвления, которые зависят от статуса игрока или от других условий, обозначьте этот статус или условия в вопросах и опишите варианты ответа в самых простых выражениях. Не нужно переживать о внутренней логике. Это придет позже.
На этом этапе избегайте чрезмерных правок (или вообще любых правок, — если получится). Главная цель — описать структуру главы так, чтобы это было читабельно. Когда вы закончите, у вас должна получиться карта того, над чем вы потом будете работать — в первом приближении.
В приведенной ниже схеме из The Last Monster Master один из монстров игрока застрял в дереве во время атаки. Игрок может использовать телепатию или навык чтения языка тела, чтобы помочь монстру отразить атаку, или подбежать и помочь напрямую.
Этап 2. Ревизия текстовых заготовок (цвет — желтый)
На этом этапе сконцентрируйтесь на проверке того, что уже создали. Пока что вас должно волновать только то, как расположены диалоги — не переживайте насчет грамотности или красоты текста, поскольку все, что вы написали, еще не раз может подвергнуться переделке.
Нужно в первую очередь искать варианты выбора, которые не имеют смысла или противоречат сюжету, спорные повороты и тупиковые сюжетные ветки, которые не связаны с основной историей.
Затем убедитесь, что в получившейся схеме задействованы все варианты статуса игрока и его возможностей, которые вы планировали использовать в данной главе. Если вы не применили все, что намеревались, — либо пересмотрите первоначальный план и добавьте дополнительные опции, либо оставьте себе напоминание задействовать эти возможности в будущих главах.
Этап 3. Текст в первом приближении (цвет — оранжевый)
Теперь, когда структура игры улучшена и реорганизована, можно наконец-то заняться тем самым текстом, который увидит игрок. Этот этап — не особенно сложный, но и тут важно не терять из вида конечную цель.
Не заботьтесь о том, что не имеет отношения непосредственно к тексту. На этом этапе вас не должны волновать варианты выбора, структура этапов и так далее. Именно эта часть самая интересная — и она же отнимает больше всего времени.
Этап 4. Проверка текста (цвет — фиолетовый)
Выжили после того, как написали целую главу? Отлично! Дальше все пойдет быстрее. Включаем режим беспощадного редактора.
Прочитайте написанный вами текст. Будьте безжалостны. Проверьте все, что относится к тесту — грамматику, пунктуацию, будьте точны в выборе слов, описании персонажей или мест и так далее. Повторюсь: сосредоточьтесь на тексте. Заставьте его зазвучать.
Этап 5. Варианты (цвет — голубой)
Со структурой разобрались, текст выглядит пристойно. Теперь пройдитесь по всей главе еще раз. Ищите все места, где возникает вариативность, особенно те, где меняется статус игрока или где от него зависит поворот сюжета. Возможно, на этом этапе придется добавить варианты взаимодействия с уникальными артефактами, персонажами, появляющимися только один раз — и так далее.
Оцените повороты сюжета с точки зрения их уместности и влияния на игровой баланс.
Если заведете отдельный документ, в котором отражено, насколько статус игрока задействован в главе или в важном сюжетном повороте, — это вам здорово поможет.
Например, если сила игрока должна быть на уровне в 45 единиц, чтобы вышибить деревянную дверь в четвертой главе, то логично, что в шестой главе ему понадобится 65 единиц, чтобы выбить металлическую дверь (то есть, соответственно, статус реквизитов должен расти вместе со статусом игрока).
Этап 6. Экспорт и игровая логика (цвет — зеленый)
Время поместить почти готовую главу в программу, которую вы используете непосредственно для разработки игры. К счастью, Chat Mapper экспортирует файлы в формате XML, JSON, Excel и Rich Text, — что дает вам возможность выбирать. В случае с The Last Monster Master я просто скопировал каждый ключевой элемент в файл ChoiceScript, видоизменив их по мере необходимости.
Если вам необходимо дописать игровую логику, то нужно начать это делать сразу, как только вы вставите текст в игру. К счастью, поскольку вы уже решили, что, когда и где произойдет, создание каждого отдельного скрипта происходит отдельно от основного контента, — что упрощает решение проблемы.
Другие методы
Представленный вариант — не единственный подходящий для создания нелинейных текстовых игр, однако в случае с моим проектом он сработал. В зависимости от того, какого стиля разработки вы придерживаетесь и тех программ, которые вы используете, можно попробовать экспортировать текст в игру на более ранних этапах — чтобы в нее можно было сыграть как можно раньше. Добавлю, скрипты для Chat Mapper можно писать с помощью Lua, — а значит, игровую логику можно задавать прямо в программе.
Вне зависимости от того, что вы выберете, выполняйте по одной задаче за раз, хвалите себя за каждый пройденный этап и старайтесь записывать в процессе, что можно улучшить. Разобраться с нелинейным сюжетом не так-то просто — почему бы и из этого не сделать игру?
Другие материалы по теме:
- Как я перестал беспокоиться и полюбил мобильные игры
- Как написать хороший дизайн-документ?
Теги:
- how-to
- будет полезно разработчикам
Источник: app2top.ru