Что такое кат сцена в игре. Модификации

Редактор Unreal Engine 4 содержит несколько инструментов для создания синематик и обычных кат-сцен. Данные инструменты позволяют настроить перемещение объектов, камер, частиц и персонажей, настроить постобработку, а так же назначить события, которые будут срабатывать в Блупринтах, тем самым производя какое-либо дополнительное действие на сцене.

Все эти инструменты позволяют создать не только качественную кат-сцену, но и даже записать полноценный ролик, рекламу, мультик или небольшой короткометражный фильм.

Инструменты

Редактор секвенсер даёт пользователям создавать внутриигровое ролики посредством мультитрекингого редактора схожего с Matinee . Путём создания Level Sequences и добавлением Tracks , пользователь может определить вид каждого трека, что определит содержимое сцены.Треки могут содержать анимации (для анимации персонажей), Трансформации (перемещение предметов в сцене, таких как камера), Аудио (для добавления музыки или звуковых эффектов),а также другие виды треков.

Создание Level Sequences

Level Sequence — это контейнер для ваших кинематографических сцен и он должен быть создан для того, чтобы работать в редакторе секвенсер. Вы можете создать Level Sequence и напрямую разместить её на вашем уровне, путём выбора соответствующей опции на панеле инструментов во вкладке Cinematics , пример показан на картинке ниже.

Это добавит её на уровень, после чего она может быть выбрана для последующей настройки на панели Details , подобно Matinee Actor . На панеле Details (ниже), вы можете определить, где Level Sequence будет автоматически проигрыватся после старта уровня, скорость воспроизведения секвенции, где секвенция должна быть зацикленна, и прочее.

Level Sequence отличается от Matinee тем, что является самодостаточным ассетом, и вы можете размещать секвенции внутри других секвенций. К примеру, вы можете создать секвенцию которая содержит анимированных персонажей, камеры, и тд, и в тоже время она является частью другой, более огромной секвенции.

Ещё один метод создания Level Sequence — это в контент браузере кликнуть по кнопке Add New и выбрать Level Sequence в разделе Animation . Это создаст секвенцию, но не разместит её на уровне.

Добавление треков в секвенцию

Когда Level Sequence создана и редактор секвенций открыть, вы можете начать создавать ваш кинематографический ролик.

Выше, у нас имеет свежесозданная и пуста секвенция.

Первым делом вам необходимо добавить тип трека, который вы можете найти в выпадающем меню после клика по кнопке Add .

Из выпадающего меню вы можете выбрать несколько типов треков, а также добавить эктора в секвецию (Actor To Sequencer ). Опция Actor To Sequencer позволяет добавить любой Эктор который вы выбрали на вашем уровне.

Как правило, если в вашей секвенции есть персонажи, животные, существа или что-то в этом духе,что будет анимироваться и передвигаться, то у вас должен быть Скелетал меш для них, который вы должны добавить в секвенсер.К примеру, ниже у нас есть Скелетал меш медведя который мы разместили на уровне. Когда он выделен, мы можем кликнуть по кнопке Add в секвенсере и выбрать Actor To Sequencer , что добавит его в секвенцию и даст нам возможность контролировать его посредством редактора секвенсер.

В зависимости от типа созданного трека, саб-треки могут быть добавлены, после чего возможность добавления новых сабтреков может отсутствовать.

Ниже мы выбрали саб-трек анимации и применили анимацию нашего скелетал меша медведя для воспроизведения.

Possessables против Spawnables

Секвенсер очень похож на Matinee в том, он использует «possessables «, это означает, что эктор существует на уровне и секвенсор владеет им, чтобы пременять изменения внесённые в него через секвенсер.

Как показано на примере медведя выше, вы можете разместить скелетал меш на уровне и добавить его в секвенсер, после чего внутри секвенсера вы можете добавить трек анимации для скелетал меша и применять разные анимации для него для воспроизведения их на сцене.Теперь мы «владеем» Скелетал мешем и он существует для того, что был делать то, что ему указывается через секвенсер. Также секвенсер включает в себя и другую форму манипуляции, которая называет «spawnables «, это означает, что объект которым мы владеем не существует и секвенсер спавнит объект когда это надо и определяет его жизненный цикл.

Так когда это выгодно использовать «spawnable » объект? Так как секвенсвер является владельцем и спавни объект, он не привязан к оперделённому уровню.Всё что считается «spawnable » может быть использовано на любом уровне, вы можете создать сцену и использовать этот «spawnable » объект повторно в другой сцене без повторного его создания.

Прочтите Creating Spawnables для полного понимая.

Создание ключевых кадров сцены

Если вы знакомы с внешними инструментами анимации, то принцип использования ключевых кадров для управления контентом может быть вам знакомы. Если не знакомы, то вкратце, секвенсвер позволяет манипулировать вашим контентом посредством добавления ключей (называемые Keyframing ) в заданными свойствами в требуемых точках вдоль таймлайна. При достижении этих ключей на таймлайне, свойства которые вы указали для каждого ключевого кадра обновляются и отображают эти изменённые значения.

Пример сцены расположенный ниже показывает добавления перемещения посредством добавления ключевых кадров трансформации скелетал меш эктора.

Вы можете добавить ключевой кадр путём выбора трека и нажатия Enter либо же кликом по кнопке добавления ключевого кадра для каждого трека.

Некоторые настрйоки на панели Details Эктора могут быть заключены в ключевом кадре напрямую путём клика по кнопке добавления ключевого кадра для каждой настройки.

Выше, кнопки ключевого кадра показываются для Current Focal Length и Aperture настроек в Cine Camera Actor .

Секвенсер воспроизводит вашу сцену основываясь на диапазоне между зеленём (начало) и красным(конец) маркерами.

Выше наш контент содержит 2 шота которые заканчиваются на 600м кадре, но наша секвенция расширена до 1000 кадров, что в итоге даёт пустое пространство.

Вы можете перетащить маркеры начала и конца для заполнение участка вашим контентом, либо же воспользоватся опцией которая указывает участок который содержит ваш контент. Вы можете найти эту опцию в выпадающем меню настроек секвенции и включить Keep Playback Range In Section Bounds .

