Shadwen

Shadwen

Not enough ratings
Редактор. Руководство.
By Srgo37
Данное руководство - скорее перевод тутора по эдитору, которое дали нам сами разрабодчики. Только я ещё добавляю несколько пояснений, дабы было понятно каждому и сразу. Даже новичку, который первый раз возмётся за редактор.
Текста много. Но я пытаюсь максимально сжать количство текста данного в оригинальном руководстве (+ информация с вики) и ничего не потерять по сымлсу.

Что нравится или не нравится, или не понятно - пишите в комментах. Постараемся разобраться

На данный момент, руководство дорабатывается, и кое-что (особенно ляпы в начале) будет изменено.
   
Award
Favorite
Favorited
Unfavorite
Как запустить редактор.
Редактор, он же в народе эдитор (editor), он же SDK (Soft Development Kit, что переводится как набор инструментов разрабодчика)

Когда мы запускаем игру у нас появляется лаунчер, в котором м можем выбрать либо start game (это как бы сама игра), либо start editor соответственно мы запускаем программу - эдитор, в которой мы сможем создавать наши уровни. Чтобы попасть на тренировочные уровни - мы запускаем эдитор, появляется чёрное окошечко с сеткой, которая во всех SDK именуется как GRID. То есть увас чёрное пространство и эта сетка. Она нужна для того, чтобы точно измерять расстояние между объектами ктороые вы будете создавать, в редакторе. Жмём file -> open. Появляется окно с папками оригинальных уровней - папка под названием "editor tutorial". Вот в неё нам и надо.. Если по какой-то причине увас открылось что-то другое, то папка с уровнями и с тутором находятся в C:\shadweeditor\data\mission. Не знаю почему так решили разрабы, но по умолчанию папка с уровнями находится на прямую на диске C:\ Далее окрыв папку "editor tutorial" мы видим10 папок.

Это всё туторы (от слова туториал -> tutorial - руководство, обучение) эдитора.

Ну и конечно-же логичнее всего начать с начала.. входим в папку 01_getting_started и два раза кликаем одноимённый файл с расширением .fbe
01_getting_started
Это первая глава нашей тренировки по редактированию карт. В ней мы научимся элементарным действиям, таким как передвижение, оптимизация вида редактора, оптимизация объектов на карте и слои.
01_Переключение между видами обзора и перемещение.
Первое что мы видим - это просьба нажать F5. И если вы её не нажмёте - у нас с вами ничего не получится.


Следующее что мы видим.. что мы уже в теле Шадвен, можем бегать и прыгать.. но поворачиваться только не можем.

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

Далее мы видим, и будем видеть в других туторах, стенды с книгами. Всё очём будет писаться ниже - это информация из этих книг, + информация с вики [frozenbyte.com], на которую собственно разработчики и ссылаются в первом-же стенде с книгой.

Бежим мимо трёх стендов с книгами рядом со стеной с римской цифрой 1,


И встаём перед следующими тремя книгами.


Переключаться между видами обзора можно как горячими клавишами, так и инструментаи с тулбара (toolbar -> панель инструментов)

Горячие клавиши:

Shift+F5 - переключиться на творца. (создателя, разработчика)

Ctrl+F5 - переключиться на игрока. ВНИМАНИЕ! Игрок появится в том месте, куда напрвленна камера. Так что направляйте её желательно на пол, на котором можно стоять. (есть полы на которых нельзя)

F5 - это то что мы первым делом сделали, загрузив этот уровень. Эта функция помещает вас в точку старта (если вы в данный момент в виде творца.)

Тулбар:
(кнопки эти находятся под словами сategories и game. Это синие значки как на плеере - стоп и пауза)

stop game - синий квадрат "стоп". Это перемещает на то место в виде боженьки, где в виде боженьки вы были до этого. Оно же - Shift+F5

Pause - кнопка stop со звёздочкой * ) это почти тоже самое. только в виде творца вы появляетесь ровно на том месте, где только что были в виде игрока.

restart at last start position - синие палочка и треугольник (ну ХЗ как по другому называется) это видимо на тот случай, если вы наломали, какм-то образом, дров и чтоб не загружать режим боженьки, просто переначать с того места, с которого вы начали последний раз посредством Ctrl+F5

start at position - синяя кнопка play со *. Это Ctrl+F5

start game - синяя кнопка play. Это F5

Если вы ещё не заметили, то эдитор очень часто спрашиват вас - "сохранить ли изменеия перед сменой вида или нет?" Даже если вы ничего не поменяли - эдитор всё равно снова и снова будет задавать этот вопрос. В общем ставим галочку напротив "remember my Yes answer" и нажимаем "no". Чтобы поменять данное решение (чего я не рекомендую) Идём через подменю - tools->Options, жмём в появившемся окне вкладку Basic, и первая строчка содержит remember my Yes answer = true. двойное нажатие левой кнопкой мыши изменит значение на false и эдитор сного будет доставать вас вопростом об сохранении изменений. Ну и там по своей инциативе можете полазить сами, если не боитесь что нть испортить.

Примечание -> далее "вид разработчика" я именую как godmode, а переключение на "вид разработчика" я буду писать как godmode_on.. Ну и логтчно, что перекулючение обратно на вид игрока -> godmode-off

Если вы меня послушались и сейчас стоите перед тремя книгами, делаем godmode_on (Shift+F5): летать по пространству можно посредством взада (WASD кнопок) а управлять камерой можно зажав ПКМ (правую кнопку мыши). Ну а летать быстрее - зажать ещё и shift.

Слетайте под то место, на которм в данный момент стоите (если вы перед тремя книгами ПСЛЕ стеночки с римской цифрой 1) и вы найдёте пробоораз Shadwуn.


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

Пока вы в godmode летим до следующих двух книг перед пропастью и розовой стеной вдалеке, до которой не допрыгнуть. Материализуемся рядом с ними, то-есть godmode_off (Ctrl+F5).
Вы можете ещё перемещаться с помощью кнопок F5 и F6.

F5 вас телепортирует немного вперёд.

F6 вас телепортирует немного вверх.

Внимание! Игрок всё так-же может умереть от падения. Тоесть если вы пролетели достаточно большое расстояние по оси X (ну то есть с верху вниз) то даже перед приземлением если нажмёте F5 и ТЕМ БОЛЕЕ F6, всё-равно коснувшись поверхности - помрёте.
01_Оптимизация вида редактора.
Летим летим летим летим, и видим 2 стенда с книгами на фоне стены с римской цифрой ДВА.


Вы можете премещать тулбары и создавать диалоговые окна с нужными вам настройками параметров в любых уголках редактора. К примеру давайте залезем в подменю в "View" и выберем "Type tree" Ну или горачая клавиша Ctrl+F3. Появится диалоговое окно. Я не помню изначально оно просто появляется, или уже прикреплено к одной из сторон. Смысл в том, чтобы кажый раз не лезть в дебри, а создать быстрый доступ к нужным дирректориям.. Если вы сейчас начнёте двигать появившееся окошко "Types", то уидете что его можно прикрепить к одной из четырёх сторон.
Допустим с этим разобрались. Далее вызовите окно пропорций "proporties" нажав Ctrl+P. появится ещё одно окно.. которое так-же можно прикрепить теперь либо к одной из оставшихся трёх сторон, либо к любой из четырёх сторон предыдущего окна которое именуется "types".

Есть ещё много более-менее часто используемых дирректорий, таких как "Error List", "Scene insteances", "Resources","References List", и т.д.
Всё это можно найти через подменю "View". Но конкретно об вышеперечисленном - позже.
01_Слои.
(layers)

И далее летим мы к четырём стендам с книгами, которые стоят у стены с римской циферкой 3.


Внимание - серьёзная инфа.

Все объекты на уровне располагаются на слоях. Это почти как в фотошопе, работаешь на отдельном от оригинала слое, дабы оригинал не загубить.

Со слоями можно работать только в godmode.

