SlideShare a Scribd company logo
Luis Cataldi - Education Evangelist – Epic Games
Создаём с нуля VR
Project, VR Pawn и VR
Player Controller!
2
Создайте новый Блупринт и выберите Pawn Class
➔ На свободном месте в
content browser кликните
правой кнопкой мыши и
выберите Create Basic
Asset > Blueprint Class
➔ Теперь назовите его,
например “MyVR-Pawn”
3
Ознакомьтесь со множеством различных настроек Blueprint editor
➔ Components
➔ Menu Bar
➔ Details
➔ Viewport
➔ Construction Script
➔ Graph Editor
➔ My Blueprint: Variables,
Functions, Components
➔ Debug
➔ Compiler Results
4
Начинаем работать с VR-Pawn
➔ Добавьте Camera
Component
➔ Нажмите Compile и Save
5
Обновлённые камеры автоматически закрепляются к HMDs
(шлему виртуальной реальности)
➔ Обновлённые camera
components отныне
автоматически
закрепляются к
поддерживаемому HMDs
➔ В UE 4.13 управление
камерой в VR не требует
выполнения
дополнительных действий
6
Откройте World Settings из меню настроек (Settings menu)
➔ Выберите World Settings из
выпадающего списка в
настройках (Settings menu)
➔ Справа от вкладки Details
появится новая вкладка
World Settings. В ней будет
находиться несколько под-
меню, включая Game Mode
и Gamemode Overrides
7
Создайте новый GameMode Override
➔ Для создания нового
override кликните + справа
от GameMode Override
➔ Назовите GameMode
Override, например,
MyVRGameMode
➔ Теперь его можно
сохранить в папку Blueprints
8
Назначьте ваш MyVRPawn к Default Pawn Class
➔ Выберите Default Pawn
Class и назначьте в него
только что созданный
MyVRPawn Blueprint
9
Создайте PlayerController Class Blueprint в меню GameMode Override
➔ Для создания нового override
кликните + справа от Player
Controller Class
➔ Назовите PlayerController
Override, например,
MyVRPlayerController
➔ Теперь его также можно
сохранить в папку Blueprints
10
Перейдите во вкладку Event Graph в вашем новом MyVRPlayerController
➔ Как только новый
MyVRPlayerController
Blueprint будет создан, он
сразу откроется в новом
окне и будет доступен для
редактирования
➔ Выберите третью по счёту
вкладку, которая называется
Event Graph
11
Перейдите в Project Settings для создания новых инпутов (imputs)
➔ Здесь в разделе Input section,
мы можем добавить новые
Axis Mappings и Action
Mapping, которые и будут
нашими инпутами
12
Создайте 2 новых Action Mappings
➔ Создайте MyGlide Action
Mapping и назначьте для него
Middle Mouse Button (Средняя
кнопка мыши)
➔ Создайте MyInteraction Action
Mapping и назначьте для него
Right Mouse Button (правую
кнопку мыши)
Вернитесь к MyVRPlayerController и создайте MyGlide Linetrace Blueprint
➔ Во вкладке EventGraph в
MyVRPlayerController, кликните
правой кнопкой мыши и
добавьте InputAxis для Glide
➔ Добавьте (Get) Player Camera
Manager
➔ Вытяните GetActorLocation
➔ Вытяните GetActorFowardVector
➔ Умножьте (Multiply) Float x Float
из GetActorForwardVector и
поставьте значение, например,
10000 units в нижний float
➔ Создайте LineTraceByChannel
➔ Соедините его с ExecutionPin из
MyGlide InputAxis
➔ Соедините Start и
GetActorLocation
➔ Соедините End с суммой
(Addition) GetActorLocation и
умноженного значения (multiply
node)
14
Создайте 2 новые переменные (Variables) с типом Vector
➔ Создайте переменную
StartTrace Vector
➔ Создайте переменную
EndTrace Vector
15
Вытяните EndTrace чтобы его засетить (Set)
➔ Выберите и вытяните
переменную EndTrace в Event
Graph и выберите Create Setter
(Set)
16
Подключите EndTrace
➔ Соедините Execution Pin из
Line Trace с EndTrace
➔ Вытяните Trace End vector из
Break Hit Result в инпут
EndTrace для того, чтобы
установить его значение
17
Установите (Set) StartTrace
➔ Выберите и вытяните
переменную StartTrace в Event
Graph и выберите Create Setter
(Set)
18
Соедините Set StartTrace с Actor Location
➔ Кликните правой кнопкой
мыши чтобы вызвать функцию
GetPlayerPawn
➔ Протяните из Return Value для
создания функции
GetActorLocation node
➔ Соедините вновь созданную
функцию с инпутом (input)
вектора StartTrace Vector,
чтобы передать в него нужное
значение
19
Соедините BreakHitResult с EndTrace
➔ Соедините Set End Trace с Set
Start Trace
➔ Вызовите функцию
GetPlayerPawn, соедините её с
функцией GetActorLocation,
которую, в свою очередь, уже
подключите к StartTrace
20
Создайте Timeline и назовите его, к примеру, MyGlideCruve
➔ Создайте FloatCurve и назовите
её, к примеру, GlideFloat
➔ Добавьте 2 Ключа (Keys)
➔ Первый Ключ (Key) установите в
значения 0 и 0
➔ Второй Ключ (Key) установите в
значения, к примеру, .9 и .9
➔ Установите флажок в чекбокс Use
Last Keyframe
Используйте Timeline Component для получения функции SetPlayRate, с помощью
которой можно будет регулировать скорость передвижения
➔ Подключите функцию SetPlayRate
к StartTrace
➔ Разделите значение NewRate на 1
для нормализации значения
➔ Создайте новую Переменную
RateOfGlide и установите в неё,
для начала, значение 20
➔ Соедините output функции
SetPlayRate с инпутом Play from
Start в MyGlideCurve’s
Добавьте Lerp (Vector) для более плавного передвижения
➔ Протянув из GlideFloat в
MyGlideCurve’s вы сможете создать
Lerp (Vector). Соедините его с
инпутом Alpha
➔ Соедините output EndTrace с
инпутом B в Lerp (Vector)
➔ Соедините output StartTrace с
инпутом A в Lerp (Vector)
➔ Протянув из ReturnValue (Lerp
(Vector)) создайте функцию
SetActorLocation. Соедините его с
NewLocation, чтобы игрок мог понять
куда и как ему передвигаться
Используйте колёсико мыши для определения glide distance (расстояния скольжения)
➔ Создайте новый инпут Axis
Mapping и назовите его
MyTraceDistance
➔ Назначьте на него
MouseWheelAxis
Вернитесь в MyVRPlayerController
➔ Создайте новую переменную с
типом Float и назовите её
MouseWheelAxis
Вернитесь в SetPlayRate для работы с MyGlideCurve
➔ MouseWheelAxis разделите на 500
и умножьте (Multiply) RateOfGlide
➔ Это позволит вам управлять
дистанцией трейса с помощь
колёсика мыши
➔ ** Убедитесь в том, что вы вернули
значение RateOfGlide в 5 вместо
20
Используйте MouseWheelAxis, чтобы определить дистанцию трейса для line trace
➔ Вернитесь к функции
LineTraceByChannel и замените
установленной там по умолчанию
значение 10000 на переменную
флоат MouseWheelAxis, чтобы
регулировать дистанцию, на
которую игрок будет
перемещаться за каждый клик
Давайте создадим preview mesh, что бы можно было определить конец нашего line trace
Давайте создадим новый Actor Class Blueprint
➔ Создайте новый Actor Class
Blueprint в папке с блупринтами
(Blueprints folder)
➔ Назовите его, к примеру,
MyPreviewMesh-BP
Добавьте в него mesh component
➔ В выпадающем списке +Add
Component найдите и выберите
компонент Sphere (Basic Shape) и
добавьте его к MyPreviewMesh-BP
➔ Назовите его, к примеру,
PreviewMesh
Давайте создадим новый материал для нашего preview mesh
➔ В папке Blueprints folder кликните
правой кнопкой мыши и создайте
новый Basic Asset > Material
➔ Назовите его MyPreview-MAT
Установите базовый материал
➔ Измените Blend Mode на >
Translucent
➔ Измените Shading Model на >
Unlit
Создайте Emissive Color (излучающий цвет)
➔ Создайте Vector3
➔ Измените цвет на 1,1,1 белый
(white)
➔ Конвертируйте его в Параметр под
названием BaseColor
➔ Соедините его с инпутом А функции
умножения (Multiply)
➔ Добавьте Parameter Node и
назовите её GlowPower
➔ Соедините её с инпутом B функции
умножения (Multiply)
➔ Соедините функцию умножения с
каналом Emissive Color в материале
Настройка прозрачности (Opacity)
➔ Соедините Power node с каналом
Opacity в материале
➔ Подключите Fresnel Node в Base
(Power Node)
➔ Создайте функцию Scalar
Parameter с названием Fresnel
Power и присоедините её к
Exponent в Fresnel Node
➔ Сохраните и примените материал
(Save and apply the material)
Давайте создадим новый материал инстанс для нашего preview mesh
➔ Найдите в контент браузере
MyPreview-MAT. Кликните по нему
ПКМ и выберите Create Material
Instance
Давайте создадим новый материал инстанс для нашего preview mesh
➔ Выбрав MyPreview-Mat_Inst вы
можете изменить ряд параметров.
Назначьте новый Material Instance к вашему preview mesh
➔ Выберите Сферу (Sphere Mesh
component)
➔ Назначьте Material Instance к
материалу to the Material в слот
Element 0 кликнув на стрелочку
(assign arrow)
Теперь вернитесь в MyVRPlayerController, пришло время спавнить (spawn) вашу
preview sphere
➔ Для начала, мы можем
полностью скопировать
первую часть нашего MyGlide
linetrace Blueprint
Давайте подключим Tick event, чтобы запустить line trace
➔ Создайте Event Tick и
подключите его ко входу в
lineTrace
Теперь заспавним (Spawn) Preview Mesh Blueprint
➔ Кликните правой кнопкой
мыши и создайте Event
BeginPlay
➔ Протяните из него и создайте
SpawnActor of Class
➔ В выпадающем списке Класса
(Class dropdown), найдите ваш
MyPreviewMesh-BP
Добавьте к SpawnActor новый трансформ (New Transform)
➔ Соедините Trace End из Break
Hit Result с Spawn Transform в
функции SpawnActor
➔ Не переживайте если
создастся новая функция
(Сonvert) для того, чтобы
учесть преобразование Vector
в Transform
Преобразуйте (Promote) значение ReturnValue (SpawnActor)
➔ Преобразуйте (Promote)
значение RetunValue в
SpawnActor в Переменную и
назовите её MyPreviewSphere
➔ Это добавит ссылку на неё в
вашем списке переменных
(Variables List)
Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её
столкновении с поверхностью
➔ Кликните на + Function key для
создания новой функции
➔ Назовите её SphereColor-F
Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её
столкновении с поверхностью
➔ Добавьте ссылку
MyPreviewSphere
➔ Потяните из MyPreviewSphere
и начните набирать “dynamic”
для создания
DynamicMaterialInstance
Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её
столкновении с поверхностью
➔ Назначьте MyPreview-
MAT_Instance в Source Material
Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её
столкновении с поверхностью
➔ Потяните из ReturnValue и
создайте
SetVectorParameterValue
Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её
столкновении с поверхностью
➔ В Parameter Name впишите
BaseColor
➔ Создайте (Promote to Variable)
новую переменную NewColor
➔ Compile and Save
Теперь давайте закончим работу с Preview Graph
➔ Создайте Branch Node,
потянув из execution pin
LineTrace
➔ Соедините Blocking Hit из
BreakHitResult с Condition
➔ Из аутпута True вызовите
SphereColor-F Function и
установите цвет NewColor в
синий с помощью Set
NewColor Node
➔ Сделайте тоже самое для
False, установив жёлтый цвет
Теперь давайте закончим работу с Preview Graph
➔ Создайте Branch Node,
потянув из execution pin
LineTrace
➔ Соедините Blocking Hit из
BreakHitResult с Condition
➔ Из аутпута True вызовите
SphereColor-F Function и
установите цвет NewColor в
синий с помощью Set
NewColor Node
➔ Сделайте тоже самое для
False, установив жёлтый цвет
Теперь давайте закончим работу с Preview Graph
➔ Создайте новую переменную
SurfaceNormal из Location в
BreakHitResult при помощи
Promote to Variable
Теперь давайте закончим работу с Preview Graph
➔ Перетяните назначение (Set)
новой переменной в конец
выполнения True (после
назначения синего цвета)
Теперь давайте закончим работу с Preview Graph
➔ Создайте новую переменную
TraceEnd из Trace End в
BreakHitResult при помощи
Promote to Variable
➔ Как и в прошлый раз,
перетяните назначение (Set)
новой переменной в конец
выполнения False (после
назначения жёлтого цвета)
Теперь давайте закончим работу с Preview Graph
➔ Создайте SetActorLocation
потянув из MyPreviewSphere
➔ Соедините Set SurfaceNormal с
SetActorLocation и в значение
NewLocation передайте
SurfaceNormal
➔ Сделайте тоже самое ещё раз
для ноды Set TraceEnd
А теперь добавим интерактивности нашим механикам
Давайте построим interaction graph
➔ Еще раз скопируйте первую
часть из графа linetrace и
вставьте её ниже
Давайте построим interaction graph (всё ещё в MyVRPlayerController)
➔ Создайте InputAction для
MyInteraction, который мы
создали в разделе инпутов в
настройках проекта (Input
section of the Project Settings)
➔ Соедините Pressed c инпутом
скопированного LineTrace
Создаём новый Blueprint Interface
➔ В папке с блупринтами
кликните ПКМ и в разделе
Blueprints выберите Blueprint
Interface
➔ Назовите его MyInteract-BPI
Создаём новый Blueprint Interface
➔ Blueprint Interface позволит
вам создавать новые Функции
➔ Создайте новую функцию
LookingAt
➔ Вы можете добавлять инпуты
и аутпуты (Inputs and Outputs),
но пока обойдёмся без этого
➔ Compile and Save
Возвращаемся к MyVRPlayerController
➔ Для создания функции IsValid
со знаком ? Потяните из
BreakHitResult > HitActor
Возвращаемся к MyVRPlayerController
➔ Чтобы добавить LookingAt
потяните из HitActor снова и
наберите название вашего
Blueprint Interface - MyInteract-
BPI
➔ Соедините его с аутпутом ? Is
valid, который в свою очередь
соединён с LineTrace
➔ Compile and Save
Давайте создадим интерактивный элемент
Настроим Включение и Выключение вращения лопастей вентилятора с помощью sight
based interaction
➔ Если вы переместитесь к той
части локации, где находятся
вентиляторы, то увидите, что они
уже контролируются
Блупринтами
➔ Мы можем заменить
существующие Блупринты на
новые, которые добавят
взаимодействие с нашим line
trace
➔ Откройте существующий
Блупринт, чтобы найти ссылку на
тот меш, который используется в
данной сцене
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Создайте новый Actor Class
Blueprint в папке Blueprints
➔ Назовите его MyVRFan-BP
➔ Откройте его для
редактирования
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Добавьте Static Mesh
Component вентилятора в
Блупринт
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Добавьте Rotating Movement
Component в Блупринт
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Выбрав Rotating Movement
Component, установите новое
значение Rotation Rate X,
например 450
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Теперь отключите AutoActive
(снимите галочку) для того,
чтобы вентилятор не
включался автоматически, а
только после выполнения
определённых действий
игроком
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Кликните на кнопку Class
Settings в верхней панели для
того, чтобы перейти к его
настройкам (Class Settings)
➔ В Details Panel, в разделе
Interfaces, воспользуйтесь
кнопкой Add для назначения
MyInteract-BPI Blueprint как
вашего нового BP interface
➔ Обязательно Compile and Save
после этого, чтобы применить
ваш новый BP Interface
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Как только мы применили наш
новый BP Interface, мы можем
кликнуть в нём правой кнопкой
мыши и получить доступ к
Event LookAt-BPI
➔ Это создаст Событие (Event),
которое мы сможем соединить
с ToggleActive для активации
RotatingMovement нашего
вентилятора (Component of the
Fan Mesh)
➔ Compile and Save
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Убедитесь в том, что на
объектах, которые окружают
наш вентилятор нет коллизий,
чтобы дать возможность
взаимодействовать с ним
Настроим Включение и Выключение вращения лопастей вентилятора
➔ Для замены Блупринта, выберите
Actor в сцене, кликните по нему
ПКМ для вызова меню. В
появившемся меню выберите
Replace Selected Actors with
➔ Убедитесь в том, что в контент
браузере выделен необходимый
Блупринт
➔ Save All
➔ Теперь MyVRFan-BP размещён в
нужном месте и вы можете с ним
взаимодействовать. Для этого
направьте Preview Sphere на него
используя ПКМ
71
VR с помощью Unreal Engine это круто.
Ознакомьтесь с UE4 VR learning resouces
для получения более исчерпывающей
информации.
luis.cataldi@epicgames.com

