Здравствуйте. Вы находитесь на сайте Unreal Level.
Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War.
Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология.
Теория В Streaming нет ничего нового. Его уже давно используют для подгрузки, чтобы уменьшить время загрузки и занимаемый уровнем объем памяти. Однако, в Unreal Engine 3 иной контроль над системой Unreal Streaming.
Streaming - это динамическая загрузка. Например: вместо загрузки всего уровня, офисного здания, например, движок загружает только несколько первых комнат, а по продвижению игрока по локации, подгружает еще. Он динамически загружает и выгружает пройденные или неиспользованные части. Полезно тем, у кого мало оперативной памяти. Загрузка только несколько комнат, проходит гораздо быстрее, чем полная (движок сохранить эти номера в память). Недостаток в динамической загрузке - контент может замедлить всю игру, так как движок пытается сделать две вещи одновременно: загрузить материалы и построить уровень. Кроме того, игроки иногда могут видеть подгружающийся контент в комнате, что, очевидно, не очень красиво, когда деревья и ящики появляются из воздуха.
Streaming - замена зонирования в Unreal Engine. Streaming делает примерно то же, что и зонирование, когда зоны вне поля зрения они будут скрыты или полностью выгружены из памяти.
В Unreal Engine 3 каждая Streaming область в отдельном файле карты. Таким образом, один уровень может состоять из десятков различных файлов карт, которые все загружаются на один главный файл карты, который содержит информацию, что нужно подгрузить, чтобы загрузить другую часть. Такой метод имеет несколько преимуществ:
Одиночная Игра: Если игрок доходит до конца 1-го уровня (например док подводной лодки), появится экран загрузки, затем респаунится в том же доке подводной лодки в 2-м уровне. Со Streaming можно сделать подводную лодку и док отдельными файлами, а не одним файлом. Любые будущие изменения, которые сделаны в комнате, будут сделать один раз, и файл не будет занимать дополнительное дисковое пространство, поскольку он уже существует, а не нужно дублировать его на двух разных картах.
Небо: весь "SkyBox" может быть отдельным уровенем, его можно потом подгрузить или заменить. Это позволит Вам иметь набор карт неба и уровни будут на них ссылаться. Если небо нужно скорректировать, его можно будет заменить, но делать что лучше, как можно реже.
Слои: Несколько файлов карт позволит Вам разделять уровень между людьми, поскольку все отдельные файлы, будут собраны в одном. Например, Вы можете иметь визуально карту со всей геометрей и освещением, игровую карту со сценарием и специальными субъектами и со всеми звуками. Таким образом, художник, дизайнер, сценарист и звуковой оператор могут работать на уровне Одновременно.
Скорость: постепенно подгружающийся уровень использует меньше ресурсов ПК, что повышает быстродействие программы. Редактор должен загрузить только один участок, и только этот участок должен быть скомпилирован.
Настройки
В UE3 разные виды Streaming. В этом туториале основной упор будет на тип Kismetа, поскольку он довольно мощный и его легко контролировать. В этом уроке я подгружу сферу на уровень. Первое, что нам нужно, это по крайней мере два различных файла карт, можете загрузить свои или создать новые уровни.. Затем откройте Generic-браузер и перейдите к закладке "Level" и в верхнем меню нажмите Level->Import Level и выберите файл. После того как он загрузится вас спросят, какой метод использовать, выберите Kismet.
Если все хорошо другой уровень должен появляется в окнах. В моем примере будет подгружаться сфера но, если я запущу тест уровня, ее там не будет. Это потому, что движок еще не знает, когда ее нужно загрузить и показать. Для этого мы должны создать последовательность в Kismet и описать ему эту информацию. Откройте Kismet (только откройте Кизмет главного уровня, а не загружаемого). Щелкните правой кнопкой мыши и добавьте два узла: New Action -> Level -> Stream Level New Event -> Level Startup Затем соедините Level Startup с узлом Load Stream Level и щелкните по нему. В его свойствах в поле LevelName впишите имя файла для загрузки.
Запустите игру, и Вы увидите, что другой уровень теперь виден.
Продолжение - триггеры и объемы
Для пользователей Unreal Engine 3.0, где отсутствие неба - кошмар на экране, добавьте небо на уровень или с подгрузите с помощью Streaming. Добавьте триггер на Ваш уровень (например, в коридор, ведущий в другую область) и добавьте его в Kismet (Для этого щелкните правой кнопкой мыши на поверхности уровня Add Actor-> Add trigger, откройте Kismet, с выделенным триггером и щелкните правой кнопкой мыши в Kismet New Event Using Trigger_0 -> Touch), а затем подключите его к узлу Load Stream Level. Теперь уровень подгрузится от этого триггера, а чтоб его долго не искать по уровню, уберите галку с Hidden в настройках триггера в разделе Display.
Также обратите внимание на функцию bShouldBlockOnLoad. Если поставить галку, то экран будет на паузе или станет черным, пока весь тот файл не будет полностью загружен. Это предотвращает ситуации, где область еще полностью не загружена, когда игрок войдет в нее. Вы можете также просто выгрузить уровень, если вы подключите триггер или еще что-то к узлу UnLoad Stream Level. Все это хорошо, но триггеры не предоставляют не достаточный контроль и гибкость, поэтому есть возможность использовать объем, чтобы определить, что именно и когда нужно загружать. В больших уровнях, все что нужно загрузить, выделяем Строительным брашем (красным), потом щелкните правой кнопкой мыши по кнопке Volume -> LevelStreamingVolume.
Далее, выберите объем, который Вы только что сделали (переместите красный брашь, если Вы не видите созданный объем) и откройте его свойства. Здесь Вы можете настроить, тип загрузки, сделать его видимым или загрузить его и остановить игру, пока не загрузится полностью, а затем продолжить. В зависимости от версии движка, в котором Вы работаете, возможно, больше вариантов. SVB_LoadingAndVisibility лучше всего для большинства сценариев. Как только Вы все настроили, закройте окно свойств и убедитесь, чтоб объем по прежнему выделен. В браузере Level щелкните ПКМ на нужной подгружаемой части, и подключите к ней объем "Add Streaming Volumes".
Если все прошло хорошо объем должен работать. Уровень будет подгружаться и показываться, только когда игрок находится в объеме. Если он выйдет из него, уровень будет выгружен.
Дополнительная информация
Дважды щелкните по уровню во вкладке Level Generic, чтобы сделать его активным уровнем.
Убедитесь, что все дополнительные уровни сохранены. Сохранение основного уровня не сохраняет другие.
Довольно трудно сделать Kismet ссылки с одного уровня на другой, но это возможно. Старайтесь делать их как можно больше в течение того же файла.
Если Вы копируете какой-нибудь актор неактивного уровня тогда, дубликат будет автоматически добавлен к Вашему основному уровню. Практический пример: Вы работаете в Уровне B, в то время как Уровень A также загружен. Если Вы выбрали актор Уровня A и сделали его дубликат, он станет актором Уровня B.
Вы можете перемещать акторы, выделив их и нажать ПКМ - "Move selected to current level", для перемещения их на главный уровень.
Вопрос следующий. Можно ли не стримить определенный уровень, а именно грузить его (с экраном загрузки и все такое), когда игрок, например, активирует триггер, чтобы на новом уровне он появлялся с плеер старта? Так как при стриме очень неудобно то, что другой уровень прогружается на тех же координатах, в которых был в оригинале, и в итоге приходится двигать его относительно начального уровня.
lentinant, такое можно реализовать через консольную команду
open <имя карты>
а стрим на то и стрим, чтобы части карты подгружать в реальном времени (типа бесшовный мир). кстати, чтобы не возиться с перемещением подгружаемой карты, можешь начать ее разработку в основной карте. потом просто выдели нужные объекты и в окне уровней (закладка в браузере контента) -> создать уровень из выделенных объектов.