ru:toolworks:docs:apparatus:beginner

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ru:toolworks:docs:apparatus:beginner [2021/04/15 12:15] jisparru:toolworks:docs:apparatus:beginner [2022/01/04 19:06] (текущий) – синхронизированно с английской версией jispar
Строка 1: Строка 1:
 ====== Apparatus: Введение ====== ====== Apparatus: Введение ======
  
-В этом непродолжительном уроке мы поговорим о использовании Apparatus-плагина в Unreal Engine. Вы создадите свою первую деталь и научитесь реализовывать игровую логику в специально отведённом Blueprint-классе. Здесь продемонстрированы самые главные особенности работы с плагином на примере простого двумерного платформера.+В этом непродолжительном уроке мы поговорим об использовании Apparatus-плагина в Unreal Engine. Вы создадите свою первую деталь и научитесь реализовывать игровую логику в специально отведённом Blueprint-классе. Здесь продемонстрированы самые главные особенности работы с плагином на примере простого двумерного платформера.
  
-Для дальнейшего чтения необходимо понимать базовые концепции ECS-подхода. Для этого есть [[ru:toolworks:docs:apparatus:ecs|наша краткая справочка по ECS]].+Для дальнейшего чтения необходимо понимать базовые концепции ECS-подхода. Для этого есть [[ru:toolworks:docs:apparatus:ecs|наша краткая справка по ECS]].
  
 ===== Установка плагина и активация ===== ===== Установка плагина и активация =====
  
-   - Перед тем, как создать новый проект, Вам потребуется добавить плагин к игровому движку. Чтобы это сделать, пожалуйста, загрузите Epic Game Launcher, в левом меню выберете Unreal Engine, затем в верхнем меню - Библиотека. Промотайте вниз и под секцией 'Хранилище' найдите плагин Apparatus с жёлтой кнопкой 'Установить на движок'. Клик по кнопке, чтобы начать установку.{{ :en:toolworks:docs:apparatus-add-to-engine.png?nolink |}} +   - Перед тем, как создать новый проект, вам потребуется добавить плагин к игровому движку. Чтобы это сделать, пожалуйста, загрузите Epic Game Launcher, в левом меню выберете Unreal Engine, затем в верхнем меню - Библиотека. Промотайте вниз и под секцией 'Хранилище' найдите плагин Apparatus с жёлтой кнопкой 'Установить на движок'. Кликните по кнопке, чтобы начать установку.{{ :en:toolworks:docs:apparatus-add-to-engine.png?nolink |}} 
- +   - В открывшемся окне необходимо выбрать версию Unreal Engine. Обращаем внимание, что, на настоящий момент,  официально поддерживаемые версии - 4.26.1 и выше. После клика по 'Установить' подождите пару минут, пока загрузчик встроит код плагина в движок. Когда установка завершится, можно проверить её успешность кликом по 'Установленные дополнения' под версией движка.{{ :en:toolworks:docs:apparatus-check-installation.png?nolink |}}
-   - В открывшемся окне необходимо выбрать версию Unreal Engine. Обращаем внимание, что, на настоящий момент,  официально поддерживаемые версии - 4.26.1 и выше. После клика по 'Установить' подождите пару минут, пока загрузчик встроить код плагина в движок. Когда установка завершилась, можно проверить её успешность кликом по 'Установленные дополнения' под версией движка.{{ :en:toolworks:docs:apparatus-check-installation.png?nolink |}}+
  
 ==== Создание проекта ==== ==== Создание проекта ====
  
-   - Теперь надо [[ue>Basics/Projects/Browser|создать новый проект]]. Выберете пустой шаблон, так как в этом уроке мы всё настроим с нуля. Остальные опции можно оставить без изменений. Мы назовём модельную игру "ApparatusLearn", ну а Вы можете использовать любое имя, какое нравится. +   - Теперь надо [[ue>Basics/Projects/Browser|создать новый проект]]. Выберете пустой шаблон, так как в этом уроке мы настроим всё с нуля. Остальные опции можно оставить без изменений. Мы назовём модельную игру "ApparatusLearn", ну а вы можете использовать любое другое имя. 
-   - Когда проект создался и открылся, можете проверить, выбран ли плагин в настройках. Для этого в верхнем меню выберете 'Edit' -> 'Plugins'. Затем напечатайте 'Apparatus' в строке поиска (или промотайте вниз до 'Workflow' секции). Убедитесь, что галочка 'Enabled' установлена:{{ :en:toolworks:docs:apparatus-if-enabled.png?nolink |}}+   - Когда проект создался и открылся, не лишним будет проверить, выбран ли плагин в настройках. Для этого в верхнем меню выберете 'Edit' -> 'Plugins'. Затем напечатайте 'Apparatus' в строке поиска (или промотайте вниз до 'Workflow' секции). Убедитесь, что опция 'Enabled' включена:{{ :en:toolworks:docs:apparatus-if-enabled.png?nolink |}}
  
 ===== Начало работы с плагином ===== ===== Начало работы с плагином =====
