How can an in-ImmersiveSpace menu behave like a regular 2D window in visionOS?

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:

  1. The user can move the menu naturally.
  2. While the menu is being moved, it automatically adjusts its orientation to face the user.
  3. It maintains a comfortable apparent size or distance while being repositioned.
  4. It avoids awkward angles or unreadable placement.
  5. 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?

Answered by Vision Pro Engineer in 891381022

Hey @Sakuya_Izayoi,

Can you provide me with more information as to what exactly the content is within this menu? I would strongly encourage you to consider deferring to the system and using a Window or WindowGroup for this behavior.

You also might be able to take some learnings from some recently updated and published samples. Take a look at Associating a window with an immersive space and the the Solar System view of Hello World. Do these samples provide the experience you are looking for?

If you are able to use a SwiftUI view to accomplish this, that will provide the best user experience for your user. Otherwise you are right to consider looking at ManipulationComponent and BillboardComponent when building this part of your experience.

Let me know if this helps,
Michael

Hey @Sakuya_Izayoi,

Can you provide me with more information as to what exactly the content is within this menu? I would strongly encourage you to consider deferring to the system and using a Window or WindowGroup for this behavior.

You also might be able to take some learnings from some recently updated and published samples. Take a look at Associating a window with an immersive space and the the Solar System view of Hello World. Do these samples provide the experience you are looking for?

If you are able to use a SwiftUI view to accomplish this, that will provide the best user experience for your user. Otherwise you are right to consider looking at ManipulationComponent and BillboardComponent when building this part of your experience.

Let me know if this helps,
Michael

How can an in-ImmersiveSpace menu behave like a regular 2D window in visionOS?
 
 
Q