В godmode объект с другого слоя увидеть нельзя, надо активировать нужный слой.
В игре-же (godmode_off) такой объект можно увидеть, только если в свойствах предмета включена его видимость.
Да - видимость объекта тоже можно изменять. Нет, никакой полупрозрачности нет. предмет либо виден, либо - нет.

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

Например слой 1 имеет название "Collision layer". На нём распологаются предметы из группы "CollisionHelpers". Слой предназначен для физических (статисеских и динамических) объектов.
Или например слой 4 - "Lights layer" На нём расположены источники света, без которых вообще ничего не видно. Соответственно он предназначен для источников света.
Не волнуйся дорогой читатель - что за группа "CollisionHelpers" и что это за такие названия слоёв - будет объясненно позже.

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

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

На панели инструментов со слоями - активный слой выделен синим (это такие кватдраты с диагональной линией).
Так-же, если вы чуствуете уверенность в своих силах - вы можете работать сразу на нескольких слоях. Выбрать несколько слоёв можно с зажатой клавишей Shift. А чтобы снова выбрать только один активный слой - просто щёлкните дважды ЛКМ на нужном вам слое.

Есть вариант, позволяющий редактирование на не активных слоях. Нажимаем в подменю selection -> Selection filter locking и убираем галочку с "Allow selection on active layer only" вы получите предупреждение, что этого делать не рекомендуется. Жмём ОК. И мы получаем шанс работать со всеми слоями одновременно, но так-же шанс таки запороть всё сразу.

А теперь практика:

Делаем godmode_on (ну то-есть Shift+F5 если ещё не поняли) немножко отлетаем от стены с римской цифрой 3 и перещёлкиваем все слои от нулевого до одинадцатого, либо по отдельности, либо с нажатой кнопкой shift, и видим то, чего не видно обычному смертному.

Поясняю для закрепления материала.. Мы не видим всего этого в режиме игрока потому, что все эти объекты имеют такую опцию как "видимость" и эта опция в данный момент находится в позиции "ВЫКЛ". А на то невидимое дерево
мы не натыкаемься, потому, что у него нет никаких физических свойств. там на слое 1 - пусто. Даже если сделать его видимым.
01_Обработка.
Самое сложное для понимания в этом стартовом туторе - позади. Далее всё просто. Но для начала - порйдите по той вон круглой платформе.. и вы поймёте - что именно с ней не так.


Вы наверное успели заметить разноцветные шарики с буквами zZ, которые находятся от тулбара с синими значками stop play и pause (которые включают и выключают godmode).
Я пока только выяснил их название, но не их прямое назначение.

синяя - process resources,
розовая - model instancing,
зелёная - occlusion culling,
розовая particle resources,
сиреневая - builds navigation mesh.

Как заверяется в туторе - самые часто юзуемые - это первая и последняя (синяя и сиреневая)

Рекомендуется нажимать на них в начале уровня. Чем больше уровень, и чем больше деталей на уровне, тем дольше придётся ждать пока эти функции всё просчитают и исправят.

Подробнее о них в словаре редактора [frozenbyte.com] на википедии frozenbyte.
Позже я отредактирую этот момент, как дотянутся руки до словаря, и объясню конкретно - что это, и зачем оно. Но рразрабы в туторе нам говорят что вникать особо не нужно.. Просто если какие-то моменты на карте работают неисправно - просто прощёлкай те эти разноцветные пузыри. (только я не помню - в godmode или нет.)

Нажмите все 5 разноцветные пузырики по порядку.. и попробуйте ещё раз после этого пройти по платформе.
01_Выбор уровня.
Ну и последнее.

бежим, летим, ну кому как удобнее, к последним трём стендам, которые находятся у стеночки с римской цифрой 4.


Открыть следующий тутор который назвается 02_Static_Objects (речь там пойдёт о статических объектах) можно не только путём нажатия на подменю file -> Open map. Можно и по другому.. Нажимае подменю file -> maps.. В редакторе окроется диалоговое окно со всеми картами. Это окно мы так-же можем прикрепить к любой из четырёх сторон как говорилось об этом раннее. Лично я предпочитаю file -> open

Далее буду писать о статических объектах.. так что открываем 02_Static_Objects.
02_Статические_объекты.
02_Static_Objects

В данной главе дана информация о расстояниях, и информация об использовании инструментов для работы со стачическими объектам. Немного затронута тема свойств предмета.
02_Расстояния.
Начнём с элементарных цифр, которые нам необходимо знать. Это оптимальные расстояния прыжковмежду объектами, которые игрок может свобожно преодолеть.

Для практики нам даны два пути - зелёный и красный.


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

Инфо по расстояниям:

прыжок в длинну: 4 - 4.5 метра.

прыжок в высоту (если не вскарабкиваться): 2 метра.

прыжок в высоту (со вскарабкиванием): 4 метра.

прыжок в высоту (от выступа к выстопу): 3 метра.


Заграждение чтобы спрятаться от стражника (на корточках): 0.8

Как вариант - стражника можно и убить:
02_Работа с объектами.
Для того, чтобы в godmode взаимодействовать со статическими объектами, передвигать их и изменять их свойства, нужно сделать акивным так называемый Collision layer. Это слой под цифрой 1.

Напоминание
Collision layer (1) - это слой "столкновений", то-есть физических взаимодействий. на нём располагаются статические и динамические объекты.

Активировав нужный слой (1) вы можете выбрать объект. Он подсветится и будет видно его название. А далее мы можем его двигать вращать и зменять его размеры с помощью этого вот тулбара (обведено зелёной рамочкой)

Их названия по прорядку, и горячие клавиши:
selection tool
move tool -> Shift+1
rotate tool -> Shift+2
scale tool -> Shift+3
area tool -> Shift+4
position offset move tool -> Shift+5
scale specific side tool -> Shift+6
paint texture -> Shift+7
navigation offlink -> Shift+8
vertex snap -> V
snap to grid,
tool configuration

Не все мы затронем в данной галве.
02_Инструмент_"move tool".
Перед вами пропасть, которую непреодолеть:

Вам даны три платформы, которые можно переместить так, чтобы её пройти.

Первый из выше перечисленных инструментов selection tool ничего не делает, а просто выбирает (это для работы со свойствами объекта). Нам нужен move tool, это второй по счёту. нажимаем на move tool (shift+1), затем на одну из платформ.

Как мы видим - появилось три оси и название объекта (в нашем случае RockCollisionHelper):
Перетаскиваем пердмет, и двигаем его, цепляя левой кнопкой мыши за одну из осей, в нужном направлении. Ставим все три платформы так, чтобы мы могли перепрыгнуть на другую сторону. Ставте так, как получится - не задумывайтесь о математической точности - об этом чуть позже.

Тройка пунктов к сведенью:

1
При выборе объекта, который вы хотите сейчас передвинуть, по мимо названия мы видим ещё и надпись global. Если не global, значит либо local или screen space. Это соотношение, каким вы будете передвигать предмет.. Советую поставить global (меняется клавишей пробел), подробности позже.

2
Oбъект передвигается по одной оси, если мышкой "подцепить" только за стрелочку - направление оси (за зелёную - ось игрик, то-есть вверх и вниз), по двум осям сразу - подцепить ближе к центру за прилегающий к осям КВАДРАТ, ну и по всем трём осям - если уцепится прямо за центр квадрата, то бышь за серыq КУБ.

3
Объект также можно перемещать клавишами влево вправо вверх вниз pageUp и pageDown. Вверх вниз - ось Y, влево в право - ось x, pageup pagedown - ось z. При условии соотношения global.


Как и всегда и везде - отменить последнее действие можно горячей клавишей Ctrl+Z
02_Инструмент_"rotate tool".
Теперь нам надо использовать два данных нам объекта что-бы переправиться на другую сторону:

И да - именно так выглядит лицо героини, когда она пытается удержать равновесие стоя на краю:

Простым передвижением move tool (Shift+1) тут уже не обойтись. Учимся пользовать следующий инструмент.
При выбранном rotate tool (Shift+2) (который нам и нужен) появляются теперь не стрелочки, а круги которые олицетворяют всё те-же оси X, Y, Z:
Только предмет не двигается теперь, а вращается.