Специальный вьюпорт

Секвенсер позволяет вам использовать специальный вьюпорт чтобы процесс редактирования был проще.

Данный Cinematic Viewports даёт возможность посмотреть, как сцена будет выглядеть лучше, для его выбора кликните по кнопке Viewport .

Cinematic Экторы

На панели Modes в разделе Cinematic вы увидите 3 Cinematic эктора которые можете использовать для создания ваших синематиков.

Вы можете перетащить любой из них на сцену после чего добавить в секвенсвер, либо же перетащить в секвенсвер, что сделает их Spawnable .

Camera Rig Crane

Camera Rig Crane Actor может быть использован для симуляции движения, что используется в страндартном кинопроизводстве.

Вы можете добавить камеру к эктору Camera Rig Crane после чего манипулировать перемещением крана из панели Details и значениями Crane Controls . Эти значения влияют на вращение,рыскание и длину руки крана. Эти значения могут быть заключены в ключевые кадры посредством секвенсвера, что даст вам настраивать их во время вашего синематика.

Camera Rig Rail

Camera Rig Rail Actor — это основанный на сплайне инструмент к которому может быть прикреплена камера чтобы создать путь для передвижения.

Вы можете выбрать каждую точку сплайна и изменить касательные, чтобы произвести путь, которому будет следовать камера.Камера которая прикреплена к крану может вращатся независимо от крана, настроить поворот камеры можно на панели Details . Это значения может быть занесено в ключевой кадр для последущей манипуляции из секвенсвера.

Cine Camera Actor

Cine Camera Actor — похож на эктор обычной камеры однако доступны дополнительные настройки камеры.

Cine Camera Actor (чёрная камера) и дефолтная камера (синяя камера) изображены выше.

Cine Camera Actor содержит настройки для следованием за Эктором, киношные настройки (соотношение сторон,Super 8mm, 35mm VistaVision, и др.), настройки линзы и фокуса. Когда используете обычную камеру всё нормально, но для того, чтобы добиться более кинематографического эффекта используйте Cine Camera Actor .

Запись секвенции

Одним из инструментов, которым вы можете ускорить свой процесс создания ассетов является Sequence Recorder для записи геймплея (или Level Sequences ) что позволяет создавать новые ассеты.

Добавьте новую запись, выберите эктора и нажмите кнопку Record , чтобы начать запись. Когда остановите запись, будет создан новый ассет Level Sequence , который впоследствии вы можете использовать в существующих или для использования в будующих секвенциях.

Настройки рендера ролика

В секвенсвере вы можете выбрать то, как отрендерить вашу секвенцию, как набор кадров или как целый видео файл; выбирается Render Movie Settings .

Это покажет окно настроек рендера ролика, в котором вы можете опрделить как будет рендериться ваша сцена.

Кликните по кнопке Capture Movie для начала записи вашей сцены.

Мысли по поводу рабочего процесса

Теперь, когда у вас есть общее представление о том, как работает секвенсер редактор, вы можете рассмотреть вопрос о том, как вы будете использовать инструмент, так как есть несколько путей создания контента. Будь-то создание одной секвенции на всё про всё, или же создание одной большой секвенции куда будут входить множество других секвенций; секвенсвер даёт несколько путей которыми вы можете воспользоватся при создании ваших синематиков.

Как и другие панели и редакторы, Sequencer разбит на составляющие. Данная страница описывает каждое окно, опцию и элемент управления редактора секвенций.

Панель инструментов

Ниже, расположено описание каждой из кнопок, слева направо, так как они расположены на панели инструментов.

Иконка Описание
Сохраняет текущую Level Sequence .
Сохраняет текущую Level Sequence под разными именами.
Поиск рассматриваемого ассета в контент браузере.
Открытие окошка настроек рендера видео, которые дают вам возможность вывести секвенцию как видео или как набор кадров.
Открывает меню главных настроек определяющих функцинонал секвенсера.
Вкл/выкл опции Key All . С этой опцией и с включённой опцией auto-key , опеределяет, если все настройки записаны в ключи для трека когда изменения были внесены или же если только записанные в ключ настройки были изменены.
Вкл/выкл различные Auto-Key опции. Поумолчанию, эта опция выключена, но может быть установлена в режим Auto-key All или Auto-key Animated .
Вкл/выкл привязку к сетке для окна ключевого кадра в зависимости от настроек привязки.
Позволяет настравивать время интервала привязки.
Открывает Curve Editor который даёт вам настроить расположение ключей анимаци в Keyframe окне.

Sequence Breadcrumbs

В зависимости от вашего рабочего процесса, вы можете создать несколько Level Sequences как отдельные сцены, и расложить эти сцены в новой Level Sequences, они будут воспроизводится последовательно, создавая одну большую секвенцию. Из этой большой секвенции вы можете переместиться в каждую из добавленных секвенций путём двойного клика по ним нраходясь в Keyframe окне. На изображении ниже, представлена Level Sequence под названием shot_06 внутри другой последовательности называемой Master .

Мы можем кликнуть по Master для возврата в основную секвенцию содержащую нашу shot_06 и другие секвенции.

Добавление/фильтр треков

Кнопка Add позволяет вам добавить трек или Actors из вашего уровня в секвенсер, для последующего создания кинематографии.

Когда Эктор на вашем уровне выбран, кликните по кнопке Add , после чего выберите его из выпавшего меню. Если вы перед этим не выбрали Эктора, вы можете выбрать его из раздела Choose Actor .

Ниже представлены доступные треки которые вы можете добавить в секвенсер; для просмотра примера кликните по названию трека.

