App Lab Denied ~ View not resetting while holding the Meta Home button

Godot Version

4.2.2

Question

Why does Godot not reset the view when holding the Meta Home button down for 3 seconds? My game has failed App Lab usability test because of this:

Is there a way to force this in Godot? I must have missed it if there is.

Have I overlooked something? I’m really hoping I missed something & it’s a quick fix.

I’m afraid it has to do with the Meta loader in the open XR vendors plugin… in which case there’s nothing much I can do.

Can someone confirm that when they hold the home button it recenters the game world in their game running native Android?

The Meta specs are the user must be able to rotate 180 degrees & hold the home button & have the world re center:

This is controlled through the reference space option you choose (a setting in the OpenXR project settings), each option has pro’s and con’s and are dependent on the type of game you make.

  1. The default reference space is called Stage. This space is ideal for VR games as the tracking volume stays consistent but it also means that you are responsible for correctly reacting to the user holding the Meta home button to queue a recenter. You do this by connecting the pose_recentered signal on the OpenXRInterface. Now you can decide how to react to this. You can call XRServer.center_on_hmd to help you here but you have to be mindful that this will position your player on top of the XROrigin3D node, a teleport that might be unwanted (often all you want to do is change the direction the player is facing but keep the player where they currently are standing). What I often do here is store the current location of the player, then call center_on_hmd, then position the XROrigin3D node back where the player was standing, and reset the orientation of the XROrigin3D node.

  2. The second reference space is called Local. This is an ideal reference space for seated games, so driving simulators or flight simulators. The condition at startup differs a bit from runtime to runtime, some auto recenter, some remember the last centered position, you don’t have a lot of control about that. But when the user triggers a recenter, this means the XRCamera3D is automatically positioned where the XROrigin3D node currently is.

  3. The third reference space is called Local floor. This is an ideal reference space for AR games but can also be used for VR games. It basically works the same as the Local reference space but the height of the player is respected. In essence, when the player recenters, they are teleported to wherever the XROrigin3D node is. In VR games where you move the XROrigin3D node around with locomotion you probably still want to do extra work, so you would still use the pose_recentered logic the re-orient the XROrigin3D node and possibly move it back in place (or else users could get smart and do game breaking stuff like teleport through walls).

You can read some extra info here on how to hook up the signals.

Hey Thanks Bastiaan, I appreciate your help. I had just stumbled on the pose_recentered signal on the interface as you responded.

My game is a static sitting game. The players location never moves. Everything happens while sitting in the same place.

I’ll look into the default reference space now and mess with it.

I would change the reference space to Local. You’ll probably want to change where your XROrigin3D node is (basically you place it where the players head should be) and from that point onwards, it takes care of itself.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.