Post on 20-Jan-2017
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