> ## Documentation Index
> Fetch the complete documentation index at: https://docs.streampixel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Prepare a VR experience

> In-engine changes for delivering a VR Streampixel experience.

<Warning>
  **VR streaming is experimental.** Pixel Streaming for VR is still under active development by Epic Games and is **not production-ready**. Expect rough edges around input mapping, head-tracking jitter, and codec / framerate stability. Use it for prototypes, demos, and internal testing — not for shipping consumer experiences.
</Warning>

Streampixel doesn't have a separate VR build target — you still [package for Windows](/resources/quick-start-guide/prepare-your-unreal-engine-project-for-windows) like every other Streampixel project. The difference for VR is **inside Unreal**: start from the VR template, disable OpenXR (it conflicts with Pixel Streaming), and patch the teleport function. Once those are done, you package as Windows and upload the zip the same way as any other build.

## 1. Create from the VR template

<Steps>
  <Step title="Open Unreal Engine">
    Launch from the Epic Games Launcher.
  </Step>

  <Step title="Pick the Virtual Reality template">
    On the **New Project** screen → **Games** → **Virtual Reality**.
  </Step>

  <Step title="Name and create">
    Set the project name and location, then **Create**.
  </Step>
</Steps>

## 2. Enable Pixel Streaming

<Steps>
  <Step title="Open Plugins">
    **Edit → Plugins**, search "Pixel Streaming".

    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=58391127e71dd1d035c20bdd5cfb4a30" alt="Searching for the Pixel Streaming plugin" width="2636" height="1378" data-path="images/image.png" />
    </Frame>
  </Step>

  <Step title="Enable and restart">
    Check **Enabled**, then click **Restart Now**.

    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-1-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=f11d13a87d3cc1e9dfb6cda0a1b6687a" alt="Enabling the plugin" width="2716" height="1348" data-path="images/image-1-.png" />
    </Frame>
  </Step>
</Steps>

## 3. Disable OpenXR

OpenXR conflicts with Pixel Streaming. Disable it before packaging.

<Steps>
  <Step title="Search for OpenXR in Plugins">
    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-2-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=10179d1fd7b8d685e36203319fd37537" alt="Searching for the OpenXR plugin" width="2718" height="1342" data-path="images/image-2-.png" />
    </Frame>
  </Step>

  <Step title="Uncheck Enabled and restart">
    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-3-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=4a4c5a9f32979556145f2e8c62f611e2" alt="Disabling the OpenXR plugin" width="2708" height="1348" data-path="images/image-3-.png" />
    </Frame>
  </Step>
</Steps>

## 4. Delete BP\_AssetGuideline

The default VR template ships an asset that breaks Pixel Streaming. Delete it.

<Steps>
  <Step title="Open the Content Browser">
    `Ctrl + Space`.
  </Step>

  <Step title="Find BP_AssetGuideline">
    Path: `/All/Game/VRTemplate/Blueprint/BP_AssetGuideline`.

    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-4-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=3cd3b05b56dafb5f7a97abeb349b0df5" alt="Locating BP_AssetGuideline" width="2350" height="1204" data-path="images/image-4-.png" />
    </Frame>
  </Step>

  <Step title="Force delete">
    Select, press **Delete**, click **Force Delete**.

    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-5-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=212f09f6f82c63ea8a9ff2c14e3b1924" alt="Force Delete confirmation" width="2196" height="1160" data-path="images/image-5-.png" />
    </Frame>
  </Step>
</Steps>

## 5. Patch the TryTeleport function

The default teleport drops the player below floor level when streamed. Add 100 to the Z value to fix it.

<Steps>
  <Step title="Open the VR Pawn blueprint">
    In the Content Browser.
  </Step>

  <Step title="Open the TryTeleport function">
    Left panel **My Blueprint** → Functions → **TryTeleport**.

    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-6-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=78e02073968e788909abc51dd4424cc8" alt="Opening TryTeleport" width="2590" height="1370" data-path="images/image-6-.png" />
    </Frame>
  </Step>

  <Step title="Add 100 to the Z value">
    Insert an **Add (+)** node, set the value to `100`.

    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-7-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=61f13f0f9e6a54a2b1cf6282e522a5c8" alt="Adding 100 to Z" width="2562" height="1366" data-path="images/image-7-.png" />
    </Frame>
  </Step>

  <Step title="Compile and save" />
</Steps>

## 6. Package and zip

<Steps>
  <Step title="Package for Windows 64-bit">
    Top toolbar → **Platforms → Windows → Package Project → Windows (64-bit)**.

    <Frame>
      <img src="https://mintcdn.com/streampixel/SBPJP8xnkRnRWdlx/images/image-12-.png?fit=max&auto=format&n=SBPJP8xnkRnRWdlx&q=85&s=3f926ba4f8cb9e547210a452d3bb5cb8" alt="Packaging for Windows 64-bit" width="2558" height="1374" data-path="images/image-12-.png" />
    </Frame>
  </Step>

  <Step title="Zip the build folder">
    Open the output folder, select all (`Ctrl + A`), compress to a `.zip`.
  </Step>

  <Step title="Upload to Streampixel">
    Upload the zip from the dashboard or via the [Upload File API](/resources/api-reference/upload-file-api).
  </Step>
</Steps>

## 7. Enable WebXR input in the dashboard

After uploading, open your project's **Settings → Input** tab in the dashboard and toggle **XR** on. Without this, the headset's controllers and head pose won't reach your build, even if the rest of the VR setup is correct.

## Next

<CardGroup cols={2}>
  <Card title="VR web integration" icon="vr-cardboard" href="/resources/recipes/vr-web-integration">
    Recipe for embedding the VR build with WebXR controls.
  </Card>

  <Card title="Upload your build" icon="upload" href="/resources/quick-start-guide/uploading-your-build">
    Get the zip onto Streampixel.
  </Card>
</CardGroup>