More Related Content

PDF
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
PPTX
MVP, Moxy. Как правильно пользоваться
PPT
Moxy – реализация MVP под Android. С щепоткой магии
PPTX
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
PDF
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
PDF
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
PDF
C# Web. Занятие 11.
PPT
Moxy. Из чего состоит и как этим пользоваться
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
MVP, Moxy. Как правильно пользоваться
Moxy – реализация MVP под Android. С щепоткой магии
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
C# Web. Занятие 11.
Moxy. Из чего состоит и как этим пользоваться

Viewers also liked (17)

PPTX
Making VR Games and Experiences in UE4
PPTX
Making VR with Unreal Engine Luis Cataldi
PPTX
White nights intro to vr with unreal engine - luis cataldi-Russian
PPTX
Teaching UE4 With Quest Based Learning Dr Cynthia Marcello
PPTX
Intro to VR with Unreal Engine
PPTX
On Ramp to Unreal Engine
PPTX
Romero Blueprint Compendium
PDF
Behavior Tree in Unreal engine 4
PDF
Game Boy
PPTX
"Potencialidades educativas de la Realidad Virtual (VR) inmersiva". CITIE 2016
PPTX
VRセミナー講演資料20161119
PPTX
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
PDF
Rendering AAA-Quality Characters of Project A1
PPTX
Optimizing the Graphics Pipeline with Compute, GDC 2016
PPT
EvolucióN De Los Motores GráFicos
ODP
Ferran calpe b4_lag
PPTX
Realidad Virtual (VR) Inmersiva en los procesos de Formación corporativa
Making VR Games and Experiences in UE4
Making VR with Unreal Engine Luis Cataldi
White nights intro to vr with unreal engine - luis cataldi-Russian
Teaching UE4 With Quest Based Learning Dr Cynthia Marcello
Intro to VR with Unreal Engine
On Ramp to Unreal Engine
Romero Blueprint Compendium
Behavior Tree in Unreal engine 4
Game Boy
"Potencialidades educativas de la Realidad Virtual (VR) inmersiva". CITIE 2016
VRセミナー講演資料20161119
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
Rendering AAA-Quality Characters of Project A1
Optimizing the Graphics Pipeline with Compute, GDC 2016
EvolucióN De Los Motores GráFicos
Ferran calpe b4_lag
Realidad Virtual (VR) Inmersiva en los procesos de Formación corporativa
Ad

