Rufus31415 / Simple-WebXR-Unity

⭐ Bringing WebXR to Unity 3D ! B-)
https://rufus31415.github.io/webxr/MRTK-HandInteraction/
MIT License
573 stars 82 forks source link

Add hit test support #33

Open Rufus31415 opened 3 years ago

Rufus31415 commented 3 years ago

https://immersive-web.github.io/hit-test/

gisornator commented 2 years ago

Hey! I was testing Hit Test on iOS with great success but it seems to not work properly on Android. Any idea?

EDIT: Remote debugging gave me the following error

"PROD-BUILD.framework.js:92 Uncaught (in promise) DOMException: Failed to execute 'requestHitTestSource' on 'XRSession': Hit test feature is not supported by the session. at someurl-PROD-BUILD.framework.js:92:53710"

Rufus31415 commented 2 years ago

Hi! This means your browser doesn't support hit test. But I should test that XRSession contains requestHitTestSource to warn if this feature is not supported

gisornator commented 2 years ago

Technically, the browser should support it. I tested it with Chrome 96.0.4664.92 (Android).

E.g. testing it through this works fine in the same browser: https://chromestatus.com/feature/4755348300759040

gisornator commented 2 years ago

One thing I found:

According to several resources, it seems that it is required to ask for hit-testing when starting the AR Session: https://developer.mozilla.org/en-US/docs/Web/API/XRSession/requestHitTestSource

So maybe (that's just a guess because I can try it earliest in the evening) that line 575 (SimpleWebXR.jslib) needs to be changed to require the hit-test module:

navigator.xr.requestSession(_isArSupported ? 'immersive-ar' : 'immersive-vr', { requiredFeatures: ["local", "hit-test"], optionalFeatures: ['local-floor', 'hand-tracking'] }).then(function (session)

gisornator commented 2 years ago

Okay, I was able to test it in the meantime and the solution from above worked now! I have a different issue now in regards of Unity's Input.Touch system. I'm not getting any errors in the console but I think this is related to the full screen.

Rufus31415 commented 2 years ago

You are right, from now on, the hit-test feature shoul be declared, I'll add that here : https://github.com/Rufus31415/Simple-WebXR-Unity/blob/a9060413037d6b5dd985abba29ed17fcd51ff79d/com.rufus31415.simplewebxr/Runtime/Plugins/WebGL/SimpleWebXR.jslib#L575 Thanks

On Android, I know that for safety, in full screen mode, a new context is created and I'm not sure if Input.Touch which reacts on javascript events on the

still works. The only way to access the touch during a session is through the WebXR API with events InputSourceSelect, InputSourceSelectStart, ...

gisornator commented 2 years ago

Thanks for the quick response! Yea, I will try that later tonight :) do you have something in the examples on how to interact with UI elements and InputSourceSelect, etc?

Rufus31415 commented 2 years ago

If you use it with MRTK, WebXR events are propagated to MRTK core. So you just have nothing special to do except choosing your input source in MRTK settings

DeveloperARKids commented 2 years ago

I cant touch my ui button and 3d collider when in AR mode fullscreen, so i cant have any interaction after AR start. any example to fix this?