Custom Progressive mode --> Unity/Polyspatial not working

I'm setting:

.immersionStyle(selection: .constant(.progressive(0.1...1.0, initialAmount: 0.1)), in: .progressive(0.1...1.0, initialAmount: 0.1))

In UnityVisionOSSettings.swift before build out in Xcode.

I'm having an issue where this only works on occasion. Seems random. I'll either get no immersion level available (crown dial is greyed out and no changes can be made) or it will only allow 0.5 - 1.0 immersion (dial will go below 0.5 but springs back to 0.5 when released).

With no changes to my setup or how I'm setting immersionStyle I've been able to get this to work as I would expect. Wondering if there is some bug that would be causing this to fail. I've tested a simple NativeSDK progressive immersion style with same code for custom setting and it works everytime, so it's something related to Unity.

Here is the entire UnityVisionOSSettings that, from as far as I can tell, are controlling this:

`// GENERATED BY BUILD import Foundation import SwiftUI import PolySpatialRealityKit import UnityFramework

let unityStartInBatchMode = false

extension UnityPolySpatialApp { func initialWindowName() -> String { return "Unbounded" }

func getAllAvailableWindows() -> [String] { return ["Bounded-0.500x0.500x0.500", "Unbounded"] }

func getAvailableWindowsForMatch() -> [simd_float3] { return [] }

func displayProviderParameters() -> DisplayProviderParameters { return .init(
        framebufferWidth: 1830,
        framebufferHeight: 1600,
        leftEyePose: .init(position: .init(x: 0, y: 0, z: 0),
                           rotation: .init(x: 0, y: 0, z: 0, w: 1)),
        rightEyePose: .init(position: .init(x: 0, y: 0, z: 0),
                            rotation: .init(x: 0, y: 0, z: 0, w: 1)),
        leftProjectionHalfAngles: .init(left: -1, right: 1, top: 1, bottom: -1),
        rightProjectionHalfAngles: .init(left: -1, right: 1, top: 1, bottom: -1)
    )
}


@SceneBuilder
var mainScenePart0: some Scene {

                ImmersiveSpace(id: "Unbounded", for: UUID.self) { uuid in
                    PolySpatialContentViewWrapper(minSize: .init(1.000, 1.000, 1.000), maxSize: .init(1.000, 1.000, 1.000))
                        .environment(\.pslWindow, PolySpatialWindow(uuid.wrappedValue, "Unbounded", .init(1.000, 1.000, 1.000)))
                        .onImmersionChange() { oldContext, newContext in
                            PolySpatialWindowManagerAccess.onImmersionChange(oldContext.amount, newContext.amount)
                        }
                    KeyboardTextField().frame(width: 0, height: 0).modifier(LifeCycleHandlerModifier())
                } defaultValue: { UUID() }  .upperLimbVisibility(.automatic)
                .immersionStyle(selection: .constant(.progressive(0.1...1.0, initialAmount: 0.1)), in: .progressive(0.1...1.0, initialAmount: 0.1))
                WindowGroup(id: "Bounded-0.500x0.500x0.500", for: UUID.self) { uuid in
                    PolySpatialContentViewWrapper(minSize: .init(0.100, 0.100, 0.100), maxSize: .init(0.500, 0.500, 0.500))
                        .environment(\.pslWindow, PolySpatialWindow(uuid.wrappedValue, "Bounded-0.500x0.500x0.500", .init(0.500, 0.500, 0.500)))
                    KeyboardTextField().frame(width: 0, height: 0).modifier(LifeCycleHandlerModifier())
                } defaultValue: { UUID() } .windowStyle(.volumetric).defaultSize(width: 0.500, height: 0.500, depth: 0.500, in: .meters).windowResizability(.contentSize) .upperLimbVisibility(.automatic) .volumeWorldAlignment(.gravityAligned)
}

@SceneBuilder
var mainScene: some Scene {
    mainScenePart0
}


struct LifeCycleHandlerModifier: ViewModifier {
    func body(content: Content) -> some View {
        content
            .onOpenURL(perform: { url in
                UnityLibrary.instance?.setAbsoluteUrl(url.absoluteString)
            })
    }
}

}`

Answered by Vision Pro Engineer in 808228022

Hi @brycelynch

Unfortunately I am also seeing the problem you are describing. When I export a PolySpatial project from Unity, I am not able to set a range for a .progressive immersion style, even when I edit the generated swift files as you have described. Regardless of the range I specify, it seems to be ignored and clamped to 0.5...1.0.

Interestingly, I was not able to reproduce this problem in a non-Unity Xcode project. I created a new Xcode project from a template, choosing .progressive as the default immersion style, then I swapped out the generated immersionStyle modifier with the one you provided:

.immersionStyle(selection: .constant(.progressive(0.1...1.0, initialAmount: 0.1)), in: .progressive(0.1...1.0, initialAmount: 0.1))

This works as expected, and doesn't snap back, to the 0.5...1.0 range.

To make sure Unity is aware of this issue as well, could you please file a bug report with Unity, and then share the report id here? It will help us track down the cause. Thank you!

Accepted Answer

Hi @brycelynch

Unfortunately I am also seeing the problem you are describing. When I export a PolySpatial project from Unity, I am not able to set a range for a .progressive immersion style, even when I edit the generated swift files as you have described. Regardless of the range I specify, it seems to be ignored and clamped to 0.5...1.0.

Interestingly, I was not able to reproduce this problem in a non-Unity Xcode project. I created a new Xcode project from a template, choosing .progressive as the default immersion style, then I swapped out the generated immersionStyle modifier with the one you provided:

.immersionStyle(selection: .constant(.progressive(0.1...1.0, initialAmount: 0.1)), in: .progressive(0.1...1.0, initialAmount: 0.1))

This works as expected, and doesn't snap back, to the 0.5...1.0 range.

To make sure Unity is aware of this issue as well, could you please file a bug report with Unity, and then share the report id here? It will help us track down the cause. Thank you!

Yes, I will. I've tried to surface it on the Unity forums as potential bug but there wasn't a response, so I'll file a proper report.

I too am able to get it to function as expected outside of Unity... AND I will note that in Unity I can randomly get it to recognize the custom settings, though there isn't any rhyme or reason or order of operations I can identify. Sometimes... its just works. :/

CaseID:

CASE IN-86268

Custom Progressive mode --> Unity/Polyspatial not working
 
 
Q