Немножечко о точности.
Если у вес предмет вращается не ступенчето а просто гладко - зажмите кнопку Ctrl и попробуйте вращать предмет.. Вращаться он должен теперь ступенчето... пошагово. Один такой шаг = 15 градусов.
Если у вас и так всё пошагово, то зажатие Ctrl сделает все перемещения гладкими.
(То-же самое и с move tool, да и с остальными тулами.)
И да - так-же можно вращать - взявшись за две оси разом.

Помним - отменить последнее действие можно горячей клавишей Ctrl+Z
02_Иструменты_"scale tool" & "specifiс scale side tool".
Пройдя второе испытание от разработчиков - приступаем к третьему, где мы будем задействовать 2 инструмента. Два первых инструмента тут мало помогут.
Инструменты - scale tool и scale specifiс side tool.


На что стоит обратить внимание:

scale tool расширяет объект пропорциаонально от центра.

scale specifiс side tool увеличивает стороны, прилегающие к углу, за которые мы можем тянуть.


Поиграйтесь здесь уже сами, чтобы самим понять все тонкости. Вас никто не торопит, и тутор без вас никуда не убежит.. Просто потратьте на это время.
02_Properties (Ctrl+P)
А теперь немного отступим от темы насилования объектов мышкой и углубимся в познания по серьёзней. В дальнейшем мы будем уже чаще редактировать свойства объекта в ручную. По этому давайте начнём уже сейчас понемногу вникать.

Помните, мы тренировались открывать разные окошечки? Какие-то непонятные Ctrl+F3 и Ctrl+P, и ещё говорили что мол они часто юзуемые?

Так вот - дружненько нажимем Ctrl+P (в godmode канешн). Появляется диалоговое окно "proporties", крепим его к любой из понравившихся сторон редактора. Раз мы только что работали с размерами предмета - давайте изменим предмет в ручную.

Теперь нам достаточно обойтись простецкой selection tool. Это тот самый, вроде бы бесполезный инструмент в виде курсора. Выбрав его - нажимаем на любой из предметов, который хотите изменить. И лучше тот - который остался уже позади. В окошке мы видиии мнго всего, но давайте сосредоточимся и найдём строчку "modelcomnponent". Разворачивйте её (нажав на плюсик слева). Но не терямеся от увиденного разнообразия. В развёрнутом "ModelComponent", пятой строчкой с верху должна быть строчка Scale (масштаб), на против которой мы видим VC3 и далее в скобках через запятую её пропроции x, y, z. Ну если не удобно - можно нажать и плюсик леве слова scale тем самым получить развёртку по настройки размеров осей.

Обратить внимание хочу тут вот на что:
Не знаю почему, но чтобы сделать из объекта идеальный куб, в значении оси z само значение умножаем на 5. К примеру, ввдя X Y и Z такие цифры как 7 7 и 7 - мы не получим идальный кубю мы получим какой-то там стандартный объект в виде книги.. или доски. не знаю пока точно. И чтобы получить куб - вводим такие значения: x = 7, Y = 7, ну а Z = 7*5, то - есть 35. и да.. чтобы применить значение, после его ввода можно нажать Enter.


И да, именно так выглядит лицо героини, когда она корабкается вдоль края:

02_Копирование и клонирование объекта.
Настало время следующего испытания от разработчиков.

Самый быстрый способ создания уровней, это не лазить каждый раз всякие там дирректории, подменю, и искать нужный объект. А легче просто копировать его и переместить к нужному месту.


На этой картинке я выбрал сначала move tool, затем зажав Shift выбрал рандомно ещё несколько предментов (чтобы выбрать сразу несколько), и затем НЕ ОТПУСКАЯ Shift стал их двигать по оси (в данном случае Y). Так как была зажата клавиша Shift двигать я стал КОПИИ выбранных объектов.. Эти копии создались посредством зажатой клавиши Shift и началом движения по оси.

Так-же можно пользовать Ctrl+c и Ctrl+v.

Советую в данный момент самим поиграться с клонированием копированием и передвижением объектов.

Немножко о математической точности.

У нас есть такой инструмент как tool configuration. Это такой гаечный ключ который находится чуть правее наших инструментов которые мы использовали в данном туторе. Хочу расказать об одной из его функци -> move snap. Само слово snap переводится по разному, но это то, о чём я говорил - когда мы вращали предметы - шаг. В данной настройке (move snap) мы можем установить длинну этого шага (это когда я ещё сказал, что можно зажать Ctrl пока используем move tool) от нуля (скользящее перемещение) до двух метров. Там-же мы можем включть функцию vizualize. С помощью неё, мы теперь будем видеть - сколько наших метровых, двух меторвых, или четверть-метровых шагов мы сделалем, пока двигаем объект.

02_Инструмент_"vertex snap".
Ещё у нас есть инструмент vertex snap. Это такое троиточие, почти сразу после тулбара с инструментами передвижения.. Этот инструмент поможет вам "прижать" один объект к другому вплотную.

Пользуется он так - сначала выбираем предмет чтобы он был "подсвечен"(не обязательно selection tool, можно любым тулом), затем жмём на наше троеточие - vertex tool (или горячую клавишу V). Вы должны заметить, что водя мышкой по предмету мы можем выбрать один из восьми углов (маленькая жёлтая сфера). теперь мы должны выбрать объект к которому хотим прислонить наш выбранный объект. Это может быть абсолютно любой объект в игре. Соответственно можно прижать объекты как бок к боку, так и один на другой.

Небольшая тренировочка:

Сейчас мы стоим перед следующей пропастью:

картинка
Быстренько вспомнили, что чтобы работать с физическими объектами - нам необходимо активировать для этого нужный слой. В данном случае слой 1.
Давайте-ка мы клонируем данный нам розовый объект RockCollisonHelper, который помимо прочих объектов в игре имеет название "CloneME" и прислоним бочком копию объекта к его оригиналу вплотную инструментом vertex snap (или горячей клавише V).

картинка
Далее заходим в tool cofiguration -> move snap. Делаем одни шаг равным двум метрам, и двигаем нашу копию на два деления, два шага (в итоге 4 метра). А если мы помним информацию по прыжкам из начала главы - хороший прыжок в длинну составляет 4 - 4.5 метра.

картинка
Далее, чтобы сократить время, мы выбираем оба наших объекта, и клонируем уже их, всмысле клонируем уже сразу два обекта.
Если мы всё сделали правильно у нас должно быть уже четыре объекта. А на картинке должно быть что-то вроде такого:


Так как вторые два объекта уже выделены, (а если нет - выберите наши третий и четвёртый объект) главное, что-бы оба последних обеъкта были выделены - полюзуем опять vetrtex snap и прислоняем, таким-же образом, третий объект ко второму. Должно получиться так:

картинка
Ну и затем - двигаем всё теже два наших выделеных объекта (третий и четвёртый) на два шага.

В итоге у нас получились четыре платформы с абсолютно равным расстоянием между ними в четыре метра.

И по идеальным платформам мы прыгаем дальше.

картинка
Для самостоятельной практики - отмените последние действия к изначальному (чтобы у вас была тольк одна платформа), и сделейте себе переправу не из четырёх, а из трёх блоков, с расстоянием между ними в 4.5 метра.

И помните - отменить последнее действие можно горячей клавишей Ctrl+Z
02_Properties & Types
(Crtl+P & Ctrl+F3)

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

Что-бы увидеть эти свойства, нам надо нажать Ctrl+P b откроется окно proporties. Мы его уже открывали. Если мы выберем любой из объектов на карте - и мы увидим его свойства.
Так-же мы можем либо удалять, либо добавлять новые свойства к объекту. К этому вернёмся позже.

Почти все объекты на данном уровне именуюутся Collision Helpers. Дирректорию с этими коллизион хелперсами можно найти следующим способoм:

