Dive into VR and create a portfolio of 15 immersive games
Welcome to the world’s most comprehensive course on VR game development, where you will learn and master the foundations of C#, Unity and VR by building practical projects. Whether your goal is to make VR games for fun, do a startup in this exciting field, or become a professional Unity development (+160k a year on senior roles), this course contains everything you need to reach your goals.
- Locomotion techniques
- Gaze-based interaction
- Cabin/vehicle experience
- User interface design in VR
- Working with 360 images and 360 video
- Motion sickness avoidance, based on current research
- 3D game mechanics and physics
- Room Scale Experiences with SteamVR
- Level design
- Performance and industry best practices for mobile and desktop VR
Platforms covered in the course
- Oculus Rift
- HTC Vive (2 Room-Scale experiences will be included)
- Samsung Gear
- Google Cardboard (Android and iOS)
- Google Daydream will be added later in the year
Pablo Farias Navarro is a game developer and founder of ZENVA, where he has taught game development to +200,000 students and authored +50 courses. As part of his work in game development education, Pablo was invited to join the Intel Software Innovator Program, and has run game programming workshops in San Francisco, Brisbane and Bangalore. Pablo has been making games since 1996 and has been obsessed with VR since he saw The Matrix.
By enrolling in the course you’ll get instant access to the modules below. The rest of the course is in the making – new lessons are added each week!
1. Unity Basics – Learn Unity and C# by Building a Multi-Level 3D Platformer
This module aimed at those with no prior Unity or C# experience. We introduce the Unity Editor and the basics of Object-Oriented Programming. Through out the module we build a fully-functional Mario-style game with different screens and levels.
- Unity Editor basics
- Transforms and game objects
- Unity Scripting in C#
- Object-Oriented Programming
- Multi-level functionality
- Canvas UI
- Importing external assets from Blender
2.VR Platform Experience and Platform Setup
In this module we create a VR experience that consists of a platform that flies to different destinations. We make this project run in all the platforms and cover some performance basics.
- VR flying platform experience
- C# arrays
- Basic setup in all platforms: Cardboard (Android and iOS), Gear VR, Oculus, HTC Vive (OpenVR)
- Performance and light baking basics
3. VR Forest Experience with Mosquitos
In this module we create a VR experience where a peaceful night in the forest is interrupted by giant mosquitos. We use the VR Standard Assets from Unity to create a reticle for gaze-based interaction.
- VR Standard Assets overview
- Reticles and VR Eye Raycaster
- Randomization of trees scale and rotation
- Particle effects
- Creation of the mosquito game
4. Creating VR Experiences with 360 Photos
- Working with 360 photos in Unity
- UI in VR: the importance of Spatial UI
- Diegetic vs non-diegetic UI
- Gaze interactions: clicking and hovering
- Building reusable UI components
Modules in the making
These are some of the modules that we are working on (all the screenshots correspond to games that will go in the course). We have many of the games ready and now all that’s left is the recording itself. More games will be added. We are aiming to release one module a week.
We’ve completed the creation of a VR cabin experience, where you can pilot a small aircraft in a floating island. Cabin experiences fit great into VR, and are one of the main locomotion techniques. The limitations of the medium, such as being constrained to a small area can be easily incorporated into the games themselves, creating thus a great sense of immersion. The demo we built allows the player to control the ship by using buttons located in the dashboard, which allow the ship to move up,down, forward and also to steer in a way that is less likely to produce motion sickness. This project will be one of the first games students build in the course.
RPG Combat Game
We completed one of the most comprehensive games we’ll be including: a dungeon crawler RPG! In this module students will build a basic combat RPG game where the player can use different weapons to fight hordes of skeleton warriors, while exploring a dungeon. The game also includes NPC (non-player characters) you can talk to. Some features included in this demo are:
- Building dungeons using modular assets: walls, ceilings, doors, floor, etc. It’s very easy to assemble any kind of level with this approach.
- Enemy movement using pathfinding AI (Navmesh).
- Grabbing different types of weapons that cause different damage.
- Light baking including mixed mode (new in Unity 5.6) to create efficient games.
- Creating a reusable set of scripts that can be dropped into any Unity game for teleportation, item collection, carry-on items (weapons, tools, etc), information callouts to show info in VR.
- For the assets we used the free program Magica Voxel, which we’ll cover briefly as well.
First Person Shooter
A popular request from people who’ve pre-ordered the course has been a VR first person shooter (FPS) game, and this week we dove into that topic and built a cool game for the course. The game uses free teleportation, which means players can move around freely around the level (as opposed to the “fixed teleportation” approach we took in previous games). This is quite a popular teleportation method and it can be easily ported into any of the games we’ve already built. The VR FPS demo includes the following features:
- Free teleportation, with an optional glowing “arc”.
- Collecting ammo, for which we created a reusable “collectible” component that can be dragged and dropped into any game.
- Visual display of the ammo left on the gun’s side by using a canvas element. In VR we can’t easily add HUD, so game information needs to be somehow inserted into the game world, just like in real life!
- Simple enemy logic: if you are close to them, they’ll move towards you.
- Particle effect to represent enemy blood.
Note: this FPS uses a completely different code base from that of our new Unity (non-VR) FPS course. Although some similarities exist, we are taking a very different approach here. Normal 3D FPS are VERY different to VR first-person games.
This week we made an underwater VR experience, where you explore the dangerous depths of a shark-infested ocean. This game includes many new elements and will account for a very interesting module. Among other things, we used:
- Fog and lightning options to make this underwater atmosphere.
- Unity’s terrain generation tool to create the sea bottom.
- A VR controller where the player can move to any direction they look at (2 approaches were tested and both will be included in the course)
- Creating fish as the player gets close to certain regions, so that we don’t fill the level with hundreds of fish. When the player moves away from a location, the fish will disappear from memory.
- Fish react to the player’s presence and run away.
- Sharks that attack the player (game over if they catch you. pro tip: don’t get close).
- Underwater sound.
VR Fitness Game
This week we created a fitness game in VR: an infinite runner where you have to jump in real life in order to jump inside the game. Developing this game has been nothing but fun and some people in the office were close to getting hurt.
This game introduces many interesting concepts: procedural generation of game objects, object pooling to preserve memory, and well of course, how to introduce real-world physics into your VR world. We also cover how to make the far-away background (in this case, mountains) to follow you around to keep the illusion of distance.
VR Puzzle Game
This week we created a puzzle game in VR, where the player has to place all the tiles in their right position. When the puzzle is completed, an event is fired so that other game behaviors can be easily triggered (for instance, a new pyramid could come up from the ground, or a door could open up). The puzzle can be modified so that it works with other puzzle pieces, and have a different number of rows and columns.
The individual puzzle pieces use a component we made named “draggable” which is implemented in a way that can be easily re-used in other games. This component allows us to drag and drop objects in VR. We will be using it again later in the course.
Also, this week we improved on our teleportation targets, so that they can now have an animation (similar to the VR game “Land’s End”), and fire custom events when they are reached.
VR Space Invader
Worked further in the Space Invader VR game. Made lots of tweaks and added a wall with a graffiti on it that indicates the state of the game. This wall is really the UI – it shows instructions, number of enemies killed and game over text. To start a new game, simply shoot the wall! In VR, UI can be incorporated into a game as real-world elements and it feels quite natural.
This project is an attempt to bring this classic to VR. So far, I’ve completed the basic functionality and it’s already quite fun to play. There are more things I want to add such as small aliens that come from the spaceships and attack the player. Also, need to add kill count, game over and wining conditions. Will also add some more Blender models and maybe a Skybox. to make the scene look prettier
This project doesn’t include that many new elements that are not already part of previous experiences, so it will serve more as a consolidation project. This means, we can go a bit further when it comes to polishing it.
Fixed Teleportation Experience
Completed the implementation of basic teleportation targets that shine when the player looks at them, and allow to set a maximum distance for them to become visible. When “clicking” on them, the player is taken to their location.
These targets are created as prefabs that can be easily dropped into any Unity project, so we’ll be reusing them and extending them in the follow-up modules. More features that I plan to add to these elements are a more smooth movement for the player (currently the player literally teleports), and the ability to hook certain events to a specific teleport station (for example, when you reach a certain point, something happens in the game – door openings, lifts, etc)
Created a low-poly giant tree world in Blender to test-drive the teleportation targets. The floor is made semi-transparent. I also used light baking to gain efficiency, which will be covered in the course.