Skip to content

Commit 08d13ae

Browse files
authored
Merge pull request #52 from De-Panther/dom_overlay_support
Support touch in Handheld AR using DOM Overlay
2 parents b4376c2 + ddc621f commit 08d13ae

File tree

9 files changed

+138
-4
lines changed

9 files changed

+138
-4
lines changed

Assets/WebGLTemplates/WebXR/webxr.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@
9595
XRManager.prototype.onRequestARSession = function () {
9696
if (!this.isARSupported) return;
9797
navigator.xr.requestSession('immersive-ar', {
98-
requiredFeatures: ['local-floor'] // TODO: Get this value from Unity
98+
requiredFeatures: ['local-floor'], // TODO: Get this value from Unity
99+
optionalFeatures: ['dom-overlay'],
100+
domOverlay: {root: this.canvas}
99101
}).then(async (session) => {
100102
session.isImmersive = true;
101103
session.isInSession = true;

Assets/WebGLTemplates/WebXRFullView/webxr.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@
9595
XRManager.prototype.onRequestARSession = function () {
9696
if (!this.isARSupported) return;
9797
navigator.xr.requestSession('immersive-ar', {
98-
requiredFeatures: ['local-floor'] // TODO: Get this value from Unity
98+
requiredFeatures: ['local-floor'], // TODO: Get this value from Unity
99+
optionalFeatures: ['dom-overlay'],
100+
domOverlay: {root: this.canvas}
99101
}).then(async (session) => {
100102
session.isImmersive = true;
101103
session.isInSession = true;

Assets/WebXR/Samples/Desert/Scenes/Desert.unity

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@ GameObject:
709709
- component: {fileID: 440688402}
710710
- component: {fileID: 440688401}
711711
- component: {fileID: 440688405}
712+
- component: {fileID: 440688406}
712713
m_Layer: 0
713714
m_Name: Sphere (1)
714715
m_TagString: Interactable
@@ -806,6 +807,18 @@ Rigidbody:
806807
m_Interpolate: 0
807808
m_Constraints: 0
808809
m_CollisionDetection: 0
810+
--- !u!114 &440688406
811+
MonoBehaviour:
812+
m_ObjectHideFlags: 0
813+
m_CorrespondingSourceObject: {fileID: 0}
814+
m_PrefabInstance: {fileID: 0}
815+
m_PrefabAsset: {fileID: 0}
816+
m_GameObject: {fileID: 440688400}
817+
m_Enabled: 1
818+
m_EditorHideFlags: 0
819+
m_Script: {fileID: 11500000, guid: 0af03eecb340eb240abc88e883024e11, type: 3}
820+
m_Name:
821+
m_EditorClassIdentifier:
809822
--- !u!1 &472310499
810823
GameObject:
811824
m_ObjectHideFlags: 0
@@ -1202,6 +1215,7 @@ GameObject:
12021215
- component: {fileID: 867024825}
12031216
- component: {fileID: 867024824}
12041217
- component: {fileID: 867024823}
1218+
- component: {fileID: 867024827}
12051219
m_Layer: 0
12061220
m_Name: Cube (1)
12071221
m_TagString: Interactable
@@ -1299,6 +1313,18 @@ MeshFilter:
12991313
m_PrefabAsset: {fileID: 0}
13001314
m_GameObject: {fileID: 867024821}
13011315
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
1316+
--- !u!114 &867024827
1317+
MonoBehaviour:
1318+
m_ObjectHideFlags: 0
1319+
m_CorrespondingSourceObject: {fileID: 0}
1320+
m_PrefabInstance: {fileID: 0}
1321+
m_PrefabAsset: {fileID: 0}
1322+
m_GameObject: {fileID: 867024821}
1323+
m_Enabled: 1
1324+
m_EditorHideFlags: 0
1325+
m_Script: {fileID: 11500000, guid: 0af03eecb340eb240abc88e883024e11, type: 3}
1326+
m_Name:
1327+
m_EditorClassIdentifier:
13021328
--- !u!4 &874373040 stripped
13031329
Transform:
13041330
m_CorrespondingSourceObject: {fileID: 400002, guid: 2b0960a38d49646e59e2a4b209a0ef93,
@@ -2165,6 +2191,7 @@ GameObject:
21652191
- component: {fileID: 1543435173}
21662192
- component: {fileID: 1543435175}
21672193
- component: {fileID: 1543435174}
2194+
- component: {fileID: 1543435178}
21682195
m_Layer: 0
21692196
m_Name: Cube
21702197
m_TagString: Interactable
@@ -2262,6 +2289,18 @@ Transform:
22622289
m_Father: {fileID: 1119766362}
22632290
m_RootOrder: 1
22642291
m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
2292+
--- !u!114 &1543435178
2293+
MonoBehaviour:
2294+
m_ObjectHideFlags: 0
2295+
m_CorrespondingSourceObject: {fileID: 0}
2296+
m_PrefabInstance: {fileID: 0}
2297+
m_PrefabAsset: {fileID: 0}
2298+
m_GameObject: {fileID: 1543435172}
2299+
m_Enabled: 1
2300+
m_EditorHideFlags: 0
2301+
m_Script: {fileID: 11500000, guid: 0af03eecb340eb240abc88e883024e11, type: 3}
2302+
m_Name:
2303+
m_EditorClassIdentifier:
22652304
--- !u!1 &1544748170
22662305
GameObject:
22672306
m_ObjectHideFlags: 0
@@ -2275,6 +2314,7 @@ GameObject:
22752314
- component: {fileID: 1544748174}
22762315
- component: {fileID: 1544748173}
22772316
- component: {fileID: 1544748172}
2317+
- component: {fileID: 1544748176}
22782318
m_Layer: 0
22792319
m_Name: Cube (2)
22802320
m_TagString: Interactable
@@ -2372,6 +2412,18 @@ MeshFilter:
23722412
m_PrefabAsset: {fileID: 0}
23732413
m_GameObject: {fileID: 1544748170}
23742414
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
2415+
--- !u!114 &1544748176
2416+
MonoBehaviour:
2417+
m_ObjectHideFlags: 0
2418+
m_CorrespondingSourceObject: {fileID: 0}
2419+
m_PrefabInstance: {fileID: 0}
2420+
m_PrefabAsset: {fileID: 0}
2421+
m_GameObject: {fileID: 1544748170}
2422+
m_Enabled: 1
2423+
m_EditorHideFlags: 0
2424+
m_Script: {fileID: 11500000, guid: 0af03eecb340eb240abc88e883024e11, type: 3}
2425+
m_Name:
2426+
m_EditorClassIdentifier:
23752427
--- !u!4 &1612252589 stripped
23762428
Transform:
23772429
m_CorrespondingSourceObject: {fileID: 400002, guid: 2b0960a38d49646e59e2a4b209a0ef93,
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using UnityEngine;
2+
3+
[RequireComponent(typeof(Rigidbody))]
4+
public class MouseDragObject : MonoBehaviour
5+
{
6+
private Camera currentCamera;
7+
private new Rigidbody rigidbody;
8+
private Vector3 screenPoint;
9+
private Vector3 offset;
10+
11+
void Awake()
12+
{
13+
rigidbody = GetComponent<Rigidbody>();
14+
}
15+
16+
void OnMouseDown()
17+
{
18+
currentCamera = FindCamera();
19+
if (currentCamera != null)
20+
{
21+
screenPoint = currentCamera.WorldToScreenPoint(gameObject.transform.position);
22+
offset = gameObject.transform.position - currentCamera.ScreenToWorldPoint(GetMousePosWithScreenZ(screenPoint.z));
23+
}
24+
}
25+
26+
void OnMouseUp()
27+
{
28+
currentCamera = null;
29+
}
30+
31+
void FixedUpdate()
32+
{
33+
if (currentCamera != null)
34+
{
35+
Vector3 currentScreenPoint = GetMousePosWithScreenZ(screenPoint.z);
36+
rigidbody.velocity = Vector3.zero;
37+
rigidbody.MovePosition(currentCamera.ScreenToWorldPoint(currentScreenPoint) + offset);
38+
}
39+
}
40+
41+
Vector3 GetMousePosWithScreenZ(float screenZ)
42+
{
43+
return new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenZ);
44+
}
45+
46+
Camera FindCamera()
47+
{
48+
Camera[] cameras = FindObjectsOfType<Camera>();
49+
Camera result = null;
50+
int camerasSum = 0;
51+
foreach (var camera in cameras)
52+
{
53+
if (camera.enabled)
54+
{
55+
result = camera;
56+
camerasSum++;
57+
}
58+
}
59+
if (camerasSum > 1)
60+
{
61+
result = null;
62+
}
63+
return result;
64+
}
65+
}

Assets/WebXR/Samples/Desert/Scripts/MouseDragObject.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Build/Build/Build.data.unityweb

319 KB
Binary file not shown.

Build/Build/Build.wasm

1.13 MB
Binary file not shown.

Build/Build/Build.wasm.framework.unityweb

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

Build/webxr.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@
9595
XRManager.prototype.onRequestARSession = function () {
9696
if (!this.isARSupported) return;
9797
navigator.xr.requestSession('immersive-ar', {
98-
requiredFeatures: ['local-floor'] // TODO: Get this value from Unity
98+
requiredFeatures: ['local-floor'], // TODO: Get this value from Unity
99+
optionalFeatures: ['dom-overlay'],
100+
domOverlay: {root: this.canvas}
99101
}).then(async (session) => {
100102
session.isImmersive = true;
101103
session.isInSession = true;

0 commit comments

Comments
 (0)