Трек Описание
Add Folder Вы можете добавить папки содержащие ваши треки, для упорядочивания вашего рабочего пространства.
Audio Track Добавляет главный аудио трек, который используется для воспроизведения звуков.
Event Track Добавляет трек события, который может быть использован для вызова блупринта (на даный момент только в Level Blueprint ).
Camera Cut Track Позволяет переключаться между камерами связанных с секвенсером для создания перспективы.
Shot Track Позволяет добавлять Level Sequence как «shots «, которые могут содержать Takes , который может менять вход/выход
Play Rate Track Добавляет трек который может быть использован для манипуляции скорости воспроизведения секвенции.
Sub Track Добавляет саб-трек который может содержать другие секвенции. Это полезно для создания нескольких копий секвенций чтобы разные пользователи могли работать без изменения исходной секвенции.
Fade Track Добавляет трек который позволяет контролировать затухание входящей/исходящей секвенции.
Level Visibility Track Этот трек может быть использован для записи в ключ и изменения видимости вашего уровня.

Опция Filter позволяет вам отфильтровать Tracks Window только для Эктором которые были добавлены в секвенцию из уровня.

Timeline

Полоска времени показывает скорость воспроизведения вашей секвенции Зелёный (Начало) и Красный (Конец) маркерами. Текущее время вашей секвенции показывает маркером таймлайна который вы можете переместить левым кликом вдоль всего таймлайна.

Вы может кликнуть правой кнопкой мышки на таймлайне для указания новой начало/конец точки из контекстного меню которое показано ниже.

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

Tracks Window

В окне Tracks вы можете указать, какие типы действий будет выполнятся по время вашей секвенции.

Выше, имеются треки Camera Cuts для смены углов камеры во время секвенции, Cine Camera Actor показывает сцену, а два Skeletal Mesh Actors персонажи нашей сцены.

Секвенсер чувствителен к контексту и даёт вам добавить саб-треки (где это доступно) для каждого трека который даст дополнительные опции. К примеру, на картинке выше, мы добавили трек CameraComponent к нашему Cine Camera Actor , что дало нам возможность добавления дополнительного саб-трека для корректировки настроек камеры в нашей сцене, если мы захотим их внести.

Вы также можете добавить ключевые кадры из окна треков для указания параметров в специальных точках таймлайна.

Кликните по кнопке + или нажмите Enter в то время когда трек выделен.

Keyframe Window

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

Выше, клик ПКМ по ключевом кадру трека трансформации даёт нам возможность для изменения типа интерполяции ключа, а также другие параметры которые могут быть скорректированы в выпадющем окошке Properties, которое обновляется в зависимости от типа контента по которому вы кликаете правой кнопкой мышки.

Ниже, клик ПКМ по анимации назначенной на анимационном треке и выбор настроек даёт нам возможность изменить только что применённую анимацию, а также изменить её настройки, такие как смещение начала/конца, а также скорость воспроизведения и другие.

Навигация окна ключевого кадра

Ниже описаны кнопки и способы используемые для навигации в окне ключевого кадра.

Команда Описание
Правый клик и перемещение Позволяет вам переместится вокруг окна ключевого кадра.
Ctrl + колёсико мышки вверх/вниз Увеличение/уменьшение масштаба в окне ключевого кадра.
Home Сброс зума окна ключевого кадра.
— и = Зум в/из на 10%
, и. Перемещение вперёд/назад между распложенным ключевыми кадрами.
Левый клик и перемещение Создаёт зону выделения вокруг кадров.
Левый клик по ключу Выбор ключа
Правый клик по ключу Показ контекстного меню в котором вы можете указать настройки ключа.
Средняя кнопка мышки Создание ключа на позиции курсора мышки.
Enter Выбор ключа выбранного трека в текущем времени.
Ctrl + G Установить время/кадр секвенции.
I Указать начало выбранного участка.
O Указать конец выбранного участка.

Управление воспроизведением

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

Стандартные элементы управления воспроизведением:

Кнопка Описание
Установить стартовую позицию в текущюю позицию указанную маркером времени.
Прыгнуть в стартовую позицию воспроизведения.
Прыгнуть к предыдущему ключу выбранного трека(ов).
Прыгнуть к предыдущему кадру.
Воспроизведение/пауза Level Sequence с позиции маркера времени.
Прыгнуть на кадр вперёд.
Прыгнуть к следующему ключу выбранного трека(ов).
Прыгнуть в конец воспроизведения.
Установить конечную позицию воспроизведения основываясь на маркере времени.
/ Переключение между зацикливанием Level Sequence при проигрывании.

Кнопки управления воспроизведением внутри синематик вьюпорта аналогичны по функционалу.

Либо использовать отснятый видеоматериал с живым действием.

Самые ранние видео игры, известные использованием кат-сцен как обширная и неотъемлемая часть игры, были Portpia Renzoku Satsujin Jiken от Enix, выпущенная в 1985, и Maniac Mansion от LucasArts Entertainment , созданная Роном Гилбeртом и выпущенная в 1987, которая была также известна несколькими другими новшествами. С тех пор, сценки были частью многих видео игр, особенно в жанре RPG .

Сценки иногда также упоминаются с другими терминами типа синематики или внутри-игрового кино . Кат-сцены, сделанные из видеофайла, упоминаются иногда также как видео полного действия (Full-Motion Video, . Например, сценки в Wing Commander IV использовали полноценные наборы и «названных» актёров типа Maрка Хэмилла и Малкольма Mакдауэлла для изображения персонажей.

Однако, многие геймеры наслаждаются сценками с живым действием из-за их часто бедных продуктивных значений и нестандартного действия. Кат-сцены в игровой серии стратегий в реальном времени Command & Conquer особо отмечены за часто утрированное действующее исполнение.

Сценки с живым действием были популярны в первой середине 1990-ых с началом эры

Увеличение качества графики, стоимости, критической обратной реакции и потребность в профессионалах для лучшей интеграции сценок и грaфики геймплея вскоре привели к увеличению популярности анимированных кат-сцен в конце 1990-ых. Однако, для кинематографического эффекта, некоторые игры всё ещё используют живые сценки; пример этого - Black , где показывается интервью между Джеком Keллaром и его следователем, снятое с реальными актерами.

Анимированные сценки

Есть две первичных технологии для анимации кат-сцен. Внутри-игровые сценки отображаются Рендерингом на лету, используя тот же Графический движок что и соответствующая игра. Они часто используются в жанре stealth , например Metal Gear Solid , Splinter Cell , а также жанрах RPG и , Spider-Man и The Legend of Zelda , среди многих других.

Предварительно отрендеренные сценки анимированы и представлены разработчиками игры, умеющими обмануть полный массив технологий компьютерных обрaзов (CGI) , риcованной мультипликации либо панельного искусства в стиле графический роман . Серия видеоигр Final Fantasy , разработанная Square Co. , отмечена за свои предварительно отрендеренные кат-сцены, которые были впервые представлены в Final Fantasy VII .

В более новых играх, которые могут использовать в своих интересах сложные методы программирования и более мощные процессоры, внутри-игровые сценки рендерируются на лету и могут быть близко интегрированы с геймплеем. Также используются заскриптованные кат-сцены, что обеспечивает выгоды от сценок, не отбирая интерактивность у геймплея. Некоторые игры, например, дают игроку некоторый контроль над камерой в течение кат-сцен, например Dungeon Siege ,Metal Gear Solid 2: Sons of Liberty и Kane & Lynch: Dead Men . Другие требуют нажатий на клавиши в течение сценок для успешного продолжения, как в Sword of the Berserk: Guts Rage , Resident Evil 4 или Shenmue 2 .

«Интерактивное кино» также возвращается, как замечено в в СШ и Канаде) от Quantic Dream , где вся игра имеет дело со сценками в реальном времени, которые идут в зависимости от действий игрока.

