Build a VR Pawn with Unreal Engine Luis Cataldi Russian

Post on 20-Jan-2017

169 views 4 download

transcript

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