Заходим в подменю view->Typetree или горячей клавишей Ctrl+F3. Открылось окошечко "Types".
Далее ввести в троке search слово CollisionHelper и пройти по пути Typeroot->instanceBase->Entity->objectEntity->object->Helper->CollisionHelper.

Запомнить следующее.. все предметы, которые мы будем вставлять в игру из этой дирректории - по умолчанию НЕВИДИМЫ!

Делаем следующее.

Godmode_on, окрываем окно types (Ctrl+F3), раскрываем дирректорию CollisionHelper (как было показано выше). Находим строку RockCollisionHelper, кликаем на неё (не на плюсик!! то есть не раскрываем саму дирректорию) тепери ищем место, куда хотим этот объект поставить (замечаем, что курсор теперь заимел спутника в виде жёлтой точечки).

Если вы хотите как бы "положить" объект на видимую поверхность, а не создать его либо внутри видимого объекта или за ним в пустоте, зажимем Shift и лишь за тем - кликаем левой кнопкой мыши.
Объект поставили, но в godmode_off он невидим. Зная где он находится - мы можем на него натолкнуться, повиснуть, взбраться.


Видимость включается, как говорилось раннее, в пропорциях, свойствах объекта. Открываем окно пропорций properties - > Ctrl+P. Выбираем наш объект, в списке свойств ModelComponent, разворачиваем (нажимем плюсик) и вспоминаем, что, шестой строчкой является свойство Размеров объекта о котором говорилось ранее (scale), а ещё пятью строчками ниже - находится нужное нам свойство VisibleInGame на против которой не хватает галочки. Ставим её. Теперь ваш объект видим.

И последним заданием на этой карте будет самостоятельня постройка пути на верх. Создавайте объек, перемещайте, растягивайте, копируйте.. в общем как в голову придёт.

ВАЖНО!

Не забудте про то, что объект из дерриктори CollisionHelper в окошке types по умолчанию НЕВИДИМЫ! И по этому (если вы будете использовать более одного объекта) сначала сделайте предмет ВИДИМЫМ, и лишь за тем - копируйте его (дабы свойство видимости уже имелось в клонированном объекте.)
В следующей главе мы будем рассматривать работу с динамическими объектами. Называется она 03 - dynamic_objects
03_Динамические_объекты.
Динамические объекты - это обекты которые можно толкнуть, пнуть, задеть, свалить, разбить, и т.д.

В этой главе мы углубимся в компоненты объекта и в свойства компонентов. Те или иные компоненты можно добавлять объекту, и наоборот - убирать.

Все эти компоненты и их свойста мы видим в окне "prperties" (Ctrl+P)

По сути - динамический объект, это статический объект, только он имеет динамические компоненты и свойства.

Давайте для по порядку - что за компоненты и их свойства.

Если мы выбрав объект на карте откроем окно properties, то увидим спсок этих самых компонентов. В это же время у каждого из этих компонентов есть много своих свойств.

Например выбрав динамический обект - мы увидим, что у него есть физический компонент -> строчка PhysicsComponent. Статический же объект тоже имеет PhysicsComponent, только вот свойства у этого компонента - разные. Там ножество разных свойств, но обратим внимание на те свойства, которые и делают объект динамическим:

ActorType установлен как -> ActorTypeDynamic

CollisionGroup -> CollisionGroupDynamic

DominanceGroup -> DominanceGroupDynamic


К тому-же, для создания динамического объекта требуется такой компонент как-> PhysicsActivationAreaComponent

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

Чтобы добавить динамически объект, просто в TypeTree (Ctrl+F3) найдите (к примеру) DynamicWoodCollisionHelper, и добавте его (в конце прошлой главы мы таким-же образом добавляли RockCollisionHelper). Поищите другие дерриктории с другими предметами, например из игры Trine (это ведь те-же разработчики). поиграйтесь с формами, со взаимодействием с ними (в некоторых ситуация может быть ошибка).
Самый простой способ найти DynamicHelpers в окне Types (TypeTree) в строке search ввести dynamic и пройти по пути TypeRoot -> InstanceBase -> Entity -> ObjectEntity -> object -> Helper -> CollisionHelper

Помним о том, о чём говорилось в предыдущей главе - все "helpers" невидимы в игре и надо ставить (если хотите) в компоненте physicsComponent на против свойства vibleInGame галочку,






03_Свойство ActorType
По сути - динамический объект, это статический объект, только он имеет динамические компоненты и свойства.

Давайте для по порядку - что за компоненты и их свойства.

Если мы выбрав объект на карте откроем окно properties, то увидим спсок этих самых компонентов. В это же время у каждого из этих компонентов есть много своих свойств.

Например выбрав динамический обект - мы увидим, что у него есть физический компонент -> строчка PhysicsComponent. Статический же объект тоже имеет PhysicsComponent, только вот свойства у этого компонента имеют другие значения. Там множество разных свойств, но обратим внимание на те свойства, которые и делают объект динамическим:

ActorType установлен как -> ActorTypeDynamic

CollisionGroup -> CollisionGroupDynamic

DominanceGroup -> DominanceGroupDynamic




К тому-же, для создания динамического объекта требуется добавлять компонент -> PhysicsActivationAreaComponent
03_Добавление динамических объектов.
В редакторе есть как-бы закотовки объектов из уоторых вы уже будете создовать полноценные статические или, если хотите, динамические обекты.


Чтобы добавить динамически объект, просто в TypeTree (Ctrl+F3) найдите (к примеру) DynamicWoodCollisionHelper, и добавте его (в конце прошлой главы мы таким-же образом добавляли RockCollisionHelper). Поищите другие дерриктории с другими предметами, например из игры Trine (это ведь те-же разработчики). поиграйтесь с формами, со взаимодействием с ними (в некоторых ситуация может быть ошибка).
Самый простой способ найти DynamicHelpers в окне Types (TypeTree) в строке search ввести dynamic и пройти по пути TypeRoot -> InstanceBase -> Entity -> ObjectEntity -> object -> Helper -> CollisionHelper

Помним о том, о чём говорилось в предыдущей главе - все "helpers" невидимы в игре и надо ставить (если хотите) в компоненте physicsComponent на против свойства visibleInGame галочку.

А теперь немного практики:

Почти в начале уровня мы видим круглое углубление, в котором стоит синий куб, бу-то бы на досках. На самом-же деле куб имеет в свойстве ActorType параметр ActorTypeStatic. По этому он не будет реагировать нинакакое взаимодействие ни с игроком, ни с другими объектами.. И сбив планки зелёными шарами - синий куб просто останется висеть в воздухе:


Что-бы устранить данное недоразумение, открываем components (Ctrl+P) ищем компонент PhysicsComponent, и в свойстве ActorType ставим значение ActorTypeDynamic

Ну и если возник вопрос о смене цвета объека.
Он мнеяется в компоненте ModelComponent, свойсво - DiffuseColor. В этой строчке показан сам цвет и его цифровое значение. Нажать на троеточие для сены цвета.
03_Масса объекта.
Свойство (mass) можно найти в комоненте - PhysicsComponents.

Имеется 7 различных уровней массы объекта от "Not Set" (0.25) до "Max" (20), каждое из которых, в свою очередь подразделено на 3. Напимер MassMediumLevel1-MassMediumLevel3

Ни форма, ни размер - на вес объекта никак не влияет.

Весовые значения:

MassVeryLightLevel1 - 0.25
MassVeryLightLevel2 - 0.5
MassVeryLightLevel3 - 1.0

MassLightLevel1 - 1.5
MassLightLevel2 - 2.0
MassLightLevel3 - 2.5

MassMediumLevel1 - 3.0
MassMediumLevel2 - 4.0
MassMediumLevel3 - 5.0

MassHeavyLevel1 - 6.0
MassHeavyLevel2 - 7.0
MassHeavyLevel3 - 8.0

MassMassiveLevel1 - 10.0
MassMassiveLevel2 - 15.0
MassMassiveLevel3 - 20.0
03_Добавление компонентов.
Пробежав мимо качелек и дойдя до стены с римской циферкой 3 - мы упираемся в стену, на вершине которй стоит розовый куб.


