unity-game-enginevirtual-realitygoogle-cardboarddaydream

Failed to pass eligibility in the Google Daydream Appstore for my hybrid Daydream + Cardboard app using Unity VR


I am getting the issue: The app does not use the Daydream controller properly The app allows users to use head gaze to position the cursor and interact with menu UI's "Play" button.

Here is my class that sets the GvrPointerInputModule.Pointer to either use the GVRLaserPointer (for daydream) or the GvrReticlePointer (for cardboard):

public class InputModuleSelector : MonoBehaviour {
    bool DaydreamControllerConntected = false;
    public GvrBasePointer DayDreamController;
    public GvrBasePointer CardboardController;

    private void Start() {
        refreshControllers();
    }

    public static bool IsDayDreamMode() {
        return VRSettings.loadedDeviceName != "cardboard";
    }

    private void refreshControllers() {
        DaydreamControllerConntected = IsDayDreamMode();
        DayDreamController.gameObject.SetActive(DaydreamControllerConntected);
        CardboardController.gameObject.SetActive(!DaydreamControllerConntected);

        GvrPointerInputModule.Pointer = DaydreamControllerConntected ? DayDreamController : CardboardController;
    }
}

If we use the daydream, we will use the laser, otherwise we will use the reticle.

How can I get my app to pass? Are we allowed to submit an app that can be used for both daydream and cardboard? Let me know if you need more information.

I am not sure if I should include a link... but my app is active on the playstore: https://play.google.com/store/apps/details?id=com.fungamefuntime.warehouse


Solution

  • I was able to figure and correct the issue with the help from Google Support. The main Camera rotates with the player's gaze direction. This means that the GvrControllerPointer depends on the main camera. This violated the requirements because you moved the laser when you also moved your head. Hierarchy View:

         Player
             Main Camera
                 GvrReticlePointer
                 GvrControllerPointer
    

    When I switched to this structure, the problem was solved. The GvrControllerPointer is now independent of the Main Camera and the player's gaze.

         Player
             GvrControllerPointer
             Main Camera
             GvrReticlePointer