I’m building a visionOS app with an ImmersiveSpace, and I want to show a menu or control panel inside that immersive space.
The menu would be created as part of the app’s immersive content, for example as a SwiftUI attachment in a RealityView, or as a custom RealityKit entity with UI-like content.
What I would like is for this in-space menu to behave more like a regular visionOS 2D window:
The user can move the menu naturally.
While the menu is being moved, it automatically adjusts its orientation to face the user.
It maintains a comfortable apparent size or distance while being repositioned.
It avoids awkward angles or unreadable placement.
It feels similar to the system-managed behavior of regular 2D windows.
My question is: is there a supported way to give an in-ImmersiveSpace menu the same placement and movement behavior as a normal 2D window?
More specifically:
Is there a built-in component or API that provides window-like movement, billboard-facing behavior, comfortable distance handling, or automatic scaling for custom panels inside an immersive space?
If not, is the recommended approach to implement this behavior manually in RealityKit, for example by tracking the user’s head position and updating the panel’s transform?
If manual implementation is required, are there recommended comfort guidelines for menu distance, scale, rotation limits, and movement behavior in immersive spaces?
Alternatively, is the recommended design to use a regular 2D window or utility panel outside the immersive content, rather than trying to recreate window behavior inside the ImmersiveSpace?