Создание воды в UnrealED
Содержание
Итак Вы сделали свой самый первый уровень из трех (у некоторых больше) комнат, с монстрами, с оружием, в общем - полный отпад. Однако, поиграв в этот уровень пару часов, Вы вдруг замечаете, что в нем страшно не хватает воды! Все Монстры мучаются от жажды и из-за этого еле стоят на ногах. Давайте исправим этот недостаток.
Сначала немного поговорим об устройстве Unreal. Каждый уровень в Unreal может содержать до 64 зон. Зона - это полностью замкнутый участок пространства. В каждой зоне могут быть свои физические параметры - гравитация, трение, освещение, реверберация и т.д. Кроме того, разделение уровня на зоны увеличивает скорость, т.к. движку легче определить какая часть уровня видна игроку, а какая - нет, и визуализировать только видимую игроком часть. Вода как раз и является такой зоной. Значит, чтобы создать воду надо создать замкнутое пространство и "сказать" движку, что бы он поместил воду внутрь этого пространства. Теперь приступим к собственно действиям.
Для начала сделайте стандартную комнату 256x512x512, наложите текстуры, добавьте источник света и место старта, в общем, все как положено. Чтобы создать воду надо сначала сделать "дырку" для нее, а затем закрыть эту дырку поверхностью, чтобы внутри дырки образовалось замкнутое пространство. Ну и потом, естественно, "сказать" движку, что внутри этого пространства у нас будет вода. Итак, по порядку. Сначала сделайте браш любой формы (я например сделал куб 128x256x526), который мы вырежем из пола и тем самым создадим нашу "дыру" для воды. Теперь подвиньте этот браш, чтобы его верхняя граница была на одном уровне с полом Вашей комнаты:
Теперь вырезайте Вашу дыру командой Substract. Наложите на нее какие-нибудь текстуры. Теперь нам надо закрыть эту дыру, чтобы внутри образовалось замкнутое пространство. Для этого служит инструмент "поверхность" (sheet). Нажмите правой кнопкой на кнопку с изображением квадратной поверхности (). Из меню выберите "Sheet properties...". Появится окно с параметрами поверхности. Три верхних параметра - это ориентация поверхности. Поставьте там Floor/Ceiling (Пол/потолок). Два значения ниже - это размеры поверхности. Нам надо чтобы поверхность закрывала всю дыру, так что сделайте Вашу поверхность размером точно с Вашу дыру (256x256). Если у Вас дыра не прямоугольная, то сделайте Вашу поверхность такой, чтобы она полностью закрывала Вашу дыру:
Теперь подвиньте Вашу поверхность повыше к уровню пола (чтобы она была ниже уровня пола на 1-2 клеточки) и загрузите текстуры воды. Большинство текстур жидкостей находятся в файле liquids.utx. Загрузите его и выберите понравившуюся Вам текстуру. Теперь Вы можете просто добавить Вашу поверхность, и потом настроить ее параметры (по умолчанию поверхности не ограничивают зону, Вам надо самостоятельно поставить этот параметр) вручную, однако для этого есть способ проще. Убедитесь, что Ваша поверхность выделена и нажмите кнопку Add Special Brush (). Появится окно Add Special Brush. Из списка "Predefined:" выберите Water (вода, если кто не знает :) и нажмите кнопку Add Special. В 3D окне должна появиться поверхность воды. Если она не появилась, то попробуйте переделать (F8) Ваш уровень. Если она не появилась и в этот раз то проверьте, находится ли камера внутри комнаты - поверхности, ограничивающие зоны в редакторе могут быть видны только из тех зон, которые она ограничивает (во сказал, а?). В противном случае повторите операцию еще раз. Итак, Ваша дыра готова и теперь в ней образовано замкнутое пространство. Осталось только "сказать" движку, что в Вашей дыре должна быть вода. Для этого существует класс Info.ZoneInfo.WaterZone. Просто добавьте его в любое место под водой:
Теперь переделайте уровень и можете в него играть.
Создание лавы и токсичной жидкости
Если Вы захотите где-нибудь в уровне добавить не воду, а, например, лаву или противную зеленую токсичную жидкость, то Вам надо сделать все то же самое, только вместо класса WaterZone добавлять класс LavaZone для лавы и SlimeZone для токсичной жидкости. Текстуры для лавы лежат в файле LavaFX.utx, а для токсичной жидкости можно приспособить пару текстур из файла GenFluid.utx (правда, там они не анимированы).
И, последнее о чем я расскажу Вам в этой статье - это о том, как создавать водопады. Сделайте еще одну комнату размерами 512x512x512 и соедините ее с Вашей первой комнатой коридором. Теперь сделайте куб размерами 128x512x128 и поместите его в центр Вашей комнаты на уровень пола, это будет Ваша вторая дыра для воды. Именно сюда и будет падать вода из водопада. Вырежьте этот куб, тем самым, создав дыру. Наложите на нее текстуры. Теперь создайте куб размерами 448x32x128 (448 получено путем сложения 128 (высота или глубина Вашей дыры), 256 (половина высоты комнаты) и 64 (чтобы водопад не казался низким)). Это и будет место где будет стекать вода. Поместите куб с любой стороны Вашей дыры:
Теперь вырежьте его и наложите текстуры. Теперь закройте Вашу дыру поверхностью воды размерами 544x128 (число 544 было получено в результате сложения 512, длины Вашей дыры, и 32, ширины того браша, который мы только что вырезали, в результате чего наша дыра слегка расширилась) аналогично тому, как мы сделали это в первый раз. Добавьте под воду класс Info.ZoneInfo.WaterZone. Теперь нам надо добавить собственно падающую воду. Для этого мы тоже будем использовать поверхность. Вызовите окно sheet properties, там, где указывается оринетация поверхности, поставьте X-Wall или Y-Wall в зависимости от расположения Вашего водопада. Оставьте ширину поверхности ("U:" ) равной 128, а высоту ("V: ") измените на число равное 256+64 (высота нашего водопада, если считать от пола комнаты) + расстояние от пола комнаты до поверхности воды. Одна клетка по умолчанию равна 16 единицам. Значит, если у Вас поверхность воды на одну клетку ниже пола, то высота Вашей поверхности должна быть равна 256+64+16. Теперь поместите поверхность в центр того браша, который мы вырезали специально для падающей воды. Если вершины поверхности не совпадают с сеткой, то кликните правой кнопкой на любую вершину поверхности:
Теперь загрузите файл текстур gen_fluid.utx. В этом файле лежат все текстуры воды, которые есть в файле Liquids.utx плюс еще много всего, однако текстуры там не анимированы. В данном случае нам не нужна красивая анимация текстур на самом водопаде, нам лишь нужно чтобы вода падала сверху вниз. Теперь выберите текстуру, которую Вы использовали для водной поверхности в этом файле. Убедитесь, что Ваша поверхность для водопада выбрана и нажмите кнопку Add Brush () Должен появиться собственно водопад. Если он не появился, то не расстраивайтесь. Дело в том, что поверхности по умолчанию односторонние, т.е. видны только с одной стороны. В 3D окне выйдите из комнаты и зайдите за водопад. Вы должны увидеть Вашу поверхность:
Чтобы сделать поверхность двусторонней выделите ее, нажмите на ней правой кнопкой и в меню выберите Surface Properties (1 selected). В закладке Effects установите флажок "2-Sided". Теперь все должно быть OK. Нам осталось только сделать так, чтобы вода падала сверху вниз. Для этого в том же окне Surface properties в закладке Effects установите флажок V-Pan. В 3D окне кликните на маленькую кнопку в углу с изображением джойстика. Это включит обновление картинки в реальном времени. Если текстура движется не сверху вниз, а снизу вверх, то войдите в окно Surface Properties, закладка Rotate, и нажмите кнопку Flip V. Это перевернет Вашу текстуру, и она будет двигаться в нужную сторону. Однако осталась одна проблема - этот водопад выглядит совсем нереалистично. Для того чтобы он выглядел намного реалистичнее, мы растянем нашу текстуру по вертикали. Для этого вообще-то предназначается закладка Scale в том же окне Surface Properties, однако, у меня работает только режим Simple Scaling, а нам сейчас нужен режим Custom Scaling. А так как он у меня не работает (скорее всего, у Вас тоже не заработает), я буду растягивать текстуру вручную, через консоль. Выберите в меню команду Window->Log. Теперь выделите поверхность водопада и в окне Unreal Log Window напишите: POLY TEXSCALE UU=1 VV=0.2. Если у Вас работает Custom Scaling, то в поле Texture V поставьте значение от 5 до 8. Ваш водопад теперь стал выглядеть гораздо лучше:
Для придания большей реалистичности можете также поставить параметр V-Pan и для собственно поверхности воды в водопаде. Все, теперь можете играть!(Ctrl+P). Конечно, этот водопад не самый лучший в мире, например, вода у нас просто течет из стенки, однако Вы можете без проблем исправить этот недостаток. Впоследствии, когда Вы научитесь новым вещам в UnrealED Вы сможете улучшить Ваш водопад - например, добавить звуки, туман и т.п. Счастливого создания уровней!