Similar to Build a VR Pawn with Unreal Engine Luis Cataldi Russian (20)

PDF
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
PDF
Краткое руководство FlyView
PDF
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
PPT
Где кончается react native? / Павел Кондратенко (Rambler&Co)
PDF
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
PPT
трасировка Mpi приложений
DOCX
PowerShell Web Access Руководство по использованию
PDF
Отладка с использованием Intelli Trace в Visual Studio Ultimate 2012
DOCX
10 задач администрирования Active directory, решаемых с помощью power shell
DOCX
пр 14.docx
DOCX
Enterprise flex pure mvc.v4
PPTX
Быть в 10 раз эффективнее благодаря Groovy
DOCX
Решаем 9 задач управления Windows Server 2008 с помощью PowerShell
PDF
AndroidMVPHelper
DOCX
Руководство по управлению службами WIindows с помощью PowerShell
PDF
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
PDF
Разработай первое приложение Qlik Sense
PPT
урок2 применение специальных эффектов и ссылок
PPT
обучение работе с программой Av editor
PPT
Всеволод Шмыров, Яндекс
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
Краткое руководство FlyView
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
трасировка Mpi приложений
PowerShell Web Access Руководство по использованию
Отладка с использованием Intelli Trace в Visual Studio Ultimate 2012
10 задач администрирования Active directory, решаемых с помощью power shell
пр 14.docx
Enterprise flex pure mvc.v4
Быть в 10 раз эффективнее благодаря Groovy
Решаем 9 задач управления Windows Server 2008 с помощью PowerShell
AndroidMVPHelper
Руководство по управлению службами WIindows с помощью PowerShell
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Разработай первое приложение Qlik Sense
урок2 применение специальных эффектов и ссылок
обучение работе с программой Av editor
Всеволод Шмыров, Яндекс
Ad