Решения являются неотъемлемой частью истории игры, и игроки постоянно имеют дело с сценками неким способом.

Интерактивные кат-сцены

Интерактивные сценки имеют дело с компьютером, взявшим под свой контроль персонаж игрока, в то время как кнопки показываются на экране, требуя от игрока их нажатия, чтобы продолжить или успеть в действии, как в «Quick Time Events» из , Sword of the Berserk: Guts" age , Resident Evil 4 , God of War I и II , Tomb Raider: Legend , Marvel: Ultimate Alliance и иногда критиковались из-за отсутствия предупреждений, когда они должны случаться, часто вынуждая игрока проходить событие заново.

Другой тип таких сцен - это где игрок получает возможность выбрать диалог персонажа из по крайней мере нескольких, примеры этого есть в KOTOR и Mass Effect .

Без сценок

Недавно в видео играх появилась тенденция избегать полностью кат-сцены. Это популяризировалось в игре 1998 года от Assassin"s Creed Ubisoft-а также позволяет игроку сохранять контроль над персонажем в течение «кат-сцен». Это предназначено для большего погружения игрока в игру, хотя и требует больших усилий со стороны разработчика, чтобы удостовериться, что игрок не сможет прервать заскриптованные действия, которые происходят вместо сценок. Версия Spider-Man для

Рассмотрим варианты создания этих самых cut-scenes.

Тайная комната.

Итак, как и обещал я напишу статью о кат сценах. Если что не понятно, спрашивайте в комментариях. Начнём с того, что необходимо скачать и установить патч https://yadi.sk/d/_Xp_Ua_33Hzy2s без него ничего не получится. Для начала нам нужно в голове придумать какой-нибудь ролик, а объяснять я буду на примере своего. Сцена будет такой: Гарри с Роном подходят к непонятной комнате, они заходят туда, Рон спрашивает "Что это было?" и неожиданно выходят два больших краба. Мальчики кричат "нееееееееет" и потом начинают убегать, а крабы идут за ними(тут придется им увеличить скорость). Всё же они забегают в какую-то комнату, где безопасно и Рон говорит "фух, пронесло".

Итак, добавим на карту всё, что нам надо: двух крабов, Рона и Гарри, оформим карту как надо, т.е сделаем комнаты и начнём.

1.Вообщем сначала надо указать ДЛЯ КАЖДОГО ГЕРОЯ, свое имя в cut scene. Для этого открываем свойство гарри и выбираем вкладку cut scene и пишем туда "Harry". Далее открываем свойство Рона, опять же открываем Cut Scene и пишем "Ron". Тоже самое делаем для крабов, пишем "Crab1" и "Crab2", хотя на самом деле названия можно давать любые.

2. Заходим в папку игры, открываем system, затем CutScenes и копируем любой файл, стираем всё что внутри него и задаём имя файлу на английском.

3. Тут начинается самое сложное. Итак, запоминаем, ЛЮБАЯ КАТ СЦЕНА начинается со строки "" (Квадратные скобки обязательны). Я думаю эта фраза переводится как "сцена". После того как мы написали эту фразу, нажимаем на Enter и мы переходим на другую строку. Все последующие строки и фразы будут начинаться со слов "line", т.е line_0, line_1, line_2. Вообщем щас поймёте. Значит мы прописываем:

Line_0=Capture Harry line_1=Capture BaseCam line_2=Capture Ron line_3=Capture Crab1 line_4=Capture Crab2

Что же значит Capture ? Сapture - это захват какой-либо цели, т.е мы должны захватить всех персонажей, которые у нас двигаются (ВНИМАНИЕ: Capture BaseCam пишется всегда, это тоже надо запомнить, т.е базовую камеру(BaseCam) надо всегда захватывать, чтобы она могла работать в кат сцене).

4. Возвращаемся снова в редактор и мы должны найти объект CutCameraPos (Navigation Point, UWNavigation Point) . Ставим камеру где-нибудь сверху и открываем её свойства, открываем вкладку Cut Scene и пишем любое название камеры. Я дал название "Cam1". Добавим объект CutMark и расположим его между Роном и Гарри, зададим ему название "E2". Затем снова открываем наш текстовый документ и пишем line_5=BaseCam Target FlyTo E2, т.е это значит, что наша базовая камера будет направлена на CutMark с названием E2(Target - цель, на что направлена). Следующая строка будет line_6=BaseCam FlyTo Cam1 - эта строка указывает на то, какой предмет будет снимать происходящее.

5. Дальше нам надо, чтобы Гарри с Роном подошли к комнате одновременно. Для этого добавляем два CutMark и ставим их возле комнаты, затем указываем имена для каждого, например "CutMarkHarry", т.е это место до куда дойдёт Гарри, а "CutMarkRon" это место до куда дойдёт Рон. Снова возвращаемся в текстовый редактор и пишем:

