Getting started with VR for Windows Phone

I started playing around with VR projects for Windows Phone back in December. I was thinking that if others could do it on Android and iOS, then our platform deserves some support, too. My initial project used the Google Cardboard for Unity SDK with a few tweaks for Windows Phone support. It was really hacky and I didn’t feel too great about releasing it to the public, even though I did drop it out on GitHub.

I spread that initial hacky version around inside my organization at Microsoft and it garnered some attention and resulted in me connecting with Peter Daukintis, a colleague of mine over in the United Kingdom. Peter had published two blogs posts – one about head tracking on Windows Phone and a follow up post using ALPS-VR for Unity.

Learning about ALPS-VR really opened up my eyes to what was possible with an open, cross-platform VR framework for mobile platforms, so I decided to scrap most of what I had done in my hacky Cardboard-based solution and move forward with ALPS-VR.

So, let’s move into actually building a VR experience for Windows Phone. This assumes that you have some working knowledge of Unity3D and Visual Studio for building Windows Phone apps.

You’ll need a few things:

  • A VR headset that can hold your phone – I’ve been using a Google Cardboard headset, since they are cheap and easy to come by. I have found them on e-bay and Amazon for less than $15 USD.
  • Download the Unity package(“alpsvr-wp.unitypackage” ) or clone my GitHub repo
  • Unity 4.6 (Pro for barrel distortion) – http://unity3d.com/unity/download **Not verified to work with Unity 5**
  • Visual Studio 2013 Community Edition – link
  • A Windows Phone running Windows Phone 8.1 – I recommend a phone in the 4.5-5 inch range like the Lumia 1020, 930 or Icon. The 1520 and other larger phones don’t fit the Cardboard googles.

Create your Unity project

  1. Open Unity and create a new 3D project
  2. Import “alps-vr windows phone.unitypackage” into your project
  3. Open the “demo” scene file located in Assets/Scenes – this will show you the structure of how a scene needs to be setup – you really just need to drag the ALPSCamera from ALPS/Prefabs into your scene

Select the ALPSCamera object in the scene and scroll down to the ALPSController script component. Notice that there is a Device setting for which VR headset you are using. I have mine set to “CARDBOARD” and the framework will optimize it’s settings for the Cardboard headset.

Build out for Windows Phone

  1. Open the Build Settings window located in the File->Build Settings menu
  2. Under Platforms, select Windows Store and set SDK to Phone 8.1

  3. Press “Build” and select an output folder for the Visual Studio project. I usually use something like a Builds folder that sits alongside my Unity project’s Assets folder.

Running the project on a device

This wouldn’t be much fun if you run it on an actual phone in a headset, so place that phone in there with the USB cable connected.

  1. Open that newly output Visual Studio project.
  2. Connect your phone to the PC using a USB cable. Make sure the phone is registered as a developer device.
  3. Now, you can run your project on the phone by targeting “Device” and pressing F5. Notice I have my build configuration set to “Master”. This setting yields the best performance, as it removes all of the profiling hooks from the Unity player.

What’s next?

Now that you’ve gone through setting up the sample project, you can venture forth to build your own custom scenes for your project. I would love to see what you build, so hit me up on Twitter to share and I will try to get you some exposure for your project – especially if you publish your app to the store.

You can post questions or comments here on the article and I will do my best to answer them in a timely manner. Of course, you are also welcome to contribute back to the GitHub repo. I will take a look at any pull requests submitted.

I should also mention that ALPS VR has support for Android phones as well, but I haven’t tried it yet. The Android phone that I have is far too old to run it.

***EDIT (5-13-2016) to remove the hijacked alplsvr URL – sorry if anyone clicked on it and was offended!

16 Comments

  1. I’m using Lumia 640 xl and when I tried to download a vr app on my phone from windows store it stated that my phone doesn’t supports it.
    Is it just for that single app or do I need to change my phone to experience VR.

    Like

  2. Hello Jason, thank you very much for this interesting post. Do you know, if this will work with a Lumia 640, because it does not have a gyroscope.

    Like

    1. I haven’t looked at this in while, but the relative head rotation is important to a good VR experience. If the phone doesn’t have a gyroscope, then there’s no way to get the Euler angles in relation to the phone position and this is essential to head tracking on a phone. Let me think on it some more.

      Like

      1. I own a Lumia 640. It does not have a gyroskop, but some kind of Sensor-Compound (says an app called sensor emitter). This Compound gives nick, roll and gier.

        (Your App is unfourtunatly not working with it, it just shows a dark grey screen, but that can also has other reasons; I’m using a 5.X Unity version and had to build it for universal win 10)

        Like

  3. Hi Jason, thank you very much for this interesting post. Do you know, if this will work with a Lumia 640. It does not have a gyroscope.

    Like

  4. Hi Jason. when I Downloaded the zip file, i didnt get the demo scene to work with. is there any possible way how i could get the demo scene?

    Like

  5. Hello!

    I’m having a great time with the script, but I have several interests in modifying its functionality. I managed to get a copy of the Unity 5.3 version before they 404 error’d the site. Anyway,

    I built an entire software platform utilizing traditional camera and character collider systems. I would like to translate these systems onto the ALPS VR.

    End Game Scenario: I am modifying the functionality to work with a GamePad for body movement while looking around does not affect space position or rotation. There are several other environmental programs within the scene and scripting, but that will follow suit relatively easily.

    So far, I have deactivated the ALPS Navigation. I noticed this simply allowed for a move forward and back based on tilt. Not necessary.

    First hurdle:

    I love the system’s look around functionality, but I want to modify it slightly. at the moment, I want to separate camera look from body rotation. In other words, if I can key rotate the body then the eyes will still share a common base rotation with the body since the VR camera system (I think) uses localRotation. That way looking around will be all in the neck and not in the hips.

    My biggest problem is finding the source that provides the system’s rotation pairing in order to isolate it (or // it). I found a javascript that makes reference to “@System.NonSerialized var activeLocalRotation : Quaternion;” but I’m not sure if this is the droid I’m looking for.

    As noted before, I don’t want to disable look around, just isolate it.

    I would love to discuss this project further if you have the time. I have thousands of lines of code prepared for my base model and I think it would make for an interesting development within a VR environment.

    Like

  6. I am trying to get this to work in Windows 10 Mobile but I am running into some issues. First of which is that I keep having a black screen and I can’t fond the cause of it 😦 I’m using Unity 5.4 with a Nokia Lumia 930 with Windows 10 Mobile.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s