The latest patch release of Unity’s support for visionOS is now available. This patch release addresses a targeted input issue in our most recent release:
Fixes input scaling issue in P2D: Fixes a bug that introduced an input offset over Play to Device when the volume camera’s Dimension property was set to something other 1.
General 1.1.x Release Notes
Installation
Please note that your packages will not automatically upgrade to this release unless explicitly requested. This is a bug that will be resolved in a future editor release. You must upgrade manually using one of the following options:
Remove and re-add the packages using the package manager.
Edit the project manifest directly (Packages/manifest.json) and change the version number for the packages to the exact versions listed at the end of these release notes.
Supported Versions
Unity 2022 LTS 2022.3.191 or newer (Apple Silicon version only).
Xcode 15.2 - Xcode beta versions are not currently supported.
visionOS 1.0.3 (21N333) SDK - We currently do not support beta versions of visionOS.
Apple Silicon Mac and the Apple Silicon macOS build of the Unity editor. The Intel version of the Unity editor is not supported.
Major Features & Fixes
General Highlights
Improved performance of scene validation on large projects.
Renamed validation profiles to reflect the current app mode.
Added device rotation value to the XRTouchSpaceInteractor for XR Interaction toolkit.
Mixed Reality (Immersive) Mode
Added a SwiftUI sample scene to the PolySpatial package samples. This lets you create a standalone SwiftUI window that can interact with Unity content.
Various Play to Device improvements:
Fixed assorted connectivity issues using Play to Device on hardware
Increased Play to Device connection stability.
Progress bar during connection to indicate the app isn’t hung.
Play To device now retains its position within editor play sessions.
Scaled down Play to Device UI for easier workflow iteration.
ShaderGraphs can be modified in real time and will be updated live over P2D.
Significant performance improvements for compressed textures to improve initial load time.
Shader/Material improvements
Custom function node now supports reassignment operators (++, +=, etc.).
Sprites can now use custom materials & shadergraphs.
MaskingShader (for sprites and UI) now supports vertex colors.
SkinnedMeshes now respect grounding shadow, image based light, and sorting groups.
Built-in RenderPipeline unlit particles are now supported.
We’ve made a wide range of additional fixes and performance improvements. For an exhaustive list, please refer to the changelogs and package documentation:
visionOS build support for Windows and Linux is currently in development, and users will observe error messages when installing via Unity Hub.
To get access to these build support installers, you can find them directly on the Unity editor download page and perform a manual install in the interim.
Play to Device
Pausing PlayMode during a P2D (PlayToDevice) session disrupts active connections.
Connecting while the device is locked will cause both the current connection and all future connections to fail, as will locking a device while a P2D host app is running.
To work around either issue, force quit and restart the P2D host app.
Setting ‘Connect on Play’ to ‘Enabled’ in the editor P2D window with no Available Connections selected may still connect to a connection entry if the P2D host app is running.
Set ‘Connect on Play’ to ‘Disabled’ to disable connections.
You will currently see duplicate GameObjects in the Play window when running P2D.
Running a Scene with a rotating VolumeCamera also rotates the P2D window, and the rotation transformation persists after stopping PlayMode. This may leave the P2D window facing away from users, resulting in the blank back of the window.
When your scene has unbounded volume camera, after stopping PlayMode in the editor, the P2D app will appear in an unbounded volume and can no longer be moved around.
You can workaround this by connecting any scene to P2D, or by force-quitting and restarting.
If an XR simulation environment is enabled, it will show up in the P2D session when connecting to the P2D app on VisionOS device or simulation. Note that this XR simulation environment is an editor-only object, and will not appear when the app is built and deployed to VisionOS device or simulation.
Other Information
For additional information please visit the General Release Notes. These release notes apply to the suite of packages released as part of Unity’s support for visionOS:
Thank you for your work, I would like to ask since last year we discussed adding support for blendshape, but so far I don’t see it on roadmap, is there any information about it? Is it to wait for RealityKit platform-level support ?
We’re currently actively working on Blendshape support and targeting the next 2 quarters, but we won’t be able to share concrete timelines beyond that.
There are also some performance-related visionOS factors that currently constrain the performance of blendshapes (or similar geometric applications) on the platform. If Blendshapes are important to you, do share this feedback via Apple’s feedback assistant as well.
I found a discrepancy with another source, specifically the VisionOS package documentation, which lists the requirement as “Unity 2022 LTS for Apple Silicon (2022.3.18f1 or newer).” Could you clarify which is the correct version requirement for the VisionOS package?
The below code worked in 1.1.4 but is giving me an error in 1.1.6. It is supposed to asynchronously load a texture.
newHandle = Addressables.LoadAssetAsync<Texture2D>(imageAddress);
yield return newHandle;
if (newHandle.Status == AsyncOperationStatus.Succeeded)
{
imageRenderer.material.SetTexture(baseMapInt, newHandle.Result); // this line generates the error
}
It works fine in editor and texture loads, but console shows error. In Xcode, however, it hangs. Here’s the error in console:
NullReferenceException: Object reference not set to an instance of an object
Unity.Collections.NativeArray1[T]..ctor (Unity.Collections.NativeArray1[T] array, Unity.Collections.Allocator allocator) (at /Users/bokken/build/output/unity/unity/Runtime/Export/NativeArray/NativeArray.cs:86)
Unity.PolySpatial.Internals.ConversionHelpers.GetRawTextureData (UnityEngine.Texture2D tex2d, Unity.Collections.Allocator allocator, UnityEngine.Experimental.Rendering.GraphicsFormat& graphicsFormat) (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/Platforms/PolySpatialConversionHelpers.cs:829)
Unity.PolySpatial.Internals.ConversionHelpers.ToPolySpatialTextureData (UnityEngine.Texture2D tex2d, System.Action`2[T1,T2] postConversionCallback) (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/Platforms/PolySpatialConversionHelpers.cs:740)
Unity.PolySpatial.Internals.LocalAssetManager.SendTextureAssetChanged (Unity.PolySpatial.Internals.PolySpatialAssetID assetID, UnityEngine.Object unityTexture, System.Boolean allowNativeTextures) (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/AssetManagement/LocalAssetManager.cs:922)
Unity.PolySpatial.Internals.LocalAssetManager.ProcessChangedAsset (Unity.PolySpatial.Internals.AssetRepresentation representation) (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/AssetManagement/LocalAssetManager.cs:1114)
Unity.PolySpatial.Internals.LocalAssetManager.ProcessChanges () (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/AssetManagement/LocalAssetManager.cs:834)
Unity.PolySpatial.Internals.PolySpatialUnitySimulation.UpdateInternal () (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/Trackers/PolySpatialUnitySimulation.cs:175)
Unity.PolySpatial.Internals.PolySpatialUnitySimulation.Update () (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/Trackers/PolySpatialUnitySimulation.cs:136)
Unity.PolySpatial.Internals.PolySpatialCore.PolySpatialAfterLateUpdate () (at /Users/bokken/build/output/unity/quantum/Packages/com.unity.polyspatial/Runtime/PolySpatialCore.cs:706)
Image settings are pretty standard:
Texture Type: Default
Texture Shape: 2D
sRGB: checked
Alpha source: none
Generate mipmaps is off
Wrap Mode: repeat
Filter Mode: Bilinear
Max Size: 2048
Resize Algorithm: Mitchell
Format: Automatic
Compression: High quality
Were there changes to what kind of textures we can use from 1.1.4 to 1.1.6? (we also upgraded Unity version from .18 to .21)
The change from 1.1.4 to 1.1.6 was extremely minimal, and shouldn’t affect texture formats; it just fixed an input scaling issue. It’s more likely to be the Unity version change, although I don’t know offhand what the issue might be. Based on the stack trace, you might need to make the Texture readable (enable the Read/Write import setting, e.g.). That seems to be the failure point, anyway; Texture2D.GetRawTextureData is returning null.
That shouldn’t happen. I assume the device is connected to Wi-Fi? I’ve noticed sometimes when launching apps quickly after I boot up the device the network connection isn’t quite ready. Did you happen to launch the app right away after a boot?