Build a VR Pawn with Unreal Engine Luis Cataldi Russian

  • 1. Luis Cataldi - Education Evangelist – Epic Games Создаём с нуля VR Project, VR Pawn и VR Player Controller!
  • 2. 2 Создайте новый Блупринт и выберите Pawn Class ➔ На свободном месте в content browser кликните правой кнопкой мыши и выберите Create Basic Asset > Blueprint Class ➔ Теперь назовите его, например “MyVR-Pawn”
  • 3. 3 Ознакомьтесь со множеством различных настроек Blueprint editor ➔ Components ➔ Menu Bar ➔ Details ➔ Viewport ➔ Construction Script ➔ Graph Editor ➔ My Blueprint: Variables, Functions, Components ➔ Debug ➔ Compiler Results
  • 4. 4 Начинаем работать с VR-Pawn ➔ Добавьте Camera Component ➔ Нажмите Compile и Save
  • 5. 5 Обновлённые камеры автоматически закрепляются к HMDs (шлему виртуальной реальности) ➔ Обновлённые camera components отныне автоматически закрепляются к поддерживаемому HMDs ➔ В UE 4.13 управление камерой в VR не требует выполнения дополнительных действий
  • 6. 6 Откройте World Settings из меню настроек (Settings menu) ➔ Выберите World Settings из выпадающего списка в настройках (Settings menu) ➔ Справа от вкладки Details появится новая вкладка World Settings. В ней будет находиться несколько под- меню, включая Game Mode и Gamemode Overrides
  • 7. 7 Создайте новый GameMode Override ➔ Для создания нового override кликните + справа от GameMode Override ➔ Назовите GameMode Override, например, MyVRGameMode ➔ Теперь его можно сохранить в папку Blueprints
  • 8. 8 Назначьте ваш MyVRPawn к Default Pawn Class ➔ Выберите Default Pawn Class и назначьте в него только что созданный MyVRPawn Blueprint
  • 9. 9 Создайте PlayerController Class Blueprint в меню GameMode Override ➔ Для создания нового override кликните + справа от Player Controller Class ➔ Назовите PlayerController Override, например, MyVRPlayerController ➔ Теперь его также можно сохранить в папку Blueprints
  • 10. 10 Перейдите во вкладку Event Graph в вашем новом MyVRPlayerController ➔ Как только новый MyVRPlayerController Blueprint будет создан, он сразу откроется в новом окне и будет доступен для редактирования ➔ Выберите третью по счёту вкладку, которая называется Event Graph
  • 11. 11 Перейдите в Project Settings для создания новых инпутов (imputs) ➔ Здесь в разделе Input section, мы можем добавить новые Axis Mappings и Action Mapping, которые и будут нашими инпутами
  • 12. 12 Создайте 2 новых Action Mappings ➔ Создайте MyGlide Action Mapping и назначьте для него Middle Mouse Button (Средняя кнопка мыши) ➔ Создайте MyInteraction Action Mapping и назначьте для него Right Mouse Button (правую кнопку мыши)
  • 13. Вернитесь к MyVRPlayerController и создайте MyGlide Linetrace Blueprint ➔ Во вкладке EventGraph в MyVRPlayerController, кликните правой кнопкой мыши и добавьте InputAxis для Glide ➔ Добавьте (Get) Player Camera Manager ➔ Вытяните GetActorLocation ➔ Вытяните GetActorFowardVector ➔ Умножьте (Multiply) Float x Float из GetActorForwardVector и поставьте значение, например, 10000 units в нижний float ➔ Создайте LineTraceByChannel ➔ Соедините его с ExecutionPin из MyGlide InputAxis ➔ Соедините Start и GetActorLocation ➔ Соедините End с суммой (Addition) GetActorLocation и умноженного значения (multiply node)
  • 14. 14 Создайте 2 новые переменные (Variables) с типом Vector ➔ Создайте переменную StartTrace Vector ➔ Создайте переменную EndTrace Vector
  • 15. 15 Вытяните EndTrace чтобы его засетить (Set) ➔ Выберите и вытяните переменную EndTrace в Event Graph и выберите Create Setter (Set)
  • 16. 16 Подключите EndTrace ➔ Соедините Execution Pin из Line Trace с EndTrace ➔ Вытяните Trace End vector из Break Hit Result в инпут EndTrace для того, чтобы установить его значение
  • 17. 17 Установите (Set) StartTrace ➔ Выберите и вытяните переменную StartTrace в Event Graph и выберите Create Setter (Set)
  • 18. 18 Соедините Set StartTrace с Actor Location ➔ Кликните правой кнопкой мыши чтобы вызвать функцию GetPlayerPawn ➔ Протяните из Return Value для создания функции GetActorLocation node ➔ Соедините вновь созданную функцию с инпутом (input) вектора StartTrace Vector, чтобы передать в него нужное значение
  • 19. 19 Соедините BreakHitResult с EndTrace ➔ Соедините Set End Trace с Set Start Trace ➔ Вызовите функцию GetPlayerPawn, соедините её с функцией GetActorLocation, которую, в свою очередь, уже подключите к StartTrace
  • 20. 20 Создайте Timeline и назовите его, к примеру, MyGlideCruve ➔ Создайте FloatCurve и назовите её, к примеру, GlideFloat ➔ Добавьте 2 Ключа (Keys) ➔ Первый Ключ (Key) установите в значения 0 и 0 ➔ Второй Ключ (Key) установите в значения, к примеру, .9 и .9 ➔ Установите флажок в чекбокс Use Last Keyframe
  • 21. Используйте Timeline Component для получения функции SetPlayRate, с помощью которой можно будет регулировать скорость передвижения ➔ Подключите функцию SetPlayRate к StartTrace ➔ Разделите значение NewRate на 1 для нормализации значения ➔ Создайте новую Переменную RateOfGlide и установите в неё, для начала, значение 20 ➔ Соедините output функции SetPlayRate с инпутом Play from Start в MyGlideCurve’s
  • 22. Добавьте Lerp (Vector) для более плавного передвижения ➔ Протянув из GlideFloat в MyGlideCurve’s вы сможете создать Lerp (Vector). Соедините его с инпутом Alpha ➔ Соедините output EndTrace с инпутом B в Lerp (Vector) ➔ Соедините output StartTrace с инпутом A в Lerp (Vector) ➔ Протянув из ReturnValue (Lerp (Vector)) создайте функцию SetActorLocation. Соедините его с NewLocation, чтобы игрок мог понять куда и как ему передвигаться
  • 23. Используйте колёсико мыши для определения glide distance (расстояния скольжения) ➔ Создайте новый инпут Axis Mapping и назовите его MyTraceDistance ➔ Назначьте на него MouseWheelAxis
  • 24. Вернитесь в MyVRPlayerController ➔ Создайте новую переменную с типом Float и назовите её MouseWheelAxis
  • 25. Вернитесь в SetPlayRate для работы с MyGlideCurve ➔ MouseWheelAxis разделите на 500 и умножьте (Multiply) RateOfGlide ➔ Это позволит вам управлять дистанцией трейса с помощь колёсика мыши ➔ ** Убедитесь в том, что вы вернули значение RateOfGlide в 5 вместо 20
  • 26. Используйте MouseWheelAxis, чтобы определить дистанцию трейса для line trace ➔ Вернитесь к функции LineTraceByChannel и замените установленной там по умолчанию значение 10000 на переменную флоат MouseWheelAxis, чтобы регулировать дистанцию, на которую игрок будет перемещаться за каждый клик
  • 27. Давайте создадим preview mesh, что бы можно было определить конец нашего line trace
  • 28. Давайте создадим новый Actor Class Blueprint ➔ Создайте новый Actor Class Blueprint в папке с блупринтами (Blueprints folder) ➔ Назовите его, к примеру, MyPreviewMesh-BP
  • 29. Добавьте в него mesh component ➔ В выпадающем списке +Add Component найдите и выберите компонент Sphere (Basic Shape) и добавьте его к MyPreviewMesh-BP ➔ Назовите его, к примеру, PreviewMesh
  • 30. Давайте создадим новый материал для нашего preview mesh ➔ В папке Blueprints folder кликните правой кнопкой мыши и создайте новый Basic Asset > Material ➔ Назовите его MyPreview-MAT
  • 31. Установите базовый материал ➔ Измените Blend Mode на > Translucent ➔ Измените Shading Model на > Unlit
  • 32. Создайте Emissive Color (излучающий цвет) ➔ Создайте Vector3 ➔ Измените цвет на 1,1,1 белый (white) ➔ Конвертируйте его в Параметр под названием BaseColor ➔ Соедините его с инпутом А функции умножения (Multiply) ➔ Добавьте Parameter Node и назовите её GlowPower ➔ Соедините её с инпутом B функции умножения (Multiply) ➔ Соедините функцию умножения с каналом Emissive Color в материале
  • 33. Настройка прозрачности (Opacity) ➔ Соедините Power node с каналом Opacity в материале ➔ Подключите Fresnel Node в Base (Power Node) ➔ Создайте функцию Scalar Parameter с названием Fresnel Power и присоедините её к Exponent в Fresnel Node ➔ Сохраните и примените материал (Save and apply the material)
  • 34. Давайте создадим новый материал инстанс для нашего preview mesh ➔ Найдите в контент браузере MyPreview-MAT. Кликните по нему ПКМ и выберите Create Material Instance
  • 35. Давайте создадим новый материал инстанс для нашего preview mesh ➔ Выбрав MyPreview-Mat_Inst вы можете изменить ряд параметров.
  • 36. Назначьте новый Material Instance к вашему preview mesh ➔ Выберите Сферу (Sphere Mesh component) ➔ Назначьте Material Instance к материалу to the Material в слот Element 0 кликнув на стрелочку (assign arrow)
  • 37. Теперь вернитесь в MyVRPlayerController, пришло время спавнить (spawn) вашу preview sphere ➔ Для начала, мы можем полностью скопировать первую часть нашего MyGlide linetrace Blueprint
  • 38. Давайте подключим Tick event, чтобы запустить line trace ➔ Создайте Event Tick и подключите его ко входу в lineTrace
  • 39. Теперь заспавним (Spawn) Preview Mesh Blueprint ➔ Кликните правой кнопкой мыши и создайте Event BeginPlay ➔ Протяните из него и создайте SpawnActor of Class ➔ В выпадающем списке Класса (Class dropdown), найдите ваш MyPreviewMesh-BP
  • 40. Добавьте к SpawnActor новый трансформ (New Transform) ➔ Соедините Trace End из Break Hit Result с Spawn Transform в функции SpawnActor ➔ Не переживайте если создастся новая функция (Сonvert) для того, чтобы учесть преобразование Vector в Transform
  • 41. Преобразуйте (Promote) значение ReturnValue (SpawnActor) ➔ Преобразуйте (Promote) значение RetunValue в SpawnActor в Переменную и назовите её MyPreviewSphere ➔ Это добавит ссылку на неё в вашем списке переменных (Variables List)
  • 42. Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её столкновении с поверхностью ➔ Кликните на + Function key для создания новой функции ➔ Назовите её SphereColor-F
  • 43. Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её столкновении с поверхностью ➔ Добавьте ссылку MyPreviewSphere ➔ Потяните из MyPreviewSphere и начните набирать “dynamic” для создания DynamicMaterialInstance
  • 44. Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её столкновении с поверхностью ➔ Назначьте MyPreview- MAT_Instance в Source Material
  • 45. Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её столкновении с поверхностью ➔ Потяните из ReturnValue и создайте SetVectorParameterValue
  • 46. Теперь давайте создадим Функцию, которая будет изменять цвет Сферы при её столкновении с поверхностью ➔ В Parameter Name впишите BaseColor ➔ Создайте (Promote to Variable) новую переменную NewColor ➔ Compile and Save
  • 47. Теперь давайте закончим работу с Preview Graph ➔ Создайте Branch Node, потянув из execution pin LineTrace ➔ Соедините Blocking Hit из BreakHitResult с Condition ➔ Из аутпута True вызовите SphereColor-F Function и установите цвет NewColor в синий с помощью Set NewColor Node ➔ Сделайте тоже самое для False, установив жёлтый цвет
  • 48. Теперь давайте закончим работу с Preview Graph ➔ Создайте Branch Node, потянув из execution pin LineTrace ➔ Соедините Blocking Hit из BreakHitResult с Condition ➔ Из аутпута True вызовите SphereColor-F Function и установите цвет NewColor в синий с помощью Set NewColor Node ➔ Сделайте тоже самое для False, установив жёлтый цвет
  • 49. Теперь давайте закончим работу с Preview Graph ➔ Создайте новую переменную SurfaceNormal из Location в BreakHitResult при помощи Promote to Variable
  • 50. Теперь давайте закончим работу с Preview Graph ➔ Перетяните назначение (Set) новой переменной в конец выполнения True (после назначения синего цвета)
  • 51. Теперь давайте закончим работу с Preview Graph ➔ Создайте новую переменную TraceEnd из Trace End в BreakHitResult при помощи Promote to Variable ➔ Как и в прошлый раз, перетяните назначение (Set) новой переменной в конец выполнения False (после назначения жёлтого цвета)
  • 52. Теперь давайте закончим работу с Preview Graph ➔ Создайте SetActorLocation потянув из MyPreviewSphere ➔ Соедините Set SurfaceNormal с SetActorLocation и в значение NewLocation передайте SurfaceNormal ➔ Сделайте тоже самое ещё раз для ноды Set TraceEnd
  • 53. А теперь добавим интерактивности нашим механикам
  • 54. Давайте построим interaction graph ➔ Еще раз скопируйте первую часть из графа linetrace и вставьте её ниже
  • 55. Давайте построим interaction graph (всё ещё в MyVRPlayerController) ➔ Создайте InputAction для MyInteraction, который мы создали в разделе инпутов в настройках проекта (Input section of the Project Settings) ➔ Соедините Pressed c инпутом скопированного LineTrace
  • 56. Создаём новый Blueprint Interface ➔ В папке с блупринтами кликните ПКМ и в разделе Blueprints выберите Blueprint Interface ➔ Назовите его MyInteract-BPI
  • 57. Создаём новый Blueprint Interface ➔ Blueprint Interface позволит вам создавать новые Функции ➔ Создайте новую функцию LookingAt ➔ Вы можете добавлять инпуты и аутпуты (Inputs and Outputs), но пока обойдёмся без этого ➔ Compile and Save
  • 58. Возвращаемся к MyVRPlayerController ➔ Для создания функции IsValid со знаком ? Потяните из BreakHitResult > HitActor
  • 59. Возвращаемся к MyVRPlayerController ➔ Чтобы добавить LookingAt потяните из HitActor снова и наберите название вашего Blueprint Interface - MyInteract- BPI ➔ Соедините его с аутпутом ? Is valid, который в свою очередь соединён с LineTrace ➔ Compile and Save
  • 61. Настроим Включение и Выключение вращения лопастей вентилятора с помощью sight based interaction ➔ Если вы переместитесь к той части локации, где находятся вентиляторы, то увидите, что они уже контролируются Блупринтами ➔ Мы можем заменить существующие Блупринты на новые, которые добавят взаимодействие с нашим line trace ➔ Откройте существующий Блупринт, чтобы найти ссылку на тот меш, который используется в данной сцене
  • 62. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Создайте новый Actor Class Blueprint в папке Blueprints ➔ Назовите его MyVRFan-BP ➔ Откройте его для редактирования
  • 63. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Добавьте Static Mesh Component вентилятора в Блупринт
  • 64. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Добавьте Rotating Movement Component в Блупринт
  • 65. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Выбрав Rotating Movement Component, установите новое значение Rotation Rate X, например 450
  • 66. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Теперь отключите AutoActive (снимите галочку) для того, чтобы вентилятор не включался автоматически, а только после выполнения определённых действий игроком
  • 67. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Кликните на кнопку Class Settings в верхней панели для того, чтобы перейти к его настройкам (Class Settings) ➔ В Details Panel, в разделе Interfaces, воспользуйтесь кнопкой Add для назначения MyInteract-BPI Blueprint как вашего нового BP interface ➔ Обязательно Compile and Save после этого, чтобы применить ваш новый BP Interface
  • 68. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Как только мы применили наш новый BP Interface, мы можем кликнуть в нём правой кнопкой мыши и получить доступ к Event LookAt-BPI ➔ Это создаст Событие (Event), которое мы сможем соединить с ToggleActive для активации RotatingMovement нашего вентилятора (Component of the Fan Mesh) ➔ Compile and Save
  • 69. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Убедитесь в том, что на объектах, которые окружают наш вентилятор нет коллизий, чтобы дать возможность взаимодействовать с ним
  • 70. Настроим Включение и Выключение вращения лопастей вентилятора ➔ Для замены Блупринта, выберите Actor в сцене, кликните по нему ПКМ для вызова меню. В появившемся меню выберите Replace Selected Actors with ➔ Убедитесь в том, что в контент браузере выделен необходимый Блупринт ➔ Save All ➔ Теперь MyVRFan-BP размещён в нужном месте и вы можете с ним взаимодействовать. Для этого направьте Preview Sphere на него используя ПКМ
  • 71. 71 VR с помощью Unreal Engine это круто. Ознакомьтесь с UE4 VR learning resouces для получения более исчерпывающей информации. luis.cataldi@epicgames.com