Section 2 of the GameDev.tv Unreal VR Course, available on Udemy. Understand the best practices for user interface in VR. Design and build their own spatial interfaces. Create game saving mechanisms for any game. (ref: LP_VR2)
In this video (objectives)…
- What you will get from this section.
- A sneak peak at the section project.
- Setting up the project.
After watching (learning outcomes)…
Know what we are aiming for this section.
In this video (objectives)…
- Overview of the desired setup.
- Creating the C++.
- Hooking up the Blueprint.
After watching (learning outcomes)…
Have an alternative way of setting up VR Pawns.
In this video (objectives)…
- Overview of the painting architecture.
- Creating a Stroke actor.
- Setup the input handling.
- Spawning a stroke.
After watching (learning outcomes)…
Forward hand controller actions to their actors.
In this video (objectives)…
- Writing and using the interface.
- Outlining the algorithm.
- Creating a spline mesh.
- Updating the end-points.
After watching (learning outcomes)…
Use spline meshes for 3D drawing.
In this video (objectives)…
- Why frame rate matters in VR.
- Viewing the frame rate.
- What changes the frame rate?
After watching (learning outcomes)…
Why frame rate is important and how to measure it.
In this video (objectives)…
- What are bottlenecks?
- Tools to identify bottlenecks.
- Game, render or GPU bound?
After watching (learning outcomes)…
Identify CPU or GPU bottlenecks in own games.
In this video (objectives)…
- Likely causes of bottlenecks.
- Identifying vertex vs pixel bound.
- Improving the empty scene frame time.
- Forward rendering vs deferred rendering.
After watching (learning outcomes)…
Diagnose common GPU issues.
In this video (objectives)…
- Log the number of DrawCalls.
- Recapping the Instanced Static Mesh.
- Replacing the meshes in the stroke.
After watching (learning outcomes)…
Replace multiple meshes with an Instanced Static Mesh.
In this video (objectives)…
- The rotation and scaling maths.
- The code outline.
- Rotating and scaling APIs.
After watching (learning outcomes)…
How to rotate and scale to fit between two points.
In this video (objectives)…
- Importing new meshes.
- Creating a material.
- Enabling the material for instanced static meshes.
- Hiding the stroke joints.
After watching (learning outcomes)…
How to add materials to instanced static meshes.
In this video (objectives)…
- Creating a
USaveGame
subclass. - Saving and Creating APIs.
- Our
SaveGame
header file. - Implementing
Save
andCreate
.
After watching (learning outcomes)…
Be able to create and save a SaveGame
.
In this video (objectives)…
- Setup saving from user input.
- Loading API.
- Using the loading API.
- Saving and loading a UPROPERTY.
After watching (learning outcomes)…
Load data from a save game file.
In this video (objectives)…
- What is the state of our level?
- Defining the UPROPERTY.
- The SaveGame serialising API.
- Capture and spawn the strokes.
After watching (learning outcomes)…
How to serialise simple game state.
In this video (objectives)…
- Create Stroke state struct.
- The Stroke serialisation API.
- Implementing serialisation.
After watching (learning outcomes)…
How to use structs to serialise complex state.
In this video (objectives)…
- Rename the HandController class.
- Setup an
ActiveClassRedirect
. - Creating a base class.
- Extracting functionality.
After watching (learning outcomes)…
How to rename a C++ base class and extract functionality into a super class.
In this video (objectives)…
- Introduction to the Daydream sticker sheet.
- Importing Sketch files into Figma.
- The basic tools in Figma.
- Understanding the DMM.
- Creating a simple layout.
After watching (learning outcomes)…
How to use Figma to create basic layouts.
In this video (objectives)…
- Critique the Daydream designs.
- Critique you own design.
After watching (learning outcomes)…
How to critique user interface designs.
In this video (objectives)…
- Creating a design frame.
- Create/capture requirements.
- Assemble a design.
After watching (learning outcomes)…
How to build a UI design in Figma.
In this video (objectives)…
- Create a placeholder widget.
- Displaying the widget in the scene.
- Placing the widget with spline guides.
- Scaling the widget.
- Placing the buttons.
After watching (learning outcomes)…
How to accurately place UI from a design.
In this video (objectives)…
- Introducing the Widget Interaction Component.
- Creating a button to test with.
- Setting up the Blueprints.
- Adding a Widget Interaction Component.
- Clicking the button.
After watching (learning outcomes)…
How UI selection works in VR with Unreal.
In this video (objectives)…
- Setting up the grid layout.
- Exporting the card button graphics.
- Setting up the card button.
- Creating all the states.
After watching (learning outcomes)…
Converting button designs to working UMG buttons.
In this video (objectives)…
- Creating the action bar widget.
- Laying out the buttons.
- Creating the button variations.
After watching (learning outcomes)…
How buttons scale with their contents.
In this video (objectives)…
- Layout the images.
- Exporting the graphics.
After watching (learning outcomes)…
How to use a horizontal layout.
In this video (objectives)…
- Add base class and reparent
PaintingGrid
. - Bind the Uniform Grid Panel.
- Create blueprint interface to
AddPainting
and call it.
After watching (learning outcomes)…
How to bind a widget to C++.
In this video (objectives)…
- Introduce the APIs. (CreateWidget, GetChildAt, AddChild)
- Creating the Card widget.
- Spawn a widget.
- Add to the size box.
After watching (learning outcomes)…
How to spawn widgets and add them to PanelWidgets.
In this video (objectives)…
- Add
PaintingPicker
C++ parent. - Create the essential components in C++.
- Copy the component values.
- Convert the blueprint to C++.
After watching (learning outcomes)…
Practice at reparenting Blueprints.
In this video (objectives)…
- Add a SlotName variable.
- Generate the variable on creation.
- Create a getter for SlotName.
- Update loading to take the SlotName.
- Create a new
PaintingSaveGame
on every load.
After watching (learning outcomes)…
Using UUIDs to generate unique string names.
In this video (objectives)…
- Creating the
PainterSaveGameIndex
. - The Index API.
- Using the API.
- Implementing
Load()
andSave()
. - Implementing
AddPainting()
andGetPaintings()
.
After watching (learning outcomes)…
How to use an index to iterate over all save games.
In this video (objectives)…
- Change the
AddPainting
interface. - Add at index.
- Add as many paintings as there are.
- Correct the order of slots.
After watching (learning outcomes)…
How to populate the UI lists.
In this video (objectives)…
- Add a text box to the card.
- Improve spacing of the grid.
- Creating a
UPaintingGridCard
parent class. - Binding the
TextBlock
.
After watching (learning outcomes)…
How to make and bind UMG TextBlocks.
In this video (objectives)…
- Creating the
SetPaintingName
interface. - Calling the
SetPaintingName
interface. - The
UTextBlock
API andFText
. - Implementing
SetPaintingName
.
After watching (learning outcomes)…
How to set TextBlock text in C++.
In this video (objectives)…
- How to use the
OpenLevel
API. - Binding the button
OnClicked
. - Opening the "Canvas" level.
- How to get around the hanging issue.
After watching (learning outcomes)…
How to open levels smoothly in VR.
In this video (objectives)…
- Creating a GameMode.
- Handling the options with
InitGame
. - Parsing out our option.
After watching (learning outcomes)…
How to parse level loading options.
In this video (objectives)…
- Why we can't load the game in InitGame.
- Loading the game at start.
- Why we should hide the splash screen.
After watching (learning outcomes)…
When to hide a splash screen.
In this video (objectives)…
- Creating the GameMode
SavePainting
API. - Calling the API.
- Making it save.
- Quitting to the Menu.
After watching (learning outcomes)…
When it's best to hide information and delegate.
In this video (objectives)…
- Removing the old loading and creation code.
- When to bind buttons.
- Create an
ActionBar
C++ parent. - Binding the "Add" button.
- Binding the "Delete" button.
After watching (learning outcomes)…
When to use Initialize in UserWidgets.
In this video (objectives)…
- Passing a reference down to
ActionBar
. - Calling back up to
PaintingPicker
. - Create the painting and reload.
After watching (learning outcomes)…
How to call up to a Widget's parent.
In this video(objectives)…
- Create the API and the usage.
- Overview of the documentation you need.
- Iterating over the children.
- Clearing the children of the size box.
After watching(learning outcomes)…
How to iterate and clear children of a UPanelWidget
.
In this video(objectives)…
- Create the
PaletteMenuHandController
. - Add and spawn a left hand controller.
- Connecting in blueprint.
- Setting the
MotionController
hand.
After watching(learning outcomes)…
Revision of the HandController architecture.
In this video(objectives)…
- Add a widget component to the controller.
- Create and setup a widget.
After watching(learning outcomes)…
Revision of the widget components.
In this video(objectives)…
- Create new C++ derived class.
- Adding a custom widget to Blueprints.
- Overview of
IsOverInteractableWidget
API. - Implementing the click behaviour.
After watching(learning outcomes)…
How to query the interface from a UWidgetInteractionComponent
.
In this video(objectives)…
- Create
UFUNCTION
on GameMode. - Calling the
UFUNCTION
. - Moving the implementation.
After watching(learning outcomes)…
How to call GameMode functions from Blueprint.
In this video(objectives)…
- Create the C++ parent.
- Create the widget Blueprint and reparent.
- Setup with the image widget.
- Replace in the grid widget.
After watching(learning outcomes)…
Overview of the pagination system.
In this video(objectives)…
- Creating the API.
- Temporarily calling the API.
- Implementing the spawning.
After watching(learning outcomes)…
Revision of spawning widgets.
In this video(objectives)…
- What is a
UPanelSlot
. - Getting the right slot type.
- Changing the padding.
After watching(learning outcomes)…
What a UPanelSlot
does and how to use it.
In this video(objectives)…
- Creating the
SetActive
API. - Binding the image.
- Blend modes: transparent vs masked.
- Implementing
SetActive
. - Reproducing the dots in code.
After watching(learning outcomes)…
The differences between blend modes and when to use them.
In this video(objectives)…
- How to calculate number of pages.
- Implementing
GetNumberOfSlots()
. - Calculating the number of slots.
- Implementing Number of pages.
After watching(learning outcomes)…
How to calculate the number of pages to paginate a given number of items.
In this video(objectives)…
- Refactoring refresh.
- Adding a current page variable.
- Add one dot per page.
- Clearing the pagination dots.
- Selecting the current page.
In this video(objectives)…
- Binding an axis for pagination.
- Overview of a latching mechanism.
- Log latched offsets.
After watching(learning outcomes)…
How to turn an analogue input into an action.
In this video(objectives)…
- Creating the pagination API.
- Using the API with
TActorIterator
. - Implementing an absorbing boundary.
After watching(learning outcomes)…
How to implement an absorbing boundary.
In this video(objectives)…
- Calculating the
StartOffset
. - For loop over the slots.
- Checking the last page.
After watching(learning outcomes)…
How to display paginated results.
In this video(objectives)…
- How to read the prototype code
- Overview of the features
- MEGA Challenge!
After watching(learning outcomes)…
To have the confidence to continue your VR journey.