-   Хорошо, перво-наперво нам предстоит добавить привязку клавиш, чтобы понимать, когда надо добавлять необходимые детали к Actor'у. Чтобы это сделать, перейдём в 'Edit'->'Project Settings' и печатаем 'bindings'. Найдём секцию 'Action Mappings' и в неё добавим следующие клавиши:+ 
 +   Перво-наперво нам предстоит добавить привязку клавиш, чтобы понимать, когда добавлять необходимые детали к Actor-у. Чтобы это сделать, перейдём в 'Edit'->'Project Settings' и напечатаем 'bindings'. Найдём секцию 'Action Mappings' и в неё добавим следующие клавиши:
       * 'RightMoveInput' – <key>d</key> на клавиатуре;       * 'RightMoveInput' – <key>d</key> на клавиатуре;
       * 'LeftMoveInput' – <key>a</key> на клавиатуре;       * 'LeftMoveInput' – <key>a</key> на клавиатуре;
-      * 'JumpMoveInput' – <key>w</key> на клавиатуре+      * 'JumpMoveInput' – клавиша <key>w</key>
-   Результат должен получиться примерно следующим: {{ :en:toolworks:docs:apparatus-bindings.png?nolink |}} +   Получим: {{ :en:toolworks:docs:apparatus-bindings.png?nolink |}} 
-   Мы начнём с создания новой 'пешки' (Pawn Blueprint). Для этого нажмём зелёную кнопочку 'Add/Import' в Content-браузере. Выберем 'Blueprint Class'->'Pawn' и дадим ему имя 'BP_MainPawn' (подробнее про именование ассетов можно посмотреть в [[https://github.com/Allar/ue4-style-guide|стиль-руководстве]]). После создания нового блупринт-класса, прожмите <key>Ctrl</key>+<key>s</key>, чтобы сохранить только что созданный объект. Теперь двойным нажатием по иконке откроем редактор блупринтов (если Вы в первый раз сталкиваетесь с Content-браузером, советуем проверить [[ue>Basics/ContentBrowser/index.html|официальную документацию движка]]). Переходим в Event-граф и удаляем все ноды через <key>Ctrl</key>+<key>a</key> и <key>Del</key>. В дальнейшем подразумевается, что Вы знакомы и с [[ue>ProgrammingAndScripting/Blueprints/Editor/index.html|редактором Blueprint'ов]]; далее - BP)+   Создадим новую 'пешку' (Pawn Blueprint). Для этого нажмём зелёную кнопку 'Add/Import' в Content-браузере. Выберем 'Blueprint Class'->'Pawn' и дадим ему имя 'BP_MainPawn' (подробнее про именование ассетов можно посмотреть в [[https://github.com/Allar/ue4-style-guide|стиль-руководстве]]). После создания нового блупринт-класса, прожмите <key>Ctrl</key>+<key>s</key>, чтобы сохранить только что созданный объект. Теперь двойным нажатием по иконке 'BP_MainPawn' откроем редактор блупринтов (если вы в первый раз сталкиваетесь с Content-браузером, советуем пролистать [[ue>Basics/ContentBrowser/index.html|официальную документацию]]). Переходим в Event-граф и удаляем все ноды через <key>Ctrl</key>+<key>a</key> и <key>Del</key>. В дальнейшем подразумевается, что вы знакомы и с [[ue>ProgrammingAndScripting/Blueprints/Editor/index.html|редактором Blueprint'ов]]; далее - BP. 
-   - В редакторе BP перейдём в Viewport и к списку компонентов класса добавим 'StaticMesh'. В [[ue>ProgrammingAndScripting/Blueprints/Editor/UIComponents/Details|панели деталей]] справа для 'Static Mesh'-свойства выбираем 'Cube' mesh-ассет. Чтобы пешка выглядела более приятной, для 'Element 0' свойства выбираем материал  'BrushedMetal'. А сейчас добавьте 'Subjective Actor' компонент (предоставляемый Apparatus'ом) к нашей пешке и посмотрите в панель деталей, чтобы ближе познакомиться с новым Actor-компонентом. В этом уроке нам потребуется только свойства под секцией 'Details':{{ :en:toolworks:docs:apparatus-details-panel.png?nolink |}}Как Вы уже догадались, детали мы будет помещать и настраивать именно здесь. +   - В редакторе BP перейдём во Viewport и к [[ue>Basics/Components/index.html|списку компонентов]] пешки добавим 'StaticMesh'. В [[ue>ProgrammingAndScripting/Blueprints/Editor/UIComponents/Details|панели деталей]] справа для 'Static Mesh'-свойства выберем 'Cube' mesh-ассет. Чтобы пешка выглядела более приятной, можно для 'Element 0' свойства выбрать материал  'BrushedMetal'. А сейчас, пожалуйста, добавьте **'Subjective Actor'** компонент (предоставляемый Apparatus-ом) к нашей пешке и посмотрите в панель деталей, чтобы ближе познакомиться с новым Actor-компонентом. В этом уроке нам потребуются только свойства под секцией 'Details':{{ :en:toolworks:docs:apparatus-details-panel.png?nolink |}}Как вы уже догадались, детали мы будем настраивать именно здесь. 
-   - <key>Ctrl</key>+<key>Shift</key>+<key>s</key> чтобы сохранить всё, и скомпилируем BP. Вновь откроем Content-браузер и создадим новый BP, но на этот раз раскроем панель 'All classes' и найдём там класс 'Detail':{{ :en:toolworks:docs:apparatus-new-detail.png?nolink |}} Вы можете также создавать детали через 'Create Advanced Asset' секцию в меню Content-браузера (правой кнопкой мыши по пустому месту в папке): {{ :en:toolworks:docs:apparatus:extra-detail-creation.png?nolink |}}+   - <key>Ctrl</key>+<key>Shift</key>+<key>s</key> чтобы сохранить всё; пожалуйста, скомпилируйте BP. Вновь откройте Content-браузер. Здесь мы создадим новый BP, но на этот раз раскроем панель 'All classes' и найдём там класс 'Detail':{{ :en:toolworks:docs:apparatus-new-detail.png?nolink |}} Есть также возможность создавать детали через 'Create Advanced Asset' секцию в меню Content-браузера (доступ по правой кнопки мыши): {{ :en:toolworks:docs:apparatus:extra-detail-creation.png?nolink |}}
    - Вообще говоря, Вы можете создать сколько угодно деталей, но для нужд этого туториала пригодятся следующие:    - Вообще говоря, Вы можете создать сколько угодно деталей, но для нужд этого туториала пригодятся следующие:
       * ''D_Moveable'',       * ''D_Moveable'',
Строка 30: Строка 30:
       * ''D_OnFloor'',       * ''D_OnFloor'',
       * ''D_Fallable''.       * ''D_Fallable''.
-   - Чтобы поддержать организованность проекта, переместите все созданные классы деталей в какую-нибудь отдельную папку 'Details'.{{ :en:toolworks:docs:apparatus-details-folder.png?nolink |}}Откройте любую деталь в BP-редакторе. Несложно видеть, детали в Apparatus - это на самом деле обычные BP-классы, где можно по собственному усмотрению объявлять переменные, заводить макросы и функции. Так же плагин предоставляет перегружаемые функции (override events): 'Activated' и 'Deactivated', которые вызываются, когда устанавливается соответственное значение флага 'Enabled'. В следующих деталях добавьте необходимые переменные:+   - Чтобы поддержать организованность проекта, переместите все созданные классы деталей в какую-нибудь отдельную папку 'Details'.{{ :en:toolworks:docs:apparatus-details-folder.png?nolink |}}Откройте любую деталь в BP-редакторе. Несложно видеть, что все детали в Apparatus   это на самом деле обычные BP-классы, где можно по собственному усмотрению объявлять переменные, заводить макросы и функции. Так же плагин предоставляет две перегружаемые функции (override events): 'Activated' и 'Deactivated', которые вызываются, когда устанавливается соответственное значение флага 'Enabled'. В следующих деталях,пожалуйста, добавьте необходимые переменные:
       * Float 'Speed' в ''D_Moveable'' с значением по умолчанию ''100.0''.       * Float 'Speed' в ''D_Moveable'' с значением по умолчанию ''100.0''.
       * Перечисление ''ETouch Swipe Direction'' с именем ''Direction'' со свойством 'Editable' в ''D_Moving''.       * Перечисление ''ETouch Swipe Direction'' с именем ''Direction'' со свойством 'Editable' в ''D_Moving''.
-      * Ссылку типа ''Box Collision Object Reference'' с именем 'Bottom' к ''D_Fallable'' детали со свойствами  'Editable' и 'exposed on spawn'.{{ :en:toolworks:docs:apparatus:apparatus-many-ddd.png?nolink |}} +      * Ссылку типа ''Box Collision Object Reference'' с именем 'Bottom' к ''D_Fallable'' детали со свойствами  'Editable' и 'Exposed on spawn'.{{ :en:toolworks:docs:apparatus:apparatus-many-ddd.png?nolink |}} 
-   - Перейдя обратно к классу 'BP_MainPawn', сделайте куб немного поменьше (например, скопируйте эту строчку вместе с скобками: ''(0.25, 0.25, 0.25)'' - и, щёлкнув правой кнопкой мыши по вектору scale, вставьте скопированное значение значение; если всё сработает правильно, значения компонент установятся в надлежащие числа). Теперь добавим Actor-component 'Spring Arm' и привяжем его к 'DefaultSceneRoot', затем добавим также камеру, привязав её к 'Arm' (убедитесь, что при этом вектора масштаба на новых компонентах остались в значениях по умолчанию ''(1,1,1)''). Немного повернём 'Arm' по Z-оси на 180°, а после и по Y-оси, но уже на -30°. +   - Перейдя обратно к классу 'BP_MainPawn', сделаем куб немного поменьше (например, скопируйте эту строчку вместе с скобками: ''(0.25, 0.25, 0.25)'' - и, щёлкнув правой кнопкой мыши по вектору scale, вставьте скопированное значение; если всё сработает правильно, значения компонент установятся в надлежащие числа). Теперь добавим Actor-component 'Spring Arm' и привяжем его к 'DefaultSceneRoot', затем добавим также камеру, привязав её к 'Arm' (убедитесь, что при этом вектора масштаба на новых компонентах остались в значениях по умолчанию ''(1,1,1)''). Немного повернём 'Arm' по Z-оси на 180°, а после и по Y-оси, но уже на -30°. 
-   - Результат должен выглядеть так: {{ :en:toolworks:docs:apparatus-set-camera.png?nolink |}} +   - Результат преобразований: {{ :en:toolworks:docs:apparatus-set-camera.png?nolink |}} 
-   - Создадим новый 'GameMode' (или 'GameModeBase', - и тот и другой вариант приемлем) наследовавшись от 'MechanicalGameMode' (соответственно - 'MechanicalGameModeBase'), новый класс назовём 'BP_Mechanism'. Примерно так:{{ :en:toolworks:docs:apparatus-create-mechanism.png?nolink |}} +   - Создадим новый 'GameMode' (или 'GameModeBase', - и тот и другой вариант приемлем) наследовавшись от 'MechanicalGameMode' (соответственно - 'MechanicalGameModeBase'). Новый класс назовём 'BP_Mechanism'. Примерно так:{{ :en:toolworks:docs:apparatus-create-mechanism.png?nolink |}} 
-   - Открываем 'BP_Mechanism' в редакторе и в панели деталей установим 'Default pawn class' в 'BP_MainPawn'. Далее идём в настройки уровня: 'Blueprints'->'Project Settings : GameMode' и выбираем 'BP_Mechanism' в качестве главного GameMode'а проекта:{{ :en:toolworks:docs:apparatus-select-gamemode.png?nolink |}} +   - Откройте, пожалуйста, 'BP_Mechanism' в редакторе и в панели деталей установите 'Default pawn class' в 'BP_MainPawn'. Далее перейдём в настройки уровня: 'Blueprints'->'Project Settings : GameMode' и выберем 'BP_Mechanism' в качестве главного GameMode'а проекта:{{ :en:toolworks:docs:apparatus-select-gamemode.png?nolink |}} 
-   - Теперь, если запустить игру, можно видеть, что камера работает и "пешка" спавнится; но куб не двигается по нажатию на <key>a</key>, <key>d</key><key>w</key>. Исправим это. Для начала, находим 'BP_MainPawn' в редакторе BP и в списке Actor-компонентов выбираем 'SubjectiveActor', чтобы его свойства отобразились на панели деталей справа. В этой панели находим свойство 'Details' и к нему при помощи кнопочки ''+'' добавляем новые детали и выбираем их типы. Нам понадобятся два класса, как изображено на скриншоте:{{ :en:toolworks:docs:apparatus-details-list.png?nolink |}} +   - Теперь, если запустить игру, можно видеть, что камера работает и "пешка" спавнится; но куб не двигается по нажатию на <key>a</key>, <key>d</key> или <key>w</key>. Исправим это. Найдём 'BP_MainPawn' в редакторе BP и в списке Actor-компонентов выберем 'SubjectiveActor', чтобы его свойства отобразились на панели деталей справа. В этой панели находим свойство 'Details' и к нему при помощи кнопки ''+'' добавляем новые детали и выбираем их типы. Нам понадобятся два класса, как изображено на скриншоте:{{ :en:toolworks:docs:apparatus-details-list.png?nolink |}} 
-   - Теперь Вы видите, что добавлять и удалять детали можно очень просто через настройки Actorкомпонента, причём совершенно не важно, в каком порядке они добавлены, в каком порядке в списке отображаются. Вы также можете видеть открытые переменные деталей и менять их значения по умолчанию. Заметим, что если, например, изменить параметр 'Speed' в списке, его default-значение не будет изменено в классе 'BP_Moveable', потому как в списке представлены инстанциированные объекты класса... +   - Теперь Вы видите, что добавлять и удалять детали можно очень просто через настройки Actor компонента, причём совершенно не важно, в каком порядке они добавлены, в каком порядке в списке отображаются. Вы также можете видеть открытые переменные деталей и менять их значения по умолчанию. Заметим, что если, например, изменить параметр 'Speed' в списке, его default-значение не будет изменено в BP-редакторе 'BP_Moveable', потому как в списке представлены именно инстанциированные объекты класса деталиИзменим здесь значение Speed на ''500''
-   - As you see, you can easily add or remove details from the 'BP_MainPawn' actor component; it doesn't actually matter how they are exactly ordered. You're also able to see the variables of the details and change their default values. Note that if you change the value of the 'Speed' in the list, for example, it won't be changed in the 'BP_Moveableclass itself, because here in the list the instances of the detail classes are presented while in the Blueprint Editor of the 'BP_Moveable' class you can change the global default values for its properties. Change the speed right here in the list to 500+   Правильней было бы сделать это в контроллере, но для краткости сделаем это здесьБудучи в BP-редакторе пешки, перейдите в  Event-граф и добавьте события по нажатию клавиши, что мы настроили ранее (см. **шаг Начала работы с плагином**). Создадим также ноду 'Get SubjectiveActor' и вытащим из неё другие: в окне поиска функцийпожалуйста, найдите 'Add Detail' и в качестве типа детали выберете ''D_Moving''После этого вы можете видеть, что выходной тип функции сменился на ''D Moving Object Reference''Иначе говоря, после того, как деталь была добавлена к сущности, можно преобразовать её в переменную ('promote to variable') и использовать в своём коде для вызова её функций или доступа к полямВ нашем случае, мы обратимся к полю направления ('Direction') и установим соответствующие значения. **Не забудьте** установить флаги 'Reuse Disabled(о том, зачем они, - чуть позже). Полная картина должна быть примерно такой:{{ :en:toolworks:docs:apparatus-move-input.png?nolink |}} 
-   It's better to do so in Controller but for brevity let's do it hereBeing in the BP Editor of the 'BP_MainPawn' navigate to 'Event Graph' and add our input events we have declared previously (see **step of Implementation**). Create the node 'Get SubjectiveActor', drag from it new nodeswhich are 'Add detail' and in the Detail Type field choose 'D_Moving'After that you can see the returning type of each node currently is 'D Moving Object Reference'I.e. after the detail was added you can 'promote it to variable' and call functions from it or access variablesIn our case we will change the Direction variable to corresponding value. **Don't forget** to pin all of the Reuse Disabled checkboxes (We will talk later why you should do so).  The whole scheme now should look like so:{{ :en:toolworks:docs:apparatus-move-input.png?nolink |}} +   Всё, что нам осталось сделать, - это реализовать игровые механики в нашем 'GameMode'-еИтак, откроем редактор блупринтов 'BP_Mechanism'а и в графе нод удалим все событиякроме 'Event Tick'Для удобства преобразуем ''Delta Seconds'' в глобальную переменную ''GlobalDelta''Теперь нам необходимо интегрироваться по всем сущностям (Subject-ам) и для каждого проверятькакой набор деталей на нём естьДля этогопожалуйста, вытяните следующую ноду 'Sequence' и из её первого output-pin-а вытяните ноду 'Mechanic'.{{ :en:toolworks:docs:apparatus-evaluate.png?nolink |}} 
-   All we have to to do now is to implement the game mechanics in our GameMode. So open the BP Editor once again for the 'BP_Mechanism' and in the Graph viewdelete all of the nodes except for the 'Event Tick' nodePromote the ''Delta Seconds'' value to a global ''GlobalDelta'' variable mainly for convenience purposesNow we need to iterate over all of the subjects and for each of themcheck if it complies with our special caseSofor that drag the next node - 'Sequence', and from its first output drag the filament link and find the 'Mechanic' node.{{ :en:toolworks:docs:apparatus-evaluate.png?nolink |}} +   Как нетрудно видетьэта нода получает на вход тип 'Mechanical Interface' объекта 'self', чем и является наш 'BP_Mechanism'Эта нода выполняет обход всех сущностей с заданным набором включённых/отключённых деталейПустой набор означаетчто итерация будет выполнена по всем subject-ам на сценеВыход 'Evaluation Body' будет вызываться для каждой отдельной сущности, 'Completed' - когда все сущности проитерированыПожалуйста, нажмите правой кнопкой мыши по ноде, в контекстном меню вы найдёте 2 последних пункта (это 'Add Detail Pin' и 'Add Excluded Detail Pin')Можете понажимать эти пункты несколько рази вы увидите, как при каждом таком действии к ноде добавляются новые входы с заголовками ''.'' и ''!''. Используя эту технику и выбирая необходимые типы деталей в настройках нодывы определяете фильтр механики, задаёте множество сущностей, над которыми надо выполнить тот или иной код.{{ :en:toolworks:docs:apparatus-evaluate-full.png?nolink |}}Напримерпожалуйста, добавьте две ''.''-опции и удалите остальные (правой кнопкой мыши по пункту и клик по 'Remove Detail Pin'). Выберете соответствующие типы - ''D_Moveable'' and ''D_Moving''Преобразуйте выходное значение ''Moving'' в переменную ''TempMoving'', чтобы блупринт-чертёж не стал походить на макароныИз 'Subjective' выходного значения ноды 'Mechanic' вытянете 'Get Actor' pure-функцию ('Subjective' содержит ссылку на сущность, обрабатываемую в очередном вызове 'Evaluation body'; а функция 'Get Actor', также предоставляемая плагином, по сущности возвращает ссылку на объект Actor-а)Из выхода 'Get Actor' вытащите, пожалуйста, 'AddActorLocalOffset' стандартную функцию UE, а из ''Moving'' выхода ноды 'Mechanic''Direction' переменную, которую мы добавили в этот класс ранее. При помощи 'Select'-блока мы можем легко выбирать вектор смещения отвечающий входному направлению движения, полученному из поля деталиВ блоке, пожалуйста, разбейте 'Left' & 'Right' вектора по компонентам и заполните Y-компоненту случая 'Left' значением, полученным умножением переменной 'Speed' из детали 'Moveable' и глобальной переменной 'GlobalDelta'Для 'Right'-случая воспользуемся тем же значением, но взятым с обратным знакомПосле ноды 'AddActorLocalOffset' нужно деактивировать деталь 'TempMoving', чтобы наш куб не двигался в сторону бесконечно. Для этого достаточно изменить значение 'Enabled' детали на false. Граф должен получиться таким:{{ :en:toolworks:docs:apparatus-mechanism-moving-logic.png?nolink |}}Попробуем разобратьсячто же здесь происходитКак вы помнитемы прежде описали, как нажатие клавиш игроком отражается на нашей игровой логике (добавлением деталей ''D_Moving''). Здесь мы просто проходимся по всем сущностям с вышеупомянутыми ''D_Moving'' и ''D_Movable'' (в число которых входит только наша пешка) и для каждой такой сущности выполняем простые действияВ зависимости от направления мы сдвигаем Actor'а по Y-оси (если смотреть со стороны камерыэто как раз и будет направление влевоесли смещение положительное, и вправо, если отрицательное). После сдвига выполняется отключение детали ''D_Moving'', чтобы на следующем tick-е не обрабатывать пешку вновьКогда игрок нажмёт клавишу <key>d</key> или <key>a</key> во второй раз, произойдёт следующее: помните checkbox-сы, которые мы устанавливали ранее? 'Reuse Disabled' на самом деле означает, что в случае, если сущность имеет выключенную деталь одноимённого типа, то выключенная деталь активируется и возвращается как выходное значение функции 'Add detail'; вместо того, чтобы создавать и активировать новую, активируется и возвращается выключеннаяИтак, вы можете запустить игру и убедиться в том, что всё работаетИспользуйте клавиши <key>a</key> или <key>d</key>, чтобы перемещать куб по сцене
-   As you see'Mechanic' gets a 'Mechanical Interface' as its input 'self', which is in fact our 'BP_Mechanism' isThis node will iterate over all of the entities (subjects) with a specific set of details enabled/disabledAs how it is from the startsessentially all of the subjects which will comply with the empty requirements. 'Evaluation Body' pin gets executed for each complying subject. After all of complying subjects were processedthe 'Completed' pin gets executedRMB-click on the node and in the opened context menu you will see two last items with these titles: 'Add Detail Pin' and 'Add Excluded Detail Pin'You can click these items several times and see that each time you do soa new pin with a dot or exclamation mark is added to the nodeBy using this workflow and selecting the detail types in the added inputs you declare an evaluation filterfor the subjects to be processed in the mechanic. {{ :en:toolworks:docs:apparatus-evaluate-full.png?nolink |}} For exampleadd two including "dot"-pins to the node and delete all of the others (by RMB-clicking on them and selecting the 'Remove Detail Pin' option). Choose their types as Moveable and MovingPromote the 'Moving' detail to a 'TempMoving' variable - or you'll get yourself too much "noodles"From the 'Subjective' output pin drag a 'Get Actor' pure functionThat is also provided by Apparatus and returns the actor that is currently being processed. From this function's output drag a 'AddActorLocalOffset' node. From the 'D_Movingpin drag the 'Direction' variable and make 'Select' block to easily choose the corresponding vector depending on the direction currently active in the detail. 'Left and 'Right' cases are split into components and fill the Y-component of the left-side case with the 'Speed' variable obtained from the 'Moveable' detail and multiplicated by the 'GlobalDelta' variableFor the right-side case use the same value just with an opposite signBelow your 'AddActorLocalOffset' node place the deactivation of the 'TempMoving' detail be setting its state 'Enabled' to false. After all the above actions you should have something like that:{{ :en:toolworks:docs:apparatus-mechanism-moving-logic.png?nolink |}}What's actually going on here? As you may rememberwe defined how we determine our keyboard input at some previous stepHere we just move each actor with the pointed details over their local Y-axis (for the camera viewit's actually moving to the left if Y-axis is > 0 and moving to the right otherwise). So, depending on the direction we obtained from the 'Movingdetail we move an actor across the sceneAfter doing sowe disable the Moving detailso it won't be moving to the side anymoreGood. But what will happen when the player presses a <key>d</key> or a <key>a</key> key a second time? Do you remember the checkbox we pinnedThe 'Reuse Disabled' in fact means that if the 'Subjective' has a disabled detail then the function will enable it and return as its output instead of creating a new oneSo now you can run the game and check if it worksUse <key>a</key> <key>d</key> keys to move the box around+   После небольших изменений получаем возможность прыгать.{{ :en:toolworks:docs:apparatus-jump.png?nolink |}}Но коробка не падаетпотому что мы не реализовали отдельную для этого логику в механизмеДавайте сделаем это
-   Also make a few additional changes and you'll also be able to jump. {{ :en:toolworks:docs:apparatus-jump.png?nolink |}} But the box isn't falling at allbecause we haven't implemented the necessary logic in our MechanismSo let's do that+   Перейдём обратно в редактор 'BP_MainPawn' и добавим новый компонент ''BoxCollision'' к 'DefaultSceneRoot'Используем следующие transform-вектора:
-   Go back to 'BP_MainPawn' and a new 'BoxCollision' component to the 'DefaultSceneRoot'Use the following transform:+
       * Location: ''(X=0.000000,Y=0.000000,Z=-13.5)''       * Location: ''(X=0.000000,Y=0.000000,Z=-13.5)''
-      * Scale: ''(X=0.400000,Y=0.400000,Z=0.025000)''After that in the 'Collision' section select the 'OverlappAll' collision presetIn the 'BP_MainPawn' editor the picture should look like so:{{ :en:toolworks:docs:apparatus-box-collision.png?nolink |}} +      * Scale: ''(X=0.400000,Y=0.400000,Z=0.025000)''После этого в 'Collision' секции справа в панели деталей выберем 'OverlappAll' предустановкуКартина должна выглядеть так:{{ :en:toolworks:docs:apparatus-box-collision.png?nolink |}} 
-   Now navigate to the Graph and on 'BeginPlay' from 'SubjectiveActor' drag a 'Find Detail' function and set the bottom variable to the box of the pawn:{{ :en:toolworks:docs:apparatus-beginplay.png?nolink |}} We are now assured that our Subjective will have that detail but you should also understand the caseswhen the output value of the function should be checked out+   Пожалуйста, перейдите в Graph и по событию 'BeginPlay' используя компонент 'SubjectiveActor' добавьте функцию плагина 'Find Detail' и установите переменную 'Botton' детали ''D_Fallable'' так, чтобы она ссылалась на добавленную коллизию:{{ :en:toolworks:docs:apparatus-beginplay.png?nolink |}}Здесь мы уверенычто сущность будет иметь данную деталь, но вы должны понимать ситуации, когда выходное значение 'Find detail' должно быть проверено перед использованием
-   Navigate to the level mapselect 'Floor'->'StaticMeshActor' and inside its details panel find the property ‘Generate Overlap Events’ and also turn it on+   Перейдя в карту уровнявыберете пол ('Floor'-объект на сцене) и, пожалуйста, найдите настройки его компонента 'StaticMeshActor'. Среди свойств есть пункт ‘Generate Overlap Events’, который необходимо включить
-   In the BP Editor of 'BP_Mechanism' create the next logic block by dragging from the Sequence node to implement the actual falling on the floor:{{ :en:toolworks:docs:apparatus-falling.png?nolink |}} If the Subjective has a 'Fallabledetail enabled AND 'On Floordisabled and if itsbottom overlaps with any actor — then we add an 'OnFloordetail to itelse — continue to move it down (like it's falling)+   В BP-редакторе класса 'BP_Mechanism' создадим ещё немного логики, вытягивая из 'Sequence'-блока новую ноду 'Mechanic'; реализуем падение:{{ :en:toolworks:docs:apparatus-falling.png?nolink |}}Если сущность имеет деталь ''D_Fallable'' и одновременно деталь ''D_OnFloor'' выключена и вместе с тем дно коробки пересекается с некоторым Actor-омто мы устанавливаем деталь ''D_OnFloor'', если же дно коробки не пересекается - значит, текущую сущность нужно сдвинуть вниз, как бы симулируя равномерное падение
-   One last thing — to begin the falling process we need to disable the 'On Floordetail onсe the Pawn jumpsYou can do it this way:{{ :en:toolworks:docs:apparatus-end.png?nolink |}} If the 'Direction' is 'Up' then we disable the detail by using the Apparatus functionNow you can both jump and fallJust like in your real life, unless you're living on the moon or something. +   Последнее - чтобы начать процесс падения, нам надо выключить деталь ''D_OnFloor'', когда сущность прыгаетМожно это сделать так:{{ :en:toolworks:docs:apparatus-end.png?nolink |}}Если направление - Вверх, то мы выключаем деталь, опять же используя встроенную функцию плагинаТеперь можно и прыгать и падать
- +
-===== Results =====+
  
-Anyways, that's it for this tutorial and the result should look similar to: {{youtube>oVE1FRIq8A8?medium}}+===== Результат =====
  
-===== Conclusion =====+На этом всё, результат проделанной работы должен выглядеть примерно так: {{youtube>oVE1FRIq8A8?medium}} 
 +[[https://github.com/toolworks/ApparatusBeginnerGuide|Итоговый проект на github, ветка ApparatusLearn#1]]
  
-Apparatus is a really capable plugin for our beloved **UE**It provides us with a bunch of new programming principles and techniquesThose are usually called data-driven since we are more thinking detail-wise than class-wiseYou can use our innovative tool in your own game production pipeline and extend its capabilities even further by declaring and implementing your own C++ classesadhering to the necessary Apparatus interfaces.+===== Вывод ===== 
 +Apparatus - это очень удобный и многофункциональный плагин, даже больше чем плагин - это полноценный дата-ориентированный фреймворкОн предоставляет набор новых принципов разработки и техник проектированияЭти техники обычно называются data-driven, так как мы по большей части мыслим уже деталями, а не классами или наследованиемВы можете использовать наш инновационный инструмент в своих собственных разработках игр и расширять свои возможности, реализуя собственные классы C++, имплементирующие необходимые интерфейсы Apparatus.
  
-The vast functionality of this plugin can't be easily demonstrated on a tiny tutorial like this oneThe main purpose of this article is exactly to introduce the beginners to the ECS approach in general and Apparatus in particularCheck our the following links also and don't hesitate to ask any of your questions online on our [[https://talk.turbanov.ru/c/apparatus|TurboTalk forums]] and/or [[https://discord.gg/qN4aaJJY|Discord server]]. We are eager to help and your are more then welcome to ask all sorts of questions!+Все функциональное множество этого плагина не может быть продемонстрировано в столь коротком уроке, как этотОсновной же мотив туториала состоял именно в том, чтобы ввести новичка в мир ECS и Apparatus-а в частностиНе брезгайте проверить наши ссылки на другие ресурсы и смело задавайте возникшие вопросы в [[https://talk.turbanov.ru/c/apparatus|TurboTalk-форуме]] и/или в [[https://discord.gg/qN4aaJJY|Discord-чате]]. Мы обеими руками за обратную связь, готовы давать своевременную поддержку и приветствуем заинтересованность любого характера!
  
-==== Links ====+==== Ссылки ====
  
-  * [[https://github.com/Prikalel/ApparatusLearn|The resulting project on GitHub]] +  * [[https://github.com/toolworks/ApparatusPlatformer|Более сложный проект на GitHub]]
-  * [[https://github.com/toolworks/ApparatusPlatformer|A more complex sample on GitHub]]+
   * [[https://turbanov.ru/toolworks/apparatus/docs/api/index.html|Online API Reference]]   * [[https://turbanov.ru/toolworks/apparatus/docs/api/index.html|Online API Reference]]
  
  • ru/toolworks/docs/apparatus/beginner.1618478127.txt.gz
  • Последнее изменение: 2021/04/15 12:15
  • jispar