Line_7=Harry RunTo CutMarkHarry * line_8=Ron RunTo CutMarkRon

WalkTo - идти к чему-либо, ну и RunTo - бежать. Т.е это все значит, что Гарри идёт к своему CutMark, а Рон к своему. Звёздочка означает, что последующее действие выполняется одновременно с тем действием, на строке которой она написана, т.е Гарри с Роном будут бежать одновременно.

6. Теперь ставим вторую камеру правее первой, она будет показывать на вход в комнату и опять указываем ей имя(Cam2). Также поставим еще два CutMark в комнате, туда пойдут мальчики и укажем имена имена (CutMarkHarry1 и CutMarkRon1). Поставим CutMark , туда будет смотреть наша вторая камера(E3- название камеры). Возвращаемся в Текстовый редактор и пишем:

Line_5=BaseCam Target FlyTo E3 line_6=BaseCam Cam2 FlyTo Cam2

Это значит, что наша базовая камера теперь вторая, которую мы поставили и что она смотрит на наш CutMark(E3). Дальше пишем:

Line_11=Harry WalkTo CutMarkHarry1 * line_12=Ron WalkTo CutMarkRon1

Думаю тут всё понятно.

Line_13=Ron TurnTo Harry * line_14=Harry TurnTo Ron

TurnTo - повернуться к чему или к кому-либо.

7. Дальше пойдут реплики. Рон должен сказать "Что это было?". Для того, чтобы прослушивать звуки надо скачать патч https://yadi.sk/d/hlyZDt4gvVVrG/HP2/UPDATES , а все реплики Рона можно скачать здесь https://yadi.sk/d/YeXxT8N43LPrAi . PC_Ron_DuelSnake_06 - Что это было? Значит эта фраза будет прописываться так:

Line_15=Ron talk PC_Ron_DuelSnake_06

Для разговоров можно использовать Talk или Say , это одно и тоже

8. Теперь анимации. Гарри делает анимацию, что ничего не понимает, называется talk_dontKnow .

Значит мы прописываем:

Line_16=Harry animate talk_dontKnow

Harry animate - это значит, что Гарри показывает анимацию. Все анимации можно скачать здесь https://yadi.sk/d/hlyZDt4gvVVrG/HP2/UPDATES .

9. Также перед тем как Рон спросил "Что это было?" камера показывала Рона вблизи, для этого используются координаты:

Line_15=BaseCam FlyTo Ron z=27 x=40 y=10 line_16=BaseCam Target FlyTo Ron z=27 x=10

Тоже самое прописывается для Гарри.

10. Затем у нас должны выйти крабы, а перед этим нужен небольшой промежуток времени, мы используем команду Sleep 1 - это значит, что ничего не будет происходить одну секунду, можно вместо единицы написать два или три. 11.Создаём ещё одну камеру Cam3 и CutMark E4 :

Line_21=BaseCam Target FlyTo E4 line_22=BaseCam FlyTo Cam3

Затем надо, чтобы вышли крабы, повернулись к мальчикам и выпустили свою ярость, для них создаём кат марки, по которым они будут ходить и даём им имена CutMarkCrab1 и CutMarkCrab2 :

Line_23=Crab1 WalkTo CutMarkCrab1 * line_24=Crab2 WalkTo CutMarkCrab2 line_25=Crab1 TurnTo Ron * line_26=Crab2 TurnTo Harry line_27=Crab1 animate roar * line_28=Crab2 animate roar.

Вообщем до конца описывать слишком долго. Все основные команды я написал.

Внимание!!! Это еще не всё. Когда вы указали название текстовому документу, которое написано на АНГЛИЙСКОМ, вы на карту должны поставить объект CutScene , открыть его свойства, выбрать вкладку CutScene и в строке FileName указываете то имя на английском, которое вы дали текстовому документу. Не забудьте нажать Build all и сохраниться.

После окончания действий нужно прописать:

Line_33=Release Harry line_34=Release Ron line_35=Release BaseCam line_36=Release Crab1 line_37=Release Crab2

Release - значит освободить, т.е если Capture - это захват, то Release - это наоборот. Надеюсь всё понятно, всем удачи) Если что непонятно спрашивайте.

Руководство по редактору кат-сцен

Введение

Следующее руководство опишет вам по шагам, как настроить основные кинематографические сцены в CryEngine 2.

Создание новой кат-сцены

Прежде чем начать

  1. Создайте новый слой в панели слоев, назовите новый слой «cinematic».
  2. Чтобы создать новую сцену, для начала откройте панель «TrackView», через «View->Open View Panel->Track View».

После открытия TrackView нажмите на иконку Add Sequence .

Назовите кат-сцену «example», затем щелкните OK.

После того, как вы создали новую сцену, пришло время настроить свойства для данной конкретной сцены, нажмите на иконку Edit Sequence .

В появившемся окне Sequence Properties , отметьте следующие флажки:

Отметьте Disable HUD , это отключит стандартный интерфейс игрока, Disable Player скроет игрока при проигрывании сцены, 16:9 включает широкоформатный эффект сцены, и Non_Skippable означает, что если игрок нажмёт пробел, чтобы пропустить сцену, она продолжит проигрываться, EndTime была скорректирована и длительность сцена стала 15 секунд.

Первый элемент, который надо добавить в сцену, это Scene Node . Он позволяет нам переключать камеры.

Однако, не добавленные в сцену камеры не могут быть выбраны. Далее, нам нужно добавить камеру, в RollupBar выберите Camera и поместите её на ваш уровень.

Сущность Camera в редакторе Sandbox 2.

Далее, мы выберем сцену для использования этой камеры, дважды щелкните по шкале времени на кадре 0, чтобы добавить ключ, как только ключ будет добавлен, нажмите правой кнопкой мыши по ключу, чтобы открыть «Key Properties», щелкните по выпадающему списку и выберите только что добавленную «Camera1»;

Выберите камеру, чтобы добавить её трек в кат-сцену, затем нажмите иконку Add Selected Node в TrackView.

Камера должна появится в TrackView, как показано ниже.

