Play to Device

We’re excited to announce the availability of Play to Device, a powerful feature that drastically improves iteration and debugging workflows. Play to Device enables you to:

  • Efficiently iterate and live preview your content across the Unity editor on the visionOS simulator or the Apple Vision Pro device
  • Deploy your content without rebuilding an Xcode project
  • Access Unity editor’s play mode features on the visionOS simulator and Apple Vision Pro device

This feature is delivered through the Play to Device Host application, which can be installed on the visionOS Simulator or an Apple Vision Pro device. With the Play to Device host running, you can press Play in the Unity Editor and see your content appear in the simulator or on device, rendered by RealityKit. No intermediate builds are required.

Any changes you make in Unity Editor - such as creating game objects, modifying inspector values, updating and recompiling shader graphs, etc. - will be synchronized to the simulator/device in real time, and any interactions you perform on the host will be synchronized back to the editor. You can learn more about this workflow by reading the documentation.

Version Compatibility Matrix

The Play to Device Host must match your PolySpatial package version exactly. The table below provides links to the Xcode and device-specific hosts compatible with each PolySpatial release.

PolySpatial Version Supported Unity Versions Required Xcode Versions Required Firmware Version Xcode .App Link (Apple Silicon) Device TestFlight Link
1.3.1 2022.3.19f1 and higher Xcode 15.4 visionOS 1.1 SDK Download Link Join the Unity Play to Device Host beta - TestFlight - Apple
2.0.0-pre.9 6000.0.0f1 and higher Xcode 16.0 beta 4 visionOS 2.0 SDK Download Link Join the Play To Device v2 beta - TestFlight - Apple

First Time Setup - visionOS Simulator

To install the host app for the visionOS simulator:

  1. Download the “Play To Device Host.app.zip” to your Apple Silicon-based Mac. See the Compatibility Matrix above to identify the right version given your PolySpatial version.
  2. Extract the zip file revealing “Play To Device Host.app” in Finder.
  3. Start the visionOS simulator, either by going to “Xcode > Open Developer Tool > Simulator” within Xcode, or using Spotlight (command+space) and typing “simulator”.
  4. When the simulator is running, you can see the home screen with various app icons. Drag “Play To Device Host.app” from the Finder window into the simulator window.
  5. After a few seconds, you should see “Play To Device Host” appear as one of the app icons on the home screen. Note that you may have to scroll the app list to see it.

First Time Setup - visionOS Hardware

To install the host app for an Apple Vision Pro device:

  1. Follow the TestFlight invite link on your computer or smartphone (or in Safari on the device). You should see an invite code. See the Compatibility Matrix above to access a link compatible with your PolySpatial version.
  2. Open the TestFlight app on your Vision Pro device, signing into your Apple account if necessary.
  3. Tap “Redeem Code” in the TestFlight app.
  4. Enter the code you saw in your browser after following the invite link.
  5. Tap “Download” in the TestFlight app after reading the build information and release notes.
  6. After a few seconds, either tap “Open” from TestFlight or navigate to the Play To Device Host application that now appears on your home screen.

First Time Setup - Unity Editor

Once you’ve installed a host app for device or simulator (see above):

  1. Make sure the host and development machine are on the same LAN.
  2. Launch the host app.
  3. In Unity Editor, open the Play to Device Editor window by clicking on
    Window > PolySpatial > Play to Device
  4. Copy the IP address displayed within the Host app to the “Host IP” field of the Play to Device editor window.
  5. Enable Connect to Player on Play Mode
  6. Enter Play mode in the Unity Editor. The Unity Editor will connect to the host and begin streaming your experience to the host in real time. You can then view, play, or interact with your experience via either editor or device; changes and interactions will automatically stay in sync.

Subsequent Usage

After initial setup, your content will be synced to the host app each time you press play, as long as Connect to Player on Play Mode is enabled and the host remains live. Refer to the documentation for more information.

Known Issues and FAQs

  • The Play to Device Host currently crashes if your app attempts to load another scene within the same session after start. We are working on a fix for this.

  • I’m having trouble connecting to the Play to Device Host.
    Make sure both the host machine and the mobile device are connected to the same WiFi network and ensure your firewall is not blocking the connection. If it is, then you may have to temporarily disable it using the appropriate tool for your OS.

  • I’m observing lag, or my editor seems to hang.
    In Unity Editor, try enabling Run in Background under Project Settings > Player > Resolution and Presentation. While this setting is not currently exposed under the visionOS platform, it is shared for all build targets. You can enable it under the Standalone build target tab.

  • My app doesn’t seem to receive any input once connected to the host.
    If your app is not receiving input from the Play To Device host (especially when using the visionOS Simulator), you may need to change your input settings. The PolySpatial package contains a preset input asset in its Package Manager samples, but the important settings to check are:

    • Background Behavior: Ignore Focus
    • Play Mode Input Behavior: All Device Input Always Goes To Game View
4 Likes

The drive link is restricted, is there a specific way to request access? Filling in the field results in Delivery Status Notification (Failure) bounce-back emails.

Do you intend in further version to make Play to Device compatible without poly spatial ? I am currently working on porting a game to VR using VisionOS.XR and had to remove poly spatial from my project since it was creating multiple build issues

2 Likes

Thanks for flagging, we have updated the link and should be directly accessible now.

Note that I was unable to connect to the Play to Device app running in the visionOS simulator.

I’m was using the 0.5.0 template project and PolySpatial 0.6.2 Play to Device app. I needed to update the PolySpatial/VisionOS packages in my project before it would connect. Seems to work now!

1 Like

Nice! Looking forward to hearing about your experience. :slight_smile:

Where/how do we get a TestFlight invite link?

Very cool, I got it working in the simulator with my own scene, based on the 0.6.2 template.
With the exact same scene, it sometimes crashes and sometimes not on entering play mode. It’s pretty random. When it crashes, sometimes some game objects in my Unity scene get a different transform (rotation, offset, scale). What is strange it that the scene doesn’t say that it has changed though, and the prefab which the object is in does not mention a change in transform either. Only restarting Unity helps it seems.
But great function once it is stable. I really wish Apple implemented ARKit features in the simulator though. How to do tap & place without it?

📌 Play to Device Do check out the links provided in this table.

1 Like

So sorry, I completely missed that. Thank you!

@IsaacsUnity how are you and thanks to you and the team who built this!

For some reason looks like Unity won’t connect to my simulator. I’ve the following:

  • Xcode Version 15.1 beta 3
  • visionOS 1.0 beta 6 (Under Platforms)
  • Poly Spatial, Poly Spatial visionOS, and PolySpatial XR all with 0.6.2
  • “Play To Device Host.zip” from this link

The log in Unity shows:
[NetConnection] PolySpatialAppNetworkConnection.Connect (192.168.5.31:9876)
[NetConnection] PolySpatialAppNetworkConnection connected to 192.168.5.31:9876

But all I see is quick flash in the Apple Vision simulator when the “Play To Device” app are running, I never see the cube from Unity rendering from the sim. Both IPs match from what I see on the sim vs what I entered in Unity. I also have “Ignore Focus” and “All Device Input Always Goes To Game View” set.

same problem here :frowning:

I also encountered the same problem, but I was able to confirm that it works by using the host application Poly Spatial 0.6.2 from this Xcode.App Link.

The Xcode.App Link on the manual page is currently for version 0.5.0. I would be grateful if it could be updated to the link for version 0.6.2: Play to Device | PolySpatial visionOS | 0.6.2

How can I get rid of this stuff?

hey there;

You need to make sure you use the same exact version of Play to Device with the package.

Being said that the team is working on an enhanced connection workflow to make sure that you can see the PolySpatial package version on both runtime and Editor side so you can easily check that they match.

Make sure that you don’t enable XR Simulation within your Standalone player settings, otherwise looks like is loading the default simulated environment.

2 Likes

Thanks @jmunozarUTech I couldn’t find a way to get different versions, the docs currently only show one version of the Play to device tool for visionOS. Could you provide me a link?

Hey! Thanks for flagging, you can try the Xcode .App link in the compatibility matrix up above in this post.

We’ll update the link in the package documentation as that’s outdated.

1 Like

How to get same lighting as in Unity to visionOS simulator.

Is Play to Device intended to work with VR applications if the PolySpatial packages are added to the project or will this only work with MR applications currently?