Он имеет все нужные свойства, чтобы быть динамическим объектом. Он и есть динамический объект. Нам не хватает только одного - он не может быть захвачен нашим гарпуном.

Не буду лазить вокруг да около, скажу прямо - он не является "rope_target" (верёвочной целью.. гарпуновой целью.. как хотите). То-есть проще говоря - у него нет нужного компонента, который делает объект доступным для гарпуна Shadwen. (в этот момент, у меня вознакла идея сделать стражника этой самой верёвочной целью. попробую позже. я это вообще для себя пишу.)

А точнее - нужных компонента два.. Какой компонент и за что отвечает - я пока не выяснил - напишу позже.
Компоненты эти называются так:

NinjaRopeTargetGameplayEntityBoxAreaComponent

RopeTargetWoodCollisionHelperAimedRopeTargetComponent

Добавляются же компоненты очень просто. Просто щёлкаем ПКМ (если кто не в курсе - правая кнопка мыши) и выбрать add component. Откроется База компонентов. В строку search на верху просто скопируйте название одного из компонентов перечисленного выше. Вы получите развёртку и соответственно - выбираем кжный нам компонент. Далее жмём b]add[/b] но не add and inherit.
Так же со вторым компонентов.

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

К слову - у куба вес маловат, так то он Shadwen не перевесит. Но что с этим делать, уверен - вы знаете (MassMassiveLevel2 или MassMassiveLevel3 должно быть достаточно).

В начале данной главы мы говорили, что по мимо уже данных нам компонентов и свойст статического объекта, надо изменить 3 основын свойства, и добавить такой компонент как PhysicsActivationAreaComponent. Чтобы немного понятней стало о нём (о них, таких компонентов несколько) скажу так - они могут быть разных форм и размеров, но выоплняют только одну роль = взаимодействие с другими объектам (включая игрока и охрану). Например у фиолетовой коробки, которой мы только что добавляли RopeTragetComponent'ы (делая её доступным для горпуна) имеет компонент PushingInfoComponent, что делает его доступным для толкания персонажем.
Без данного компонента - Shadwen просто упрётся в динамический объект, как в статический, хотя с помощью гарпуна или других обектов с ним можно будет взаимодействовать.

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


Далее мы видим проход, загорожнный объектами, которые можно разбить:
Это всё тоже работа различных компонентов:


Это конец данной главы. Далее мы будем изучать "верёвочные цели".. "цели для гарпуна".... в общем следующая глава 04_rope_targets.

P.S.:

Я начинаю догадываться, что разработчики не особо будут с нами сюсюкаться по поводу ВСЕХ ВОЗМОЖНЫХ компонентов, я ещё посмотрю - есть ли на вики их перечень, и какой компонент за что отвечает. На своей википедии[frozenbyte.com] разработчики нам предлагают самим залезать в свойства (properties) интересуещих наc объектов (которые есть на карте, либо которые есть в TypeTree -> Crtl+F3) и самим сравнивать как один объект ведёт себя с данным компонентом в отличии от другого объекта, у которго этого компонента нет и изучать различия в поведении объектов.

Я поищу позже список компонентов и их назначение либо на вики, либо просто в сети.
04_rope_targets
В редакторе, большинство деревянных объектов уже имеют необходимые компоненты чтобы можно было подцепить их гарпуном.
Для этого необходиы 2 компонента:

- AimedRopeTargetComponent

- BoxAreaComponent


В Type Tree (Ctrl+F3) можно найти уже готовый такой объект. называется он "RopeTargetWoodCollisionHelper" и найти его можно по пути InstanceBase -> Entity ->ObjectEntity -> object -> Helper -> CollisionHelper -> WoodCollisionHelper

После добавления AimedRopeTargetComponent
первое что нужно глянуть в его свойствах - включен ли он. На против слова Enabled обязательно должна стоять галочка:
В данном компоненте нам нужны два свойства:

1 свойство - WholePhysicsCanBeAttachPoint, кторое отвечает за то, что абсолютно вся поверхность объекта является целью для гарпуна. Если мы откключим это свойство (убрав галочку на против) мы отключим у объекта и свойство цепляемости.

2 свойство - AimTargetOffsets, которе отвечает за то, чтотеперьданный объект можно подцепить только за определённую область. напротив свойства есть плюс и минус. Нажимает плюсик, тем самым добавляя такую область (небольшой зелёный шар, первая такая область будет именоваться цифрой 0). Настроить место положение данной области можно цифрами напроив VCR, или левее названия области (как говорилось выше - 0) раскрываем меню на плюсик, и настраиваем уже по осям X, Y,Z конкретнее.
Примечание переводчика.

<- на картинке слева вы видите объект RopeTargetWoodCollisionHelper (который советовалось найти выше). На нём я отключил свойство WholePhysicsCanBeAttachPoint и добавил точку AimTargetOffsets, но как бы я не размещал эту точку - я всё-рано никак не мог подцепить обект гарпуном. Я было подумал что это только для динамических объектов.
Тогда я этот ящик:
Превратил в статический объек, убрал "цепляемость" по всей поверхности и добавил "область цепляемости." Но тут всё сработало.
Пока мне не понятно, почему на созданном объекте RopeTargetWoodCollisionHelper не получается так-же сделать лишь область цепляемости. Если кто знает - пишите. Может как-то по особому надо ставить данную область.

Далее в ключаем пятую тренировку - AI
05_ai
В данной главе мы рассмотрим то, как разметить противников, и менять их свойства и пути их передвижения. Так-же затронутся укрытия и Лили.
05_ai_Navigation_Mesh
Navigation Mesh является облатью, по которой могут передвигаться противники и Лили (далее ИИ или неписи (жаргонное от NPC))

Перед дальнейшим действиями, обязательно оптимизируем уровень (прощёлкиваем наши разноцветные шарики с буковками zZ - помните такие?)

Что-бы увидеть эту область - жмём на иконку Visualize Navigation Mesh icon в панели инструментов.

Для одного уровня нам нужна всего одна Navigation Mesh

Чтобы её создать, в древе предметов (type tree, Ctrl+F3) находим NavigationMeshAreaEntity (TypeRoot->InstanceBase->Entity->AreaEntity->NavigationMeshareaEntity), и выставляем точку там, где сможем её потом найти. Далее с помощью Area tool (горячая клавиша 4) растягиваем, чтобы захватить всё пространство уровня. И после того как мы это сделали - жмём Build Navigation Mesh, это пурпурный шар с буквами zZ.
05_ai_Укрытия.
Лили нуждается в укрытиях чтобы прятаться. Для этого нам в древе объектов (Ctrl+F3) нужно найтиподходящие объекты. Такие, например как кусты -> redwoodbushesLargePrefabEntity (ну или они-же, только в горшках, дабы внутри помещений смотрелись не нелепо -> indoorsredwoodbushesLargePrefabEntity), либо сено -> hayPile и hayPile_2

Чтобы пройти мимо стражников сдесь - добавим несколько стоговв сена.

Помним, что размер сена тоже можно изменить. (только по мимо размера, надо изменить и саму область укрытия. Просто косметическиое увеличение - ни к чему не приведёт.)
Но об это позже.

Пара наиболее важных свойств:
CanHideGuarBodies - отвечает за то, можно-ли прятать в укрытии стражников.

PriorityGroup - Это значение нужно для Лили. Лили будет бежать к самлму высокому значению укрытия. Пока, как я понимаю, таким образом, Лили легче направить к финалу уровня.

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

Компонент который отвечает за область укрытия называется GameHideoutComponent (ComponentBase->AbstractGameplayComponent->GameHideoutComponent->BodyGameHideoutComponent->HayPileBodyGameHideoutComponent). Добавляйте его к любым созаданным вами обектам. Все пропорции, конечно, можно (как я писал раньше) менять в свойствах данного компонента.
05_ai_Патрулирование.
В данном разделе я буду писать так, как будто мы создали уровень, ну или хотя-бы просто платформу и создали NavigationMeshAreaEntity (напоминаю - это нужно, чтобы стражники и Лили могли ходить по поверхностям. На тех поверхностях, которые не затронуты NavigationMeshAreaEntity, поставленые на них сража и Лили, просто буду стоять как вкопанные). Поставили на неё (платформу) стражника (например GuarHeavy из type tree) и хотим, чтобы он патрулировал платформу по периметру.