В этом примере, мы добавим человека с простой анимацией ходьбы.

Для персонажей в кат-сценах используется AnimObject , используется вместо ИИ сущностей из соображений производительности, также как и AnimObject , система ИИ не будут конфликтовать с системой кат-сцен.

Выберите AnimObject в RollupBar и зажав левую кнопку мыши, перетащите его в окно перспективы.

Замените стандартный прямоугольный объект моделью персонажа, для этого выберите AnimObject , и в разделе Entity Properties RollupBar ), щелкните по значку папки в поле Model .

Найдите файл objects/characters/human/us/nanosuit .

Кат-сцена станет выглядеть как на скриншоте ниже.

Далее, мы выберем анимацию для персонажа. Дважды щелкните по кадру 0, чтобы добавить ключ в трек анимации, затем щелкните правой кнопкой мыши по ключу, при этом появится окно Key Properties , затем щелкните по выпадающему списку и прокрутите вниз, и выбери анимацию «relaxed_walk_nw_forward_slow_01», также поставьте галочку Loop Animation , чтобы анимация вечно повторялась, а также поставьте галочку Root not move , так анимацию не сдвинется и исчезнет после проигрывания.

Ключевые кадры в кат-сценах

Следующий шаг - создание ключевых кадров для того, чтобы персонаж шел вперёд, сейчас же персонаж идёт на одно месте.

Для начала, убедитесь что персонаж выбран и установите ползунок кат-сцены в позицию 0, и щелкните кнопку Record в окне редактор кат-сцен.

В окне перспективы, переместите персонажа в желаемое исходное положение в кадре 0, это действие запишет положение и добавить ключ позиции для персонажа, затем переместите ползунок времени в кат-сцену на последний кадр на 15 секунду, вы заметите, что ключевые кадры появляются на нулевом кадре, и на текущем 15 кадре, пока кнопка записи не отжата, вы можете перемещать персонажа на желаемое конечное положение. Если вы сейчас подвигаете ползунок времени, то персонаж будет ходить между двумя точками, для получения более естественной анимации ходьбы, настройте конечное положение.

Анимирование камеры

Теперь, когда персонаж ходит, нам надо чтобы камера следовала за ним и панорамировала его ходьбу.

Чтобы посмотреть, что видно в камере, щелкните правой кнопкой по надписи «Perspective», чтобы вызвать выпадающее меню конфигурации окна просмотра, затем выберите «Camera->Camera1», теперь вы осматриваете сцену через «Camera1».

В начале камера заблокирована и вы не сможете её перемещать, так же как стандартное окно перспективы, чтобы разблокировать камеру, снимите галочку с Lock Camera Movement.

Это сдедано в целях безопасности, чтобы пользователь случайно не переместил камеру думая, что это окно перспективы, кнопки на окне кат-сцены также должны быть отжаты.

Теперь мы готовы анимировать камеру, для этого установите ползунок времени на кадр 0 и убедитесь, что выбрана камера и нажата кнопка в редакторе кат-сцены, отрегулируйте окно просмотра в соответствии с вашими пожеланиями.

Затем, передвиньте ползунок времени в редакторе кат-сцен на 5 секунд и расположите камеру как желаете, повторите подобные действия на 10 и 15 секундах.

Снова щелкните кнопку «Record», чтобы избежать случайное анимирование камеры, если вы теперь сдвинете ползунок времени назад в редакторе кат-сцен, то вы должны увидеть анимацию камеры по новому пути и идущего персонажа.

Теперь, нам нужно вернуть окно перспективы, для этого щелкните правую кнопку мыши по надписи «Camera1» и выберите Default Camera .

Мы увидем обзор сцены с изображениями сплайнов пути камеры и персонажа.

Проигрывание сцены

Если мы просто зайдём в игру, нажав «Ctrl+G», то сцена не воспроизведётся, поскольку мы должны сначала создать логику, используя потоковый граф.

Для начала, нам надо добавить сущность, которая будет содержать потоковый граф, потоковый граф может содержаться в персонаже, он у нас AnimObject , однако использование конкретной сущности более безопасно, поскольку из неё очень трудно случайно удалить потоковый граф, так что, мы будем использовать AreaTrigger .

Выберите AreaTrigger и перетащите его в окно просмотра, затем переименуйте в «cine_example_FG», далее мы создадим потоковый граф, щелкните по кнопке «Create» в разделе Flow Graph.

Появится окно озаглавленное как «Enter Group Name for the Flow Graph», назовите группу «cinematics», это очень полезно, чтобы в ней содержались все потоковые графы, связанные с кинематографическими кат-сценами.

Выбрав AreaTrigger , щелкните по кнопке Open , чтобы начать работу над потоковым графом для этой сцены.

Откроется редактор Flow Graph , убедитесь, что вы выбрали новосозданный потоковый граф для начала работы над ним.

В данном примере, мы просто запустим сцену, как только игрок зайдёт в игру, для этого добавим нод Misc->Start .

Щелкните правой кнопкой мыши по серому полю, чтобы добавить новый нож и выберите нод Start , он сработает как только игрок зайдёт в игру.

Когда оба нода добавлены, мы соединим их чтобы установить логику, просто щелкните и удерживайте по порту с синей стрелкой и перетащите его к зелёному входному порту StartTrigger .

Далее, нам надо выбрать, какую кат-сцену воспроизводить, дважды щелкните левой кнопкой мыши по ноду Animations:PlaySequence , в настройках Inputs справа, щелкните многоточию, чтобы открыть Select Sequence , выберите кат-сцену, которую вы создали и щелкните кнопку «OK».

Потоковый граф будет выглядеть как показано ниже.

Тестирование

Если вы войдёте в игру, нажав «Ctrl+G», то сцена автоматически запустится.

Настройки окончания сцены

В этой сценой, мы создадим иллюзию, что персонаж в сцене - это игрок, таким образом, по окончанию сцены мы хотим, скрыть персонажа, в редакторе кат-сцен мы можем это сделать. Откройте редактор кат-сцен и выберите сущность AnimObject , дважды щелкните в треке Event , чтобы добавить ключевой кадр на 15 секунде, затем щелкните правой кнопкой мыши по ключевому кадры, при этом появиться окно Key Properties , в выпадающем списки Fire Event выберите Hide .

Это действие скроет персонажа когда сцена дойдёт до последнего кадра, однако, если вы прокрутите сцену редакторе кат-сцен, то персонаж исчезнет во всей сцене, таким образом, нам надо добавить событие Unhide на кадр 0, снова дважды щелкните в треке Event , чтобы добавить ключевой кадр, затем щелкните правой кнопкой мыши по ключевому кадры, при этом появиться окно Key Properties , в выпадающем списки Fire Event выберите Unhide .

Теперь персонаж появляется и исчезает как надо.

Для полной иллюзии, нам надо сделать чтобы игрок начал/продолжил, с того места, где «актер» останвился. В настоящее время, игрок начнет там, где он перейдёт в игру, что создаст иллюзию резкого перехода.

Сначала нам надо узнать конечную позицию персонажа, прокрутите шкалу времени в редакторе кат-сцен на 15 секунду, далее, нам нужно связать эту чоку.

В данном случае, полезно использовать TagPoint , которые не виден при игре, выберите TagPoint и поместите вблизи персонажа, переименуйте TagPoint в «cine_character_endpoint».

Чтобы получить правильное выравнивание к персонажу, используйте инструмент Align Selection , выберите TagPoint и затем щелкните по значку Align Selection , затем щелкните по персонажу, это действие переместит TagPoint на правильную позицию.

Далее добавим логику в потоковом графе, чтобы игрок начал с этой точки, откройте Flow Graph и выберите потоковый граф, затем щелкните правой кнопкой мыши по серой части окна, и добавьте нод Entity:BeamEntity .

Так как мы хотим чтобы игрок переместился к точке, поэтому добавьте нод Game:LocalPlayer

Последним, нам надо добавить нод который свяжет позицию TagPoint с игроком, это нод Entiy:EntityPos , добавьте его.

Соедините ноды в потоковом графе, как показано ниже, чтобы назначить TagPoint на нод Entity:EntityPos , выберите TagPoint в окне просмотра, а затем щелкните по заголовку нода Entity:EntityPos и выберите Assign Selected Entity .

Теперь, когда сцена завершена, игрок начнёт с позиции TagPoint .

Добавление полноэкранного эффекта

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

Откройте Flow Graph и выбери потоковый граф, с которым вы собираетесь работать, затем щелкните правой кнопкой мыши и добавьте нод CrysisFX->ScreenFader .

Выберите только что созданный нод CrysisFX->ScreenFader и укажите значение 4 в параметрах FadeInTime и FadeOutTime .

Затем, продублируйте нод CrysisFX->ScreenFader , щелкнув по нему правой кнопкой мыши и выберите Copy Paste , повторить это действие несколько раз, чтобы всего стало три нода ScreenFader .

Затем, мы добавим AreaTrigger , чтобы вызвать логику исчезновения в кат-сцене, посредством потокового графа.

Добавьте AreaTrigger в окне просмотра и переименуйте его в «cine_FadeOut_DT»; DT - это Dummy Trigger (триггер-пустышка ) который используется для отправки события из кат-сцены в потоковый граф.

В треке Event для «cine_FadeOut_DT» добавьте ключевой кадр на 11 секунде, затем щелкните правой кнопкой мыши по ключевому кадры, при этом появиться окно Key Properties , в выпадающем списки Fire Event выберите Leave .

Затем, откройте Flow Graph , затем щелкните правой кнопкой мыши по серой части окна и выберите Add Selected Entity . Это действие добавит AreaTrigger в потоковый граф.

Когда все необходимые ноды добавлены в потоковый граф, пора связать все логику воедино, настройте потоковый граф, как показано на изображении ниже.

Просто щелкните и переместите вывод нодов к ввода соответствующих нодов, чтобы сделать свзязь.

Я рассказывал, что мы прикрутили к нашей игре язык Lua для скриптования различных сценок. Однако, попользовавшись им какое-то время, мы поняли, что порой написание таких скриптов превращается в довольно сложночитаемый и сложноотлаживаемый код.

И мы задумались о визуальном подходе. В этой статье я расскажу о нашем знакомстве с средством визуального скриптинга для Unity - "uScript ", о его возможностях и расскажу о нашем опыте.

Да, на скрине выше - реальные скрипт и схема.

Введение.

Итак, давайте для начала посмотрим на то, что было. Ниже приведен реальный скрипт, создающий двух персонажей на экране, рисующий простенький диалог, дающий юзеру выбор из 2х вариантов и ветвящийся в этом месте.

Исходник LUA-скрипта

vhs.HUD(0) vhs.SwitchZone("street") local c1 = CharacterGfx() c1.create("c1", "char_big") c1.mirror(0) c1.setpos("n_2") c1.animate("f_idle") local c2 = CharacterGfx() c2.create("c2", "char_black") c2.mirror(1) c2.setpos("n_3") c2.animate("f_idle") c2.preset("opp_lmb") char.animate("idle") char.mirror(1) char.setpos("n_1") c1.say("I need your clothes, your boots and your motocycle") c1.wait_bubble() c2.say("Yep!") c2.wait_bubble() char.animate("f_idle") char.mirror(0) vhs.ShowMultiAnswer("Try to catch me! (run away)", "No way! (start fight)", "") switch_answer { case 1: vhs.BlackScreen("You are not fast enough to run away. So Have to fight!") vhs.StartFight(77,7) end, case 2: vhs.StartFight(77,7) end, }


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


В принципе, в скрипте выше нет ничего страшного. Но представьте, что у вас не 1 ветвение, а два. Представьте, что вам нужно проверять какие-то игровые параметры и ветвить скрипт исходя из них. Это очень быстро может стать ненаглядным.

Именно в такой момент нам остро захотелось визуализации.

Посмотрев несколько плагинов для юнити, мы остановились на uScript . Он очень мощный, гибкий, и при этом просто расширяемый. Кроме того, он создает минимальный impact по быстродействию, т.к. на этапе сохранения схем сразу же компилит их в C#, т.е. для Unity скрипт собранный в таком редакторе не очень отличается от скрипта, написанного руками на шарпах.

Давайте сразу приведу скрин того, во что превратился вышеприведенный LUA-скрипт. (картинка кликабельна)

Выглядит немного громоздко, но зато сразу наглядно. Когда, кто и где создается, что делает, а главное видны ветвления.

Вот, например, в нашем случае игрок может выбрать 1 ответ из двух возможных. В игре это выглядит так:

А на схеме - так:

И сразу видно, что произойдет при выборе ответа №1 и ответа №2. А если таких ветвлений будет больше - то тем более схема не потеряет наглядности.

Принципы uScript.

Давайте быстро пробежимся по тому, из чего состоит схема. Собственно, основные модули (в терминологии uScript они называются «nodes») - это событие (с него обычно начинается скрипт или цепочка), action и переменные.

У action"он есть вход (обычно 1) и выход(ы). Например, у самого простого действия 1 вход и 1 выход. А у какого-нить блока условия - уже будет два выхода, например.

Снизу блока подключаются переменные. Треугольник означает, что в переменную будет произведена запись (output).

Например, в этом примере мы создаем персонажа (с помощью блока «Create char»), а потом выставляем ему же зеркальность в «true» (с помощью блока «Mirror»):

Кстати, все переменные могут иметь названия (в нашем случае «с1»). И все переменные одного типа с одинаковым названием будут синхронизированы в пределах одного скрипта (схемы). Т.е. пример выше совершенно идентичен такому:

Сделано это чтобы избавить вас от необходимости тянуть связи через два экрана.

Кроме того, если поставить галочку «expose to Unity», выбранная переменная станет public и будет видна другим скриптам (как визуальным, так и вашим рукописным). Массивы так же поддерживаются.

Немного практики.

Все модули, которые вы видите на схеме - самописные. И были написаны за 1 вечер. Давайте посмотрим на их код.

Рассмотрим сначала что-нибудь очень простое. Например, action, который называется «Start fight». Он начинает бой (по сути, вызывает метод игровой логики) и принимает два параметра - айдишник боя и айдишник соперника.

Код для него:

Public class uScriptAct_StartFight: uScriptLogic { public bool Out { get { return true; } } public void In ( int opponent_id, int fightdata_id) { MainGame.me.StartSimpleFight(opponent_id, fightdata_id); } }
Просто? Очень.

А теперь давайте усложним. Допустим, мы хотим проиграть какую-либо анимацию. И хотим иметь два выхода. Один - сразу, а второй, который запустится только когда анимация проиграется до конца.

Справа вы можете видеть блок с конфигурацией блока, куда вы вбиваете значения. У блока 3 входных параметра - CharacterGfx (непосредственно персонаж, которому мы проигрываем анимацию), Animation (название анимации) и Mirror (необходимость зеркаленья). И у блока есть два выхода: Out (выход сразу же) и Finished (только когда анимация закончится).

При этом переменная «Mirror» является энумератором с параметрами «да», «нет» и «не менять», которая представляется в виде dropdown-списка в окне свойств.

Код особо сложнее не стал:

Using uScriptEventHandler = uScript_GameObject.uScriptEventHandler; public class uScriptAct_CharacterPlayAnimation: uScriptLogic { public bool Out { get { return true; } } public event uScriptEventHandler Finished; public enum BooleanSet { NoChange = 0, True, False } public void In ( CharacterGfx ch, string anim_name, BooleanSet mirror) { ch.PlayAnimation(anim_name); if (mirror != BooleanSet.NoChange) ch.SetMirror(mirror == BooleanSet.True); ch.OnAnimationEndedCallback += () => { if (null != Finished) Finished(this, new System.EventArgs()); }; } }
Еще момент. Во всех блоках выше выход (Out) вызывался сразу же после выполнения кода блока.

А что если мы хотим сделать асинхронный action? Например, загрузку сцены. И чтобы выполнение нашего визуального скрипта приостановилось до того момента, пока асинхронно не прогрузится сцена.

Делается это так же просто. Вместо строчки
public bool Out { get { return true; } } которая являлась флагом «скрипт всегда готов к выходу», мы пишем:
public event uScriptEventHandler Out; тем самым говоря - «Out теперь является хэндлером, а не вечно-истинным boolean"ном».

А далее в коде в тот момент, когда вы будете готовы продолжить выполнение скрипта, вам нужно вызвать этот хэндлер ровно так же, как было с Finished в предыдущем примере:
if (Out != null) Out(this, new System.EventArgs());

Не обязательно писать код самому.

Все, что я привел выше - было написано нами, чтобы собрать все, что нужно в одно удобное место. Но это зачастую не обязательно. В uScript есть такая вещь, которая называется «reflection». На деле это означает, что uScript автоматически сканирует вашу сцену и вытягивает из нее все объекты, а так же их публичные методы и параметры, до которых может дотянуться. И предоставляет к ним доступ.

Например, вот так выглядит блок-reflection на метод GetComponent() камеры на сцене:

(внизу вы можете видеть блок «properties», где задаются все параметры метода)

Выводы.

Тулза нам однозначно понравилась и мы будем юзать ее дальше. Вообще, некоторые люди умудряются с помощью нее писать целые игры, но это уже чересчур.

Насколько глубоко мы сможем ее заюзать пока не знаем. Например, еще не решили, переписывать ли логику триггеров квестов с нашей lua-ориентированной на визуальную.

Но вот для скриптования кат-сцен и диалогов будем юзать однозначно.

Из минусов могу выделить только один (который является следствием плюса) - как я писал выше, uScript преобразует визуальные схемы в C# код. А следовательно каждая модификация схемы потребует перекомпиляции проекта.

В остальном - очень советую присмотреться к этому инструменту, если вы хотите скриптовать подобную логику. Так же, насколько я знаю, этот инструмент активно используют для написания AI.

Кстати, если вам нужна именно для скриптования поведения и взаимодействия объектов на сцене (например, триггеры на столкновения и т.п.), то присмотритесь к PlayMaker. Он больше ориентирован именно на событийную модель.