Matinee: пример создания сцены
В течение этого документа мы попытаемся создать простую matinee сцену. Этот туториал научит Вас устанавливать точки интерполяции (InterpolationPoint), а также определять поведение камеры, для того, чтобы добиться желаемого результата. Для успешного создания этой сцены Вам понадобится минимальные знания UnrealEd: Вы должны уметь создавать простой уровень, вырезать браши и пр.
Запустите UnrealEd. Затем:
Перестройте карту (rebuild). Этот уровень Вы и будете использовать в процессе создания сцены. Или, если Вы достаточно ленивы, можете загрузить уже готовый уровень отсюда: http://www.unrealscript.ru/tutorials/editing/matineeexample/maps/matineeexample01.zip
После того, как Вы закончите строительство уровня, он будет выглядеть примерно так:
Куб внутри другого куба. Я установил контрастные текстуры для того, чтобы было ясно видно, что происходит на уровне, но Вы вольны выбирать любые текстуры на Ваше усмотрение.
Теперь необходимо установить на уровень SceneManager актер. Это можно сделать двумя способами:
Теперь, когда у Вас есть актер SceneManager, перейдем к его свойствам и установим в поле bCinematicView значение true. Это заставит сцену отображаться в широкоформатном виде (letterbox) при ее проигрывании.
Также перейдите в раздел Events и укажите в поле Tag имя, например, "ExampleScene" (без кавычек). Это имя будет использовано позже для запуска сцены.
Теперь необходимо добавить точки интерполяции (InterpolationPoint), для того, чтобы камера "знала" куда ей следует перемещаться. В этом примере добавим четыре такие точки рядом с каждым углом меньшего куба. Самый простой способ это сделать, перейти к закладке Tools в Matinee окне и нажать кнопку "Add Interpolation Point". Таким образом, будет добавлена точка интерполяции в том месте, где расположена в данный момент камера, а также такая точка будет иметь значение Rotation аналогичное ротации камеры.
Итак, добавьте по одной точке на каждом из углов куба. Вы, также можете изменить высоту расположения этих точек, для того, чтобы при проигрывании сцены наблюдалась некоторая вариация в движении. Вот как это выглядит у меня:
Как Вы, наверное, заметили, при выборе точки интерполяции, также отображается схематический конус направления. Он позволяет легко судить о направлении, в котором развернута данная точка (более удачно, чем это может отобразить стрелка).
LookTarget - простенький актер, единственная цель которого, указывать камере направление, в котором она должна разворачиваться. Для этих целей можно использовать любой актер на уровне, но актер LookTarget использует очень удобную иконку в виде красной мишени. Такую иконку легко найти на уровне, и также она делает очевидным, то, куда "смотрит" камера.
Для того чтобы добавить LookTarget, переместите камеру в то место, где Вы хотите его установить и нажмите кнопку Add LookTarget в закладке Tools. При этом LookTarget актер будет добавлен точно в том месте, где расположена в данный момент камера. Установите один такой актер над меньшим кубом:
Для создания траектории между точками интерполяции, с целью связать все пути в один общий путь, необходимо в сцену добавить действия (Actions). Убедитесь, что нужная Вам сцена выделена в закладке Scenes, затем перейдите к закладке Actions.
Здесь нажмите кнопку добавления нового действия и для него укажите тип ActionMoveCamera. Новое действие, при этом, будет добавлено в конец списка действий. Первое, что нужно сделать - выбрать соответствующую ему точку интерполяции. Эта точка будет указывать начало пути. Теперь перейдите к разделу MatAction и в поле IntPoint нажмите кнопку Use. При этом, в поле должно появится имя выбранной Вами точки интерполяции.
Первое действие является некоторым образом специальным, потому что для него не нужно указывать значение длительности (Duration). Эта точка представляет собой исходное положение камеры. Длительность равная 0 означает мгновенный переход камеры в эту точку.
Теперь добавьте еще одно действие, выберите следующую точку интерполяции, к которой должна переместиться камера, короче говоря, сделайте для этого действия все тоже самое, что и для предыдущего. При этом в едиторе появится линия траектории, соединяющая эти две точки интерполяции:
Также Вы должны указать время для этого действия. Откройте в свойствах секцию Time и в поле Duration введите значение 8. Это означает, что камере понадобится 8 секунд для того, чтобы переместиться в точку интерполяции, которая назначена для данного действия.
Теперь добавим третье действие. Но на этот раз Вы можете просто скопировать предыдущее. Для этого выделите последнее добавленное Вами действие и нажмите кнопку создания копии ( ). При этом в список будет добавлено действие идентичное выделенному (в нашем случае это должно быть последним, добавленным Вами действием). Единственное, что нужно исправить для нового действия - это назначить соответствующую ему точку интерполяции.
Добавьте, таким образом, еще 2 действия, до тех пор, пока Вы не замкнете траекторию по кругу (последняя точка интерполяции должна быть соединена с первой). В итоге должно получиться 5 действий, соединяющих 4 точки интерполяции:
На данном этапе Вы уже имеете полностью рабочую matinee сцену. Она пока не представляет собой ничего особенного, но, тем не менее, ее уже можно запускать. Для того чтобы убедится, что Вы ничего не забыли, откройте в едиторе меню Tools и нажмите "Check Map For Errors". Если появившееся окно при этом будет пустым, то можете себя поздравить! В противном случае, необходимо будет исправить ошибки, прежде чем двигаться дальше.
Окно предварительного просмотра
Вы можете просмотреть созданную Вами сцену, не запуская игры. Нажмите кнопку предварительного просмотра ( ) и в едиторе появится окно просмотра сцен:
Самое простое что можно сделать в этом окне - нажать кнопку запуска сцены ( ) и просмотреть сцену в действии. Экран перейдет в широкоформатный режим, и камера начнет двигаться. При этом, на перемещение от одной точки интерполяции к следующей, камере понадобится по 8 секунд. Сами точки интерполяции в этом окне не отображаются, вместо них появляются белые кубики. Если Вы хотите, чтобы линии траектории также не отображались во время просмотра, нажмите кнопку отключения траекторий ( ).
Для ручной перемотки сцены, Вы можете воспользоваться ползунком времени ( ). В данном примере использовать его смысла не имеет, но вообще это очень удобный инструмент для того, чтобы просмотреть отдельно некоторые участки сцены. Так что, попробуйте воспользоваться им, чтобы лучше вникнуть в его работу.
Теперь перейдем к наведению лоска! Добавим несколько простеньких эффектов в сцену и посмотрим, что они делают. Все типы эффектов были подробно рассмотрены в туториале: Matinee: основы. Если Вы будете знать, как добавлять простые эффекты, то, значит, сможете добавлять и все остальные эффекты, а также их настраивать.
Начнем с того, что добавим эффект "проявления" экрана (fade in) из темноты. Выделите второе действие сцены и перейдите к закладке поддействий (Sub Actions). Компоненты графического интерфейса здесь функционируют также как и в закладке действий (Actions). Нажмите на кнопку добавления нового поддействия и укажите "SubActionFade" тип. При этом в список будет добавлено новое поддействие данного типа.
В его свойствах перейдите в раздел Fade. Здесь расположены настройка цвета в/из которого экран будет затемняться/осветляться, а также поле, в котором указывается что будет происходить - затемнение или осветление экрана. Установите для переменной bFadeOut значение false, т.к. в нашем случае мы хотим добиться эффекта осветления (fade in).
Затем перейдите в раздел Time. В поле Duration укажите значение 4, а переменную Delay оставьте неизменной, т.е. равной 0. Таким образом, полное "проявление" экрана займет 4 секунды.
Убедитесь, что ползунок времени установлен в самом начале сцены, затем нажмите кнопку запуска сцены. Вы сможете увидеть эффект "проявления" экрана в действии. Если Вы хотите остановить работу сцены до того, как она закончилась, воспользуйтесь кнопкой остановки сцены ( ).
Чтобы увидеть, как влияет настройка Delay на поддействие, попробуйте установить ее равной 2 и снова запустите сцену. Сцена нормально начнется, и только через 2 секунды Вы увидите эффект "проявления" экрана. При этом следует помнить, что время, указываемое в поддействиях, отсчитывается относительно времени действия, к которому оно принадлежит. Очень важно это понимать, хотя это и звучит довольно запутанно. Попрактиковавшись с другими, более сложными поддействиями, я думаю, Вы вникните в смысл.
Верните Delay нулевое значение прежде чем продолжать.
Теперь сделаем так, чтобы камера по мере своего движения смотрела в определенную точку. Она будет следить за LookTarget актером, который был добавлен в начале этого туториала.
Для этого вернемся к закладке действий (Actions) и выберем из списка третье действие. Снова вернемся к закладке поддействий (Sub Actions). Прежде чем Вы это сделаете, обратите внимание на то, что на действии, которое Вы редактировали до этого, справа изображена маленькая иконка с буквой S. Это означает, что данное действия обладает поддействиями. Это сделано просто для удобства, ничего более.
В закладке поддействий (Sub Actions), нажмите кнопку добавления нового поддействия. Тип, при этом, укажите SubActionOrientation. После этого, откройте в настройках раздел Time и в поле Delay укажите значение 4. Таким образом, камера начнет разворачиваться в середине действия (если Вы помните, то каждое из действий в этом примере занимает по 8 секунд).
Все необходимые настройки расположены в разделе Orientation. В нем откройте секцию CamOrientation. Поля этой секции были рассмотрены в туториале: Matinee: основы, поэтому я не буду вдаваться в подробности. В поле CamOrientation выберите "CAMORIENT_LookAtActor". Теперь выделите на уровне актер LookTarget, и в поле LookAt нажмите кнопку Use. В поле, при этом, появится ссылка на этот актер. Таким образом, Вы указали matinee движку, чтобы камера смотрела в сторону LookTarget актера.
Также, необходимо настроить еще одну опцию: EaseInTime. Эта переменная отвечает за время, необходимое камере, для того чтобы развернуться в новом направлении. Укажите здесь значение 2, т.е. камера сделает разворот за 2 секунды.
Откройте окно предварительного просмотра и снова запустите сцену. Вы увидите что во время движения камеры вдоль траектории второго действия, она развернется в сторону куба. Также, обратите Ваше внимание на то, что с этих пор камера будет постоянно поворачиваться таким образом, чтобы она "смотрела" в сторону куба (на самом деле камера "следит" за LookTarget актером). Каждый раз, когда Вы хотите сделать разворот камеры в новом направлении, необходимо добавлять отдельное поддействие SubActionOrientation типа.
Для того, чтобы продемонстрировать это, вернитесь к закладке Actions и выберите последнее действие из списка. Затем перейдите к закладке Sub Action и добавьте новое поддействие SubActionOrientation типа. Только на этот раз, установите для него в поле CamOrientation значение "CAMORIENT_FacePath". EaseInTime, при этом, укажите равным 4, а в разделе Time установите задержку (Delay) в 4 секунды.
Запустите снова сцену на выполнение и проследите, как камера делает второй разворот. В такой ситуации вполне может получиться, что камера делает поворот в неверном направлении (например, камера разворачивается по часовой стрелке, а нужно - против). Это можно настроить, указав для переменной bReverseYaw значение равное 1. Эта переменная отвечает за направление разворота вокруг оси. Установите bReverseYaw и запустите сцену. Теперь Вы увидите, что камера поворачивается в нужном направлении.
При "тонкой" настройке сложной сцены, Вы, скорее всего, будете вынуждены просматривать сцену очень много раз. Для того чтобы этого избежать, воспользуйтесь ползунком времени и "перемотайте" сцену в нужное Вам положение. После этого, при нажатии кнопки запуска, сцена начнется с момента, на котором был установлен ползунок.
До сих пор, Вы, должно быть, заметили, что движения камеры выглядели немного угловато. Когда камера достигает очередной точки интерполяции, она резко разворачивается по направлению движения следующей траектории. Для того, чтобы это исправить, необходимо указать действиям использовать траектории с кривизной (так называемые, кривые Безье) вместо линейных траекторий. Выделите в списке Actions второе действие и откройте в настройках раздел Path. Здесь, в поле PathStyle, установите значение "PATHSTYLE_Bezier". При этом траектория в едиторе автоматически поменяется на кривую, а также, для каждой точки интерполяции, которые соединяет данная траектория, появятся "ручки" управления кривизной.
Вы можете перемещать ручки управления кривизной для придания траектории необходимой формы. Замените траектории для всех остальных действий также на кривые Безье. Затем из всех кривых сформируйте более или менее плавный путь для передвижения камеры:
На данном этапе точная форма траектории не важна, главное понять идею. Запустите снова сцену. Теперь она выглядит намного лучше и при переходе точки интерполяции рывка не происходит, камера разворачивается плавно.
Пришло время забросить едитор и посмотреть сцену в реальных условиях, т.е. в игре. Для этого установите точку старта игрока (PlayerStart) на уровне. Добавьте его, как Вы это обычно делаете, но только укажите ему в поле Event значение "ExampleScene". Таким образом, при старте игры будет возбуждено это событие, которое, в свою очередь, активирует актер SceneManager, и сцена запустится.
Если Вы хотите, чтобы сцена запускалась не сразу, а позже, установите на уровне датчик (Trigger). Сцена, в этом случае, не запуститься до тех пор, пока не будет активирован датчик.
Установив PlayerStart, можно смело запускать уровень прямо из игры. Сцена, при этом, начнет выполняться автоматически. Поздравляю! Это Ваша первая Matinee сцена.
Если у Вас возникли какие либо проблемы при построении сцены, Вы можете скачать готовую рабочую версию отсюда:
http://www.unrealscript.ru/tutorials/editing/matineeexample/maps/matineeexample02.zip
Удачи Вам в сценическом искусстве!
Warren "Taskmaster" Marshall
Last updated by Hugh Macdonald (UDN Staff) для билдов выше 829
Оригинал туториала: Matinee Example
Перевод сделан 32_Pistoleta