Сначала в двух словах о тех этапах которые мы должны сделать.

- Поставить стражника.

- Создать вейпоинты (путь передвижения) и триггер отвечающий за них.

- Привязать данного стражника к данному триггеру.

А теперь дословно описываю все те действия, которые мы сейчас сделаем. Для того, чтобы "двигаться" вместе со мной. Так сказать минутка практики.

- Создаём новую карту.

- Ставим свет (к освещению в целом мы вернёмся позже). В type tree находим объект AmbientLightEntity. Создаётся он на слое номер 4. Ставте его где угодно, это пока не важно..

- Создаём платформу RockCollisionHelper подойдёт. Сделайте её по шире и подлиннее.

- "Обвалакиваем" её NavigationMeshAreaEntitytype tree)

- Всё в том-же type tree находим GuarHeavy и ставим его на платформу. Где нить ближе к углу.

- Создаём триггер - в type tree ищем PatrolPointPathHelperEntity, он выглядит как бегущий человечек в рамочке,помещаем его либо рядышком с платформой, либо ещё где. Главное, что-бы вы сами помнили какого стражника и какие точки передвижения этот триггер связывает.

- Теперь создаём точки маршрута. Называются они - PatrolHelperEntities. Чтобы их создать мы должны выбрать наш триггер PatrolPointPathHelperEntity и раскрыть в нём компонент PatrolPointPathCollectionComponent. Ищем строчку PatrolPointList. На против данного свойста есть плюс и минус. плюс добавляет точки пути, а минус соответственно убирает, начиная с последней добавленной.
Так как платформа у нас имеет ровную прямоугольную (ну или квадратную) площадь, на необходимо 4 точки передвижения. но лучше пять. Сразу прям сейчас и нажмите плюсик пять раз. Хоть стражник от последней точки и пойдёт к первой, но лучше поместить последнюю и первую точки рядом, иначе могут быть ошибки и стражник просто может шагнуть в пропасть сквозь образовавшеюся бреж в путях.

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

Далее обычным Move tool начинаем размещать точки. Видим, что точки связанны зелёным вектором. Это и есть путь, по которрому и пойдёт наш стражник.
Делаем полный круг по периметру, но не замыкаем. То-есть не ставим первую и последнюю точку одну в одну. Хоть разработчики и сами так делают, я боюсь, из-за этого могут быть проблеммы. Я сделал так:
Обратим внимание, что точки размещаем как бы на половину вкопав в платформу.

- Теперь нам надо связать готовый триггер с нужным на стражником. Для этого выбираем стражника. Раскрываем его компонент под названием PatroComponent и ищем строку PatrolPathCollectionUH.
Жмём на против него троеточие (как это мы делали со сменой цвета у куба - помните?) и открывается окно. Акуратно двигаем окно в сторону, и просто левой кнопкой мыши выбираем на карте нужный нам триггер.

- Самое важное, после всех этих операций, перед проверкой, оптимизируем всё, то-есть прощёлкиваем наши шарики с буквами zZ. Иначе что-то может работать не корректно.

В общем у меня итог такой, и всё получилось:

Немножко о PatrolType

В компоненте PatrolComponent который имеется у стражника, есть свойство PatrolType (тип потрулирования).
На выбор имеем три таких типа:

PatrolTypeLoop

Охранник ходит по вейпоинтам в установленном порядке, покрайней мере до тех пор, пока не услышит или не увидит что-нибудь.

PatrolTypeRandom

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

PatrolType PingPong

Охранник пройдя до последнего вейпоинта развернётся и пойдёт по вейпоинтам в обратном порядке. То-есть он будет патрулировать от первого до последнего и обратно.
05_ai_колокол.
В игре вы наверное видели, как обнаружив мёртвое тело, или саму Shadwen (но при этом умудрившись не убить её), стражники бегут к колоколу, дабы включить тревогу, чтобы взбудоражить всю округу и прервать нам вашу хитрую игру.

Это всё объект AIMissionExitHelperEntity. Стража бежит к этому объекту. Обязательное условие его - он должен касаться земли (ну то есть поверхности, по которой может передвигаться стража).

Так-же как и триггером патрулирования, компонент имеет вид бегущего человека в рамочке, только жёлтого цвета, а не красного. И так-же как и с триггером патрулирования - стражника можно привязать к определённому триггеру тревоги. То-есть даже если наш триггер тревоги AIMissionExitHelperEntity находится рядом с охранником который хочет поднять тревогу, он попбежит к тому триггеру тревоги к которому "привязан". Привязка эта делается через компонент охранника AlertnessComponent ищем строчку MissionExitUH, так-же жмём троеточие, и игнорировав открывающеесе окно - выбираем вручную триггер тревоги к котором он побежит.
Ну а если и не привязывать охранника ни к какому триггеру тревоги - то он побежит к ближайшему.
05_ai_Сплетни.
Замечали вы так-же во время игры, что стржники между собой разговориваю, сплетничают, либо о тёмных духах, либо о короле и королеве.

Всё тут просто прсто. Объясняю поэтапно:

- создать триггер слухов. Это компонент GossipHelperEntity. Жмём горячую клавишу 4 чтбоы только что появившеюся сферу растянуть до нужных размеров. Когда Shadwen пересечёт грань этой зоны - начнётся разговор.

- В нашем объекте-триггере выбираем компонент GossipCollectionComponent
Видим в нём строчки Pool и Actors

- напротив Pool нажав на плюсик откроется окно в котормы мы должны выбрать один из слухов, то-есть то, о чём буду говорить выбранные нами стражники.
Для облегчения поисков, в строчке поиска search вводим gossip (что собственно и переводится как "слухи"). Далее двигаемся так - TypeRoot->ComponentBase->AbstractGameplayComponent->GossipComponent. Это и есть все наши слухи, которые есть в игре.

Другими словами, в Pool мы вибираем темы, на которые буду разговаривать наши стражники.

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

- напротив же строки Actors - мы также жмём плюсик, и как понимаете - минимум 2 раза. На против появившехся двух строчек жмём на троеточия. Сначала на против одного, а после выполненых действий ниже - напротив другого.
Откроется окно выбора стражников. Выбрать можно только тех стражников, которые находятся в сфере нашего триггера сплетен.
Проигнорировать всплывшее окно, как мы делали с триггерами тревоги и патрулирования уже не получится (ну разве что если включить функцию работы во всех слоях одновременно, об этом говорилось в начале). Тут нам придётся выбирать таким путём. В сплывшем окне InstanceRoot->DeafultScene "Scene"->ActorEntity, где ActorEntity имеет значёк человечка. Таких ActorEntity должно быть два (это два наших стражника находящиеся внутри триггера сплетен).

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

После обсуждения всех тем которые мы привязли к триггеру - стражники больше разговривать не будут.
05_ai_ИИ_и_динамические_объекты.
Внимание!
В данном разделе мне чоень бы хотелось рассказать, как из обсолютно пустой заготовки, сделать полноценыый объект, который блы-бы и целью для гарпуна, и его можно толкать, и прочее и прочее. Полноценный - как коробка в оригинальной игре, и естественно объяснить каждый компонент и для чего он нужен. Но пока я во всём не разбрался - предоставляю просто информацию с вики.
Раздел будет переделан позже, после того как разберусь.

Бочки и коробки в type tree уже имеют необходимые компоненты, дабы при перемещении или шуме - стражники обратили на них внимание.
Динамические объекты-же созданные нами, не имеют нужных компонентов.

Вот перечень компонентов, которые являются необходимыми для полноценного взаимодействия с неписями (напоминание - компоненты, добавляются ПКМ на объектеи add component):

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


- DistractionObjectComponent
Вроде как-бы мы задаём компонент, отвечающий именно зато, что на данный объект (его перемещение или шум) будет реагировать противник.

- GenerateSoundOnEventComponent
В появившемся окне в строке search вводим GenerateSoundOnEventComponent, и следуем пути ComponentBase->AbstractGameplayComponent->GeneratSoundOnEventComponent->ObjectGenerateSoundOnEventComponent (надо выбрать один из пяти компонентов, от самого тихого VeryQuiet, до самого громкого VeryLoud).
Компонент отвечает за то, что он шумит по округе и скакой громкостью, когда падает, или перемещается.

- PhysicsComponent
Созданный мною WoodCollisionHelper уже имеет сой нужный PhysicsComponent. Но в даном компоненте, я изменил его свойства на динамические т.к. WoodCollisionHelper по умолчанию статический (смотрим главу про динамические объекты).

- SoundGeneratorComponent. Там так-же вводим SoundGeneratorComponent в строку search и смотрим что выбрать - эксперементируйте, я пока не разобрался, но выбрал как в примере на вики (скрин ниже) ObjectSoundGeneratoComponent

- AreaComponent
Опять-же как на вики, я выбрал BoxAreaComponent
06_Вещи,_предметы
В данной главе мы научимся создавать контейнеры и создавать в них вещи для крфта предметов.
06_Наименования предметов.
Предмет и его наименование в редакторе:

Arrowhead (наконечник стрелы):
- CraftingMaterialArrowHead

Belt Piece (кусок ремня):
- CraftingMaterialBeltPiece

Candle (свеча):
- CraftingMaterialCandle

Cauldron (котелок):
- CraftingMaterialCauldron

Ornate Brooch (брошь):
- CraftingMaterialCelticBrooch

Ornate Cross (крест):
- CraftingMaterialOrnateCross

Dart (дротик):
- CraftingMaterialDart

Dress Pin (булавка для шитья):
- CraftingMaterialDressPin

Feather (перо):
- CraftingMaterialFeather

Fish Hook (рыболовный крюк):
- CraftingMaterialFishHook

Gear (шестерёнка):
- CraftingMaterialGear

Light Helmet (шлем):
- CraftingMaterialHelmet

Gunpowder Pouch (пороховой мешок):
- CraftingMaterialLeatherPouch

Metal Plate (металлическая пластина):
- CraftingMaterialMetalPlate

Nail (гвоздь):
- CraftingMaterialNail

Plank (деревянная планка):
- CraftingMaterialPlank

Poison (склянка с ядом):
- CraftingMaterialPotion

Rat (крыса):
- CraftingMaterialRat

Rope (моток верёвки):
- CraftingMaterialRope

Sharp Rock (обтёсанный камень):
- CraftingMaterialSharpRock

String (моток бечёвки):
- CraftingMaterialString

Water Skin (Фляга с водой):

- CraftingMaterialWaterSkin

Wolf Claw (волчий клык):

- CraftingMaterialWolfClaw

Wooden Beads (деревянные чётки):

- CraftingMaterialWoodenBeadds





Как это всё выглядит в type tree:
06_Контейнер.
К этому моменту - вы (в основном новички по работе с SDK) должны уже понимать, что внешний вид ничего не значит. Выжны лиш сосаляющие объекта. Компоненты.

В игре мы встречали ящики, которые содеожат те или иные вышеперечисленные вещи. И как вы догадываетесь - контейнером для вещей можно сделать всё, даже пол под ногами.

К сведению - охранник тоже может носить с собой опзные предметы.

Для того что-бы сделать из чегобы-то нибыло контейнер - на необходим компонент GameInventoryComponent. А точнее - именно этот компонент -> ChestGameInventoryComponent:
06_Помещаем_предмет_в_контейнер.
О создании предметов вам должно быть известно ещё по игре. Вам нужен рецепт, и нужные предметы для создания необходимых вещей (гарпун и ловушки).

В данном туторе у Шадвен нету гарпуна.
Подобная настройка делается на стартовой позиции уровня. об этом позже.
Там в бочке и сундуке лежат рецепт гарпуна, кусок ремня, и моток верёвки. Не хватает, согласно рецепту, ещё одного куска ремня, и наконечника стрелы.

Далее пошагово объясняю - как добавить предмет (можем добавить либо в уже имеющиеся "контейнеры", либо создать "контейнер" из любого рядом стоящих ящиков компонент ChestGameInventoryComponent. Да и как говорилось раннее - "контейнером" можно сделать хоть пол хоть стену):

Выбираем наш контейнер, и раскрываем наш компонент, который отвечает за то, что наш обхект является "контейнером" - GameInventoryComponent (ChestGameInventoryComponent).
Ищем строчку InventoryContents что в переводе - "содержимое инвентаря". Плюс и минус напротив - добавляют или убирают предмет.

Примечание - чтобы добавить одинаковый предмет - нужно и добавить его ЕЩЁ раз в список нажав "плюс".

Как было сказано выше - нам не хватает ещё одного куска ремня и одного наконечника стрелы. Зачит мы смело жмём два раза "плюс".
Появились две новые строки со значением GUID_NONE. То-есть мы мы подготовили два места под нужные нам предметы, но пока ещё ничего не "положили".

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

Далее можно начинать карту и в выбранном вами контейнере буду вложенны выбранные вами предметы.
07_Perfabs.
Perfabs - Это своего рода "заготовки". В данном туториале (если мы запустим соответствующий туториал) мы сразу видим можество подобных заготовок. Заготовки эти - это "слепленные" вместе несколько объектов. Например взять несколько RockCollisionHelper сделать их невидимыми, а вместо этого налепить текстур и вуаля - ступени, красивый навес, да и простая деревянная или кирпичная стена - готовы. Это упрощает строительство больших объектов в игре. Такие как сарай, или замок или ещё что. Можно создать просто несколько углов, то есть заготовок и и знах делать всегда не один и тот-же сарай, а всегда разный.

Ну а если проще - возьмём два RockCollisionHelper, и поставим их например буквой "Т". И если мы планируем часто использовать эту букву "Т" - что-бы сного и сного не создавать её - мы из этих двух объектво создадим заготовку, то-есть perfab.

Увидеть все заготовки можно по пути Categories -> Category root -> block_sets.

Но давайте перейдём к практике.
07_Создаём_perfab.
Я взял платформу из раннее созданного уровня, где мы учили ходить стражников. И хочу обклеить её текстурами какой нибудь кирпичной стены. Для этого я нашёл ledgegrab_height_set_ascetic_hallway_4x4_wall.fbxmodel в type tree и обклеил ею нашу платформу со всех сторон. Но не просто по одной штуке на одну сторону, а по несколько, дабы текстура не выглядела растянутой. Текстуру желательно помещать немного углубляя в объект.


По скольку мы будем делать основной "collision" объект невидимым, чтобы он не портил общий вид, на месте стыков текстуры - я добавил ещё по текстур, и немного углубил.
А сделанно это в основном для того, что-бы не видно было пустот:

Далее, обклеив (вам не обязательно заморачиваться с обклейкой как мне) текстурой наш обект, мы "привяжем" их друг к другу. Это нужно для того, чтобы двигая оди элемент объекта - мы двигали (ну или что-то там ещё) и всю остальную загатовку.
Выбираем все наши текстуры (Ctrl и Shift в помощь), жмём правую кнопку мыши и выбираем Set parent, после чеuо выбираем наш основной объект (в моём случае RockCollisionHelper). И только после этого выделяем ВСЁ, жмём правой кнопкой мыши и жмём Create perfab from selection. и называем его как нам удобно.

Ну собственно вот и результат:

Ну и в дополнение - из нескольских заготовок можно делать одну большую заготовку. Как например из данной платформы можно создать угол:
и из таких вот двух углов - комнату.
Но это больше логично только если делать комнату со сложным стрением внутри. Сделать например заготовку камина, печи, колодца, и тд.
На это может уйти уйма времени, ну а вы думали жизнь разрабов легка?
08_Окружение. Атмосфера.
В данной главе рассмотрим основные принципы работы со светом и тенью. Атмосфера - это всегда бОльшая составляющая часть практически любой игры. Работа с окруженьем поможет вдохнуть "жизнь" в ваш уровень.

Все визуальные состовляющие вы можете найти в пожменю Categories -> Category root -> art

Вtype tree:

- Объекты TypeRoot->InstanceBase->Entity->ObjectEntity->object

- Освещение TypeRoot->InstanceBase->Entity->LightEntity
08_Свет.
При добавленипи объектов света на карту, ключевыми являются:

- SunDirectionalLightEntity. Этот объект задаёт общее свечение по всей карте, и создаёт тени.

- PointLightEntity. Этот объект создаёт свечение в конкретной точке на карте, например от факела.

Оба этих объкта можно найти в type tree под LightEntity

Яркий пример мы видим на карте 08_level_art_basics, где задана тема позднего вечера. как бы лунный свет (от SunDirectionalLightEntity) и оранжевый свет от факелов (на самом деле от PointLightEntity).

Как я писал ещё раньше, при моделировании уровня мы можем, нет.. Нам не обходимо
использовать такой источник света как AmbientLightEntity иначе мы не увидим ничего. Но он так-же не обходим и при готовой карте. Например среди бела дня не может же быть уголков, где так темно, что невидно ни зги. За исключением полностью закрытых помещений конечно-же.. или глубоких пещер например. Да и вообще, AmbientLightEntity задаёт два противоположных направления света. В свойствах его пропорций, мы увидим, что Color2 темнее чем Color1. То есть объект с одной стороны освещается ярко, например от солнца, а сдругой темнее, ну или слабее, например от другого объекта, который отражает свет солнца. То-есть делаем максимально приближённую к реальности "сцену".
08_PointLightEntity.
Как было написанно раннее - данный объект добавляет, скажем так, "местное" свечение. То-есть от факела там.. или костра. В конце концов вам уже мало что божет помешаать собрать модель электрической лампочки.. Долго, трудно и даже нудно, но можно.

Но я отклонился от темы.

Вы можете менять диапазон, цвет и интенсивность свечения в свойствах его компонента PointLightComponent. А активация LinearFade немного "выравнивает" свечение, что позволяет не делать слишком высоких значений интенсивности и диапазона:

Вот ниже пример включенного и выключенного значения LinearFade. Обратите внимание на то, как это свойство влияет на окружение и меняет своё свечение, и даже свет:


Ну и пример того, как цвет свечения не совпадает с созданным окружением:

Ради интереса, активируйте слой 4 и посмотрите сами, сколько объектов генерирующих свет, окружают только лишь один факел, и сколько иих вообще в целом, хотя-бы просто рядом.
Вы увидите множество PointLightEntity. Выглядит он так:

Запомним пару вещей - PointLightEntity хоть и светит на ближайшие объекты, но он всегда проходит и сквозь них. И ещё он не создаёт теней.
08_RenderAlphaObjects & RendeSolidObjects
Выключиая RendeSolidObjects (который включен по умолчанию), мы выключаем так-же и способность освещаать все обычные объекты на карте.

Включая RenderAlphaObjects, мы делаем так, что PointLightEntity начинает освещать и альфа объекты (это такие объекты как паутина, дым, пар, туман и т.д.).

Ниже пример работы RenderAlphaObjects & RendeSolidObjects в совокупности. Использую две разные альфа-модели тумана.

Тут содержится два PointLightEntity:

- первый имеет белое свечение (как мы видим по окружению) и свойства выствленны по умолчанию. То-есть RendeSolidObjects включен, а RenderAlphaObjects выключен.

- у второго-же, данные свойства выставленны наоборот. да и основной цвет, как видите, я выбрал розовый.
08_SpotLightEntity
Ещё один полезный инструмент в ветке LightEntity. Скажу пока только то, что это направленный свет образующий конус, в отличии от PointLightEntity, который является "точкой" свечения. Он пока мне мало интересен, так что данную главу я дополню позже.
08_Тени.
Иногда SunDirectionalLightEntity не достаточно для нужного количества теней. Да и бывает так, что свет от его источника, может просвечивать сквозь объект (стену например), и там где должны быть тень - её просто нет.
Но это не беда - есть в редакторе так называемые "фейковые" тени, не настоящие. Не настоящие они потому, что генерируются не от SunDirectionalLightEntity.

Есть три вида не настоящих теней: fake_shadow_gradient.fbxmodel, fake_shadow_gradient_radial.fbxmodel и fake_shadow_solid.fbxmodel.

Скажу пока только о fake_shadow_solid.fbxmodel. Это объект в виде чёрного квадрата (не куба) который просто создаёт тень от SunDirectionalLightEntity.

С остальными двумя - поэксперементируйте сами.Напиш о них похже.
08_Текстуры.
Последняя комната на нашей карте посвящёной данной главе, не обклеена текстурами, и разрабы нам как бы предлагают сделать это самим. Ну мы помним, что мы делали в предыдущей глве с платформой? Вот тут надо сделать тоже самое.
Все текстуры можно найти через подменю по этому пути Categories->category root->art.
09_Шарниры.
В этой главе мы нучимся создавать и связывать объекты с шарнирами. То-есть научимся делать качели, двери (как бы петли), лифты и т.д.

Эти шарниры, которые именуются в туторе как HINGEJOINTS, являются своего рода гвоздями. которыми мы прибиваем физические объекты к другим объектам, или даже к пространству. Но которые можно перемещать или вращать под воздействием Шадвен, или других объектов, по основным трём осям:


И нам важно помнить, что объекты "шарниры" работаю ТОЛЬКО с динамическими объектами.
09_Соединение_шарнира_с_объектом.
Нам нужны две вещи:

- физический динамичеикий обект.

- шарнир объект.

Принцип следующий:

Ставим в прострпанстве динамический объект, берём нужный нам шарнир-объект (Для нужной нам оси X Y или Z), ставим его в том месте, где хотим создать точку упора для нашеко динамического объекта, и привязываем шарнир-объект к этому объекту.

Далее практика.

Возьмём нашу, пережившую множествво испытаний, платформу со стражником. Делаем из неё динамический объект (смотрим главу 4).

Лезем в type tree и в JointEntity находим HingeJoint, а в HingeJoint мы уже найдём XHingeJoint, YHingeJoint и ZHingeJoint.
Как говорилось выше - для каждой оси свой шарнир.

Мне нужно, чтобы платформа моя, являлась "качелями", и так как платформа идёт вдоль оси Х, значит мне надо "прибить" объект к оси Z. По этому я и беру ZHingeJoint.
Внимание - Пометив из type tree шарнир-объект, не забудте повернуть его так, как вы планируете использовать (взамидействовать) ваш динамический объект. По направлению стрелочек исходящих из основания шарнир-объекта всё предельно ясно.

Далее, как и положено качелям, точка опоры должны быть по-середине. Вот и наш шарнир-объект я ставлю там-же, ну и в его компоненте HingeJointComponent в строчке Component0 жму на троеточие, и как раньше, выбираю нужный объект мышкой.
Всё - можно проверять. К слову - стражники не умеют ходить по динамическим объектам, по этому наш стражник поведёт себя уже немного неадекватно.
09_Мультисоединение.
Пока покожу только на практике, например - как был сделан этот объект:
3 Comments
76561198114423040 30 Jul, 2016 @ 6:51am 
хорошо, буду ждать. тоже пока поразбираюсь что к чему
Srgo37  [author] 30 Jul, 2016 @ 6:36am 
можно.. просто самому тварить охота.. я даже не до конца разобравшись с тем что перевёл - пошёл уровни ваять.. даже туториал не до конца прошёл.. Чуток позже продолжу.
76561198114423040 30 Jul, 2016 @ 5:59am 
А можно увидеть продолжение? Очень интересно. Весь вечер в editor ковыряюсь