Hello everyone! We are excited to share that Unityâs official support for visionOS is now available ahead of the Apple Vision Pro launch for all Unity Pro, Enterprise and Industry subscribers. This release is compatible with visionOS 1.0, Xcode 15.2 and Unity 2022.3.18f1, and includes various performance improvements and bug fixes. With this release, you can now leverage Unityâs official support channels and success plans to get the most out of Unityâs support for visionOS.
We recommend upgrading to this supported release this week and using it to submit content to the Apple App Store. Looking ahead, you can expect incremental releases that address known issues.
Thank you for all the feedback youâve provided throughout the visionOS beta program. Please continue to engage here in Discussions and submit feature requests via our roadmap. Itâs an incredibly exciting time for all of us, and we look forward to seeing what you create!
Release Notes
Note: The Apple Silicon macOS version of Unity is required. Using the Intel editor is not supported at this time.
General Highlights
Upgraded Unity to use Xcode 15.2 to officially support visionOS 1.0.
Enabling visionOS in the XR Plugin Management UI will allow you to choose to build for Virtual Reality or Mixed Reality. Selecting Mixed Reality will automatically install the required packages. This is the recommended way to install the necessary packages. To get started in a new project, install the âXR Plugin Managementâ package.
Added support for visionOS app icons in Player Settings using Unity 2022.3.18f1.
A project can be successfully built for windowed mode, VR mode, or MR mode even if VR and MR support packages are installed.
Virtual Reality (Fully Immersive) Mode
Added support for MSAA (works with Universal Render Pipeline and Built-in Render Pipeline), improving overall visual quality.
Added a virtual gaze ray for UI elements to better mimic system UI behaviour in VR.
Fixed an issue where audio would stop playing when the app is put into the background and brought back into the foreground.
Mixed Reality (Immersive) Mode
Added support to additional input events including device (pinch) rotation and position, in addition to interaction position.
Added support for additional particle and lit shaders on the Built-in Render Pipeline and Universal Render Pipeline.
Added support for sprites and icons within TextMeshPro strings.
Added support for the Time shader graph node. Note: Using the time node instead of time properties can have a significant impact on runtime performance due to performance constraints around shader globals on visionOS.
Improved performance when creating and destroying a large number of GameObjects, such as during Scene load.
Breaking Changes in 1.0
A number of MonoBehaviour components have been renamed. The auto-updaters will assist with the upgrade, but some manual fixups may be required. Please refer to the changelog for the com.unity.polyspatial package for the complete list of renamed types.
Spatial input properties deviceOrientation and devicePosition have been renamed to inputDeviceOrientation and inputDevicePosition to better reflect their purpose. Input maps that use these properties will need to be adjusted.
Known Issues
General
Xcode 15.2: when doing Append or Replace builds to an already-built location, Xcode sometimes caches old project file data leading to build and missing file errors. Closing and re-opening the project fixes the issue.
The visionOS build target is only available on macOS. Future versions of Unity will make it available on Windows, but as with iOS, Xcode will be required to fully complete a build.
Mixed and Virtual Reality Modes
When using image markers, âCommand CompileAssetCatalog failedâ / âExecution of actool failedâ sometimes occurs when building. Reopening the Xcode project or rebuilding usually resolves the issue.
When switching to building a VR build when the last build was MR, or vice versa, a project reimport may be required.
When accessing the visionOS and PolySpatial package samples, you will need to install XR Hands and XRI packages manually because they are optional package dependencies.
Mixed Reality (Immersive) Mode
visionOS will sometimes determine that a window of a requested size cannot be opened and will provide a window of different size, sometimes with a different aspect ratio. Content will appear squished or stretched, but applications can use the OnWindowOpened and OnWindowResized events on a Volume Camera to handle this scenario.
Runtime updates of TextMeshPro text content can cause significant performance issues.
SwiftUI warning âEnvironment(.openWindow) accessed outside of viewâ appears at application launch time. This warning can be ignored, and will be resolved in a future release.
SwiftUI warning regarding constraints that cannot be satisfied. This warning can be ignored, and will be resolved in a future release.
When using Play to Device with multiple apps, input will sometimes stop working on the device side. Close and relaunch the Play to Device app to work around this problem.
In order to run the Sample MixedReality Scene, users need to add the description to the tracking/sensing usage text fields and accept or decline usage requests.
Built-in Render Pipeline Unlit Particle shader is currently not rendering under the Bake To Mesh Particle System Mode. This shader can be accessed via the Replicate Properties mode in the meantime.
Building with Unity earlier than 2022.3.18f1 will result in an error regarding keyboardTextField. Please upgrade to 18f1 or newer, or if text input is not required, comment out the offending lines in the generated project.
Virtual Reality (Fully Immersive) Mode
Authorization dialogue can conflict with fully immersive space warning on the first run of a fully immersive app. Once authorizations are accepted and the app is rerun, this issue should be resolved.
Play to Device
Play to Device requires a reliable, high-bandwidth, low-latency network connection to function properly. We are looking into issues that cause the host application to misbehave if it is sent into the background by the OS.
For an exhaustive list of new features, fixes, and other changes, please refer to the package documentation:
Unity 2022 LTS (2022.3.18f1 or newer, Apple Silicon native version only)
Xcode 15.2
visionOS 1.0 (21N301) SDK
Apple Silicon Mac for development
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:
Hi, I upgraded my project from 0.7.1 to 1.0.3, but build now fails with this error:
NullReferenceException: Object reference not set to an instance of an object
Unity.PolySpatial.Internals.Editor.VisionOSBuildPostProcessor.WriteVisionOSSettings (System.String outputPath) (at ./Library/PackageCache/com.unity.polyspatial.visionos@1.0.3/Editor/VisionOSBuildProcessor.cs:286)
Unity.PolySpatial.Internals.Editor.VisionOSBuildPostProcessor.DoPostprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at ./Library/PackageCache/com.unity.polyspatial.visionos@1.0.3/Editor/VisionOSBuildProcessor.cs:115)
Rethrow as BuildFailedException: Exception of type âUnityEditor.Build.BuildFailedExceptionâ was thrown.
Unity.PolySpatial.Internals.Editor.VisionOSBuildPostProcessor.DoPostprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at ./Library/PackageCache/com.unity.polyspatial.visionos@1.0.3/Editor/VisionOSBuildProcessor.cs:141)
Unity.PolySpatial.Internals.Editor.VisionOSBuildPostProcessor.OnPostprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at ./Library/PackageCache/com.unity.polyspatial.visionos@1.0.3/Editor/VisionOSBuildProcessor.cs:93)
UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass18_0.b__1 (UnityEditor.Build.IPostprocessBuildWithReport bpp) (at /Users/bokken/build/output/unity/unity/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:529)
UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List1[T] oneInterfaces, System.Action1[T] invocationOne, System.Collections.Generic.List1[T] twoInterfaces, System.Action1[T] invocationTwo, System.Boolean exitOnFailure) (at /Users/bokken/build/output/unity/unity/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:465)
UnityEditor.BuildPlayerWindow:BuildPlayerAndRun() (at /Users/bokken/build/output/unity/unity/Editor/Mono/BuildPlayerWindow.cs:189)
I tried to updating Unity from 2023.3.16 to 2023.3.18, but I still get the same error. I also tried to completely remove PolySpatial packages and install them from the Build Settings. Any advice? We are about to submit our app to the app store. Thanks!
EDIT: I fixed the issue by simply deleting the library folder.
Trying to upgrade our project and coming across a few UI Canvas issues already:
[Blocker]This bug seems to have come back. Viewing our game from the left of straight-on shows a lot of transparency issues
[Blocker] Elements in a scroll view that have scrolled outside of their mask are still highlightable and selectable
[Blocker] Toggles and Radio buttons have stopped working
Itâs also really hard to navigate UI scenes in the game view in editor, as it seems during raycasts, the order in the hierarchy of UI elements is not respected - ie, a button sitting on top of an image (that is a raycast target) will not be selectable, as the image blocks input (raycasts) to the button
Fixed: We have a hands on lab tomorrow, it would be helpful to bring our project built on the latest so we can submit our build for launch.
First Approach (upgrade project to 1.0.3)
Deleting the Library allowed us to build our project which we upgraded to visionOS support 1.0.3. However, it wonât build in xcode.
Libraries/com.unity.polyspatial.visionos/UnityLibrary.swift:18:40 Value of type âUnityFrameworkâ has no member âkeyboardTextFieldâ
Update: upgrading to Unity 2022.18 fixes the above. However, the build loads but in an empty window. We hear the interactions happening, but there are no visuals. Just a window bar and x button from visionOS.
Update2: In case this helps others. Switching to project settings/apple visionOS/ VR and project settings/polyspatial/ default unbounded worked. Great job Unity on the VR mode update. Unity 2022.18 Updated from PS 0.7.1 to PS 1.0.3
Second Approach (did not work)
Importing a few assets into the VR template for 1.0.3 like @joe_nk we are also getting this error in the xcode sim. Content appears, but the navigation controls are disabled.
âPresenting a drawable without a device anchor. This drawable wonât be presented.â
ie, a button sitting on top of an image (that is a raycast target) will not be selectable,
Can you provide a sample scene/project for this?
When you say the button is âoverâ the image, do you mean in z order, or in hierarchy order? Are the button and the image in the same z position? If you enable the bounds display in Xcode, how do the bounds look like in the simulator?
[Blocker] Toggles and Radio buttons have stopped working
Can you provide more info here? I just made a sample scene with toggles in it yesterday using 1.0.3 and they work just fine.
[Blocker] Elements in a scroll view that have scrolled outside of their mask are still highlightable and selectable
This is most likely because masking is just a shader operation that does nothing with the actual hierarchy in any way, while hit testing involves a component applied to the entity in the hierarchy. Weâll look into this asap.
[Blocker] Elements in a scroll view that have scrolled outside of their mask are still highlightable and selectable
This may also be a known issue with the HoverEffectComponent and fully transparent items. Itâs that component that controls both the highlight you see as well as the interaction notification to Unity when you âclickâ the entity.
Weâve provided feedback to Apple that the HoverEffectComponent is visible even with 100% transparency, and that seems like something they might fix on their end. It might help convince them if you were to report this as well through their Feedback Assistant.
Some of our mp3 files arenât working in 2022.3.18f1.
Errors during import of AudioClip Assets/1.mp3:
FSBTool ERROR: Internal error from FMOD sub-system.
FSBTool ERROR: Internal error from FMOD sub-system.
It was working fine in 2022.3.13. All older versions after .13 had the same problem.
We are generating those mp3 in runtime and some of them arenât playable. Text of error different - Error: Cannot create FMOD::Sound instance for clip "" (FMOD error: Error loading file. ).
This mp3 canât be played - link
This mp3 can played by 2022.3.18 - link
Iâm getting the same thing since the update from 2022.3.16 to 2022.3.18. We are loading dynamic mp3s and some are fine while others are failing with this same error.
Iâve made a simple repo case shown in this gif - here a button (bottom) is nested inside a parent object and the parent has a ray-cartable image. In editor, this will block input to the button. This doesnât happen in simulator or on device, but obviously makes testing in editor very tedious, as I have to go and disable parts of the hierarchy
By the way, in all of the bug reporting it feels like I donât get the chance to say you guys are absolutely smashing it. Massive respect for what youâve all achieved in such a short amount of time. I can only imagine how ready for a holiday you all are.
We are getting the same error on 2 of our MP3s, but none of the others. We realized this when we noticed no addressable asset groups were being included in the build at all, and found manually building addressables this error printed.
Ok, so I pulled your project, ran it and⌠it works fine for me.
My first suggestion is to make sure that the image is not a raycast target itself if you assume that you need to hit children underneath it. Iâm not sure how that flies with your actual project, but that would be an immediate workaround for here.
Very strange! Our project is way too big to make that kind of change. I could try a library rebuild. Would there be any other environmental differences?