Skip to content

Commit 057d651

Browse files
committed
Updated plugin to work with AR Foundation 2.0
1 parent 75a44d0 commit 057d651

9 files changed

+89
-37
lines changed

CandyCoded.ARFoundationComponents.asmdef

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"name": "CandyCoded.ARFoundationComponents",
33
"references": [
44
"CandyCoded",
5-
"Unity.XR.ARFoundation"
5+
"Unity.XR.ARFoundation",
6+
"Unity.XR.ARSubsystems"
67
],
78
"optionalUnityReferences": [],
89
"includePlatforms": [],
@@ -11,5 +12,6 @@
1112
"overrideReferences": false,
1213
"precompiledReferences": [],
1314
"autoReferenced": true,
14-
"defineConstraints": []
15+
"defineConstraints": [],
16+
"versionDefines": []
1517
}

Scripts/ARDistanceFromPlane.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class DistanceUpdateEvent : UnityEvent<bool, float>
1212
}
1313

1414
[RequireComponent(typeof(ARSessionOrigin))]
15+
[RequireComponent(typeof(ARRaycastManager))]
1516
[RequireComponent(typeof(ARPlaneManager))]
1617
public class ARDistanceFromPlane : MonoBehaviour
1718
{
@@ -20,21 +21,24 @@ public class ARDistanceFromPlane : MonoBehaviour
2021

2122
public ARSessionOrigin sessionOrigin { get; private set; }
2223

24+
public ARRaycastManager raycastManager { get; private set; }
25+
2326
public ARPlaneManager planeManager { get; private set; }
2427

2528
private void Awake()
2629
{
2730

2831
sessionOrigin = gameObject.GetComponent<ARSessionOrigin>();
32+
raycastManager = gameObject.GetComponent<ARRaycastManager>();
2933
planeManager = gameObject.GetComponent<ARPlaneManager>();
3034

3135
}
3236

3337
private void Start()
3438
{
3539

36-
if (ARSubsystemManager.systemState == ARSystemState.None ||
37-
ARSubsystemManager.systemState == ARSystemState.Unsupported)
40+
if (ARSession.state == ARSessionState.None ||
41+
ARSession.state == ARSessionState.Unsupported)
3842
{
3943

4044
enabled = false;
@@ -51,7 +55,7 @@ private void Update()
5155
return;
5256
}
5357

54-
var planeVisible = ARFoundationExtensions.IsLookingAtPlane(sessionOrigin, planeManager, out var pose);
58+
var planeVisible = ARFoundationExtensions.IsLookingAtPlane(raycastManager, planeManager, out var pose);
5559

5660
var distanceFromPlane = sessionOrigin.camera.transform.position - pose.position;
5761

Scripts/ARFoundationExtensions.cs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Collections.Generic;
22
using UnityEngine;
3-
using UnityEngine.Experimental.XR;
43
using UnityEngine.XR.ARFoundation;
4+
using UnityEngine.XR.ARSubsystems;
55

66
namespace CandyCoded.ARFoundationComponents
77
{
@@ -11,7 +11,7 @@ public static class ARFoundationExtensions
1111

1212
public static Vector2 CenterOfScreen => new Vector2(Screen.width, Screen.height) / 2;
1313

14-
public static bool RaycastToPlane(Vector3 position, ARSessionOrigin sessionOrigin, ARPlaneManager planeManager, out Pose pose, out ARPlane plane)
14+
public static bool RaycastToPlane(Vector2 position, ARRaycastManager raycastManager, ARPlaneManager planeManager, out Pose pose, out ARPlane plane)
1515
{
1616

1717
var hits = new List<ARRaycastHit>();
@@ -20,7 +20,7 @@ public static bool RaycastToPlane(Vector3 position, ARSessionOrigin sessionOrigi
2020

2121
plane = null;
2222

23-
if (!sessionOrigin.Raycast(position, hits, TrackableType.PlaneWithinPolygon))
23+
if (!raycastManager.Raycast(position, hits, TrackableType.Planes))
2424
{
2525
return false;
2626
}
@@ -29,34 +29,44 @@ public static bool RaycastToPlane(Vector3 position, ARSessionOrigin sessionOrigi
2929

3030
pose = hit.pose;
3131

32-
plane = planeManager.TryGetPlane(hit.trackableId);
32+
foreach (var trackable in planeManager.trackables)
33+
{
34+
35+
if (trackable.trackableId.Equals(hit.trackableId))
36+
{
37+
38+
plane = trackable;
39+
40+
}
41+
42+
}
3343

3444
return true;
3545

3646
}
3747

38-
public static bool IsLookingAtPlane(ARSessionOrigin sessionOrigin, ARPlaneManager planeManager, out Pose pose, out ARPlane plane)
48+
public static bool IsLookingAtPlane(ARRaycastManager raycastManager, ARPlaneManager planeManager, out Pose pose, out ARPlane plane)
3949
{
4050

41-
return RaycastToPlane(CenterOfScreen, sessionOrigin, planeManager, out pose, out plane);
51+
return RaycastToPlane(CenterOfScreen, raycastManager, planeManager, out pose, out plane);
4252

4353
}
4454

45-
public static bool IsLookingAtPlane(ARSessionOrigin sessionOrigin, ARPlaneManager planeManager, out Pose pose)
55+
public static bool IsLookingAtPlane(ARRaycastManager raycastManager, ARPlaneManager planeManager, out Pose pose)
4656
{
4757

48-
return RaycastToPlane(CenterOfScreen, sessionOrigin, planeManager, out pose, out var plane);
58+
return RaycastToPlane(CenterOfScreen, raycastManager, planeManager, out pose, out var plane);
4959

5060
}
5161

52-
public static bool IsLookingAtPlane(ARSessionOrigin sessionOrigin, ARPlaneManager planeManager)
62+
public static bool IsLookingAtPlane(ARRaycastManager raycastManager, ARPlaneManager planeManager)
5363
{
5464

55-
return RaycastToPlane(CenterOfScreen, sessionOrigin, planeManager, out var pose, out var plane);
65+
return RaycastToPlane(CenterOfScreen, raycastManager, planeManager, out var pose, out var plane);
5666

5767
}
5868

59-
public static bool HasTouchedPlane(ARSessionOrigin sessionOrigin, ARPlaneManager planeManager, out Pose pose, out ARPlane plane)
69+
public static bool HasTouchedPlane(ARRaycastManager raycastManager, ARPlaneManager planeManager, out Pose pose, out ARPlane plane)
6070
{
6171

6272
pose = Pose.identity;
@@ -70,21 +80,21 @@ public static bool HasTouchedPlane(ARSessionOrigin sessionOrigin, ARPlaneManager
7080

7181
var touch = Input.GetTouch(0);
7282

73-
return touch.phase == TouchPhase.Began && RaycastToPlane(touch.position, sessionOrigin, planeManager, out pose, out plane);
83+
return touch.phase == TouchPhase.Began && RaycastToPlane(touch.position, raycastManager, planeManager, out pose, out plane);
7484

7585
}
7686

77-
public static bool HasTouchedPlane(ARSessionOrigin sessionOrigin, ARPlaneManager planeManager, out Pose pose)
87+
public static bool HasTouchedPlane(ARRaycastManager raycastManager, ARPlaneManager planeManager, out Pose pose)
7888
{
7989

80-
return HasTouchedPlane(sessionOrigin, planeManager, out pose, out var plane);
90+
return HasTouchedPlane(raycastManager, planeManager, out pose, out var plane);
8191

8292
}
8393

84-
public static bool HasTouchedPlane(ARSessionOrigin sessionOrigin, ARPlaneManager planeManager)
94+
public static bool HasTouchedPlane(ARRaycastManager raycastManager, ARPlaneManager planeManager)
8595
{
8696

87-
return HasTouchedPlane(sessionOrigin, planeManager, out var pose, out var plane);
97+
return HasTouchedPlane(raycastManager, planeManager, out var pose, out var plane);
8898

8999
}
90100

Scripts/ARLightEstimation.cs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,17 @@ namespace CandyCoded.ARFoundationComponents
88
public class ARLightEstimation : MonoBehaviour
99
{
1010

11+
[SerializeField]
12+
private ARCameraManager _cameraManager;
13+
1114
#pragma warning disable CS0109
1215
public new Light light { get; private set; }
16+
17+
public new ARCameraManager cameraManager
18+
{
19+
get => _cameraManager;
20+
set => _cameraManager = value;
21+
}
1322
#pragma warning restore CS0109
1423

1524
private void Awake()
@@ -22,8 +31,8 @@ private void Awake()
2231
private void Start()
2332
{
2433

25-
if (ARSubsystemManager.systemState == ARSystemState.None ||
26-
ARSubsystemManager.systemState == ARSystemState.Unsupported)
34+
if (ARSession.state == ARSessionState.None ||
35+
ARSession.state == ARSessionState.Unsupported)
2736
{
2837

2938
enabled = false;
@@ -65,14 +74,28 @@ private void FrameChanged(ARCameraFrameEventArgs args)
6574
private void OnEnable()
6675
{
6776

68-
ARSubsystemManager.cameraFrameReceived += FrameChanged;
77+
if (cameraManager == null)
78+
{
79+
80+
return;
81+
82+
}
83+
84+
cameraManager.frameReceived += FrameChanged;
6985

7086
}
7187

7288
private void OnDisable()
7389
{
7490

75-
ARSubsystemManager.cameraFrameReceived -= FrameChanged;
91+
if (cameraManager == null)
92+
{
93+
94+
return;
95+
96+
}
97+
98+
cameraManager.frameReceived -= FrameChanged;
7699

77100
}
78101

Scripts/ARPlaceObjectOnPlane.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using UnityEngine;
22
using UnityEngine.Events;
3-
using UnityEngine.Experimental.XR;
43
using UnityEngine.XR.ARFoundation;
4+
using UnityEngine.XR.ARSubsystems;
55

66
namespace CandyCoded.ARFoundationComponents
77
{
@@ -54,7 +54,7 @@ public void PlaceObjectOnPlane(Pose pose, ARPlane plane)
5454
objectToPlaceGameObject.transform.position = pose.position + new Vector3(0, verticalOffset, 0);
5555
objectToPlaceGameObject.transform.rotation = pose.rotation;
5656

57-
if (plane.boundedPlane.Alignment == PlaneAlignment.Horizontal)
57+
if (plane.alignment.Equals(PlaneAlignment.HorizontalUp | PlaneAlignment.HorizontalDown))
5858
{
5959

6060
objectToPlaceGameObject.transform.LookAt(new Vector3(

Scripts/ARPlaneEvents.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class PlaneTouchedEvent : UnityEvent<Pose, ARPlane>
1919
}
2020

2121
[RequireComponent(typeof(ARSessionOrigin))]
22+
[RequireComponent(typeof(ARRaycastManager))]
2223
[RequireComponent(typeof(ARPlaneManager))]
2324
public class ARPlaneEvents : MonoBehaviour
2425
{
@@ -31,21 +32,24 @@ public class ARPlaneEvents : MonoBehaviour
3132

3233
public ARSessionOrigin sessionOrigin { get; private set; }
3334

35+
public ARRaycastManager raycastManager { get; private set; }
36+
3437
public ARPlaneManager planeManager { get; private set; }
3538

3639
private void Awake()
3740
{
3841

3942
sessionOrigin = gameObject.GetComponent<ARSessionOrigin>();
43+
raycastManager = gameObject.GetComponent<ARRaycastManager>();
4044
planeManager = gameObject.GetComponent<ARPlaneManager>();
4145

4246
}
4347

4448
private void Start()
4549
{
4650

47-
if (ARSubsystemManager.systemState == ARSystemState.None ||
48-
ARSubsystemManager.systemState == ARSystemState.Unsupported)
51+
if (ARSession.state == ARSessionState.None ||
52+
ARSession.state == ARSessionState.Unsupported)
4953
{
5054

5155
enabled = false;
@@ -62,7 +66,7 @@ private void Update()
6266
return;
6367
}
6468

65-
var planeVisible = ARFoundationExtensions.IsLookingAtPlane(sessionOrigin, planeManager, out var lookingAtPose, out var lookingAtPlane);
69+
var planeVisible = ARFoundationExtensions.IsLookingAtPlane(raycastManager, planeManager, out var lookingAtPose, out var lookingAtPlane);
6670

6771
PlaneUpdated?.Invoke(planeVisible, lookingAtPose, lookingAtPlane);
6872

@@ -71,7 +75,7 @@ private void Update()
7175
return;
7276
}
7377

74-
if (ARFoundationExtensions.HasTouchedPlane(sessionOrigin, planeManager, out var touchPose, out var touchPlane))
78+
if (ARFoundationExtensions.HasTouchedPlane(raycastManager, planeManager, out var touchPose, out var touchPlane))
7579
{
7680

7781
PlaneTouchedWithTouchPosition?.Invoke(touchPose, touchPlane);

Scripts/ARShowPlacementMarkerOnPlane.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using UnityEngine;
2-
using UnityEngine.Experimental.XR;
32
using UnityEngine.XR.ARFoundation;
3+
using UnityEngine.XR.ARSubsystems;
44

55
namespace CandyCoded.ARFoundationComponents
66
{
@@ -55,7 +55,7 @@ public void ShowPlacementMarkerOnPlane(bool planeVisible, Pose pose, ARPlane pla
5555
placementMarkerGameObject.transform.position = pose.position + new Vector3(0, verticalOffset, 0);
5656
placementMarkerGameObject.transform.rotation = pose.rotation;
5757

58-
if (plane.boundedPlane.Alignment == PlaneAlignment.Horizontal)
58+
if (plane.alignment.Equals(PlaneAlignment.HorizontalUp | PlaneAlignment.HorizontalDown))
5959
{
6060

6161
placementMarkerGameObject.transform.LookAt(new Vector3(

Scripts/CustomEditor/AutoPopulateScene.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ private static void SetupARFoundationGameObjects()
6565

6666
var sessionOrigin = GameObject.Find("AR Session Origin");
6767

68+
sessionOrigin.AddOrGetComponent<ARRaycastManager>();
69+
6870
var planeManager = sessionOrigin.AddOrGetComponent<ARPlaneManager>();
6971

7072
planeManager.planePrefab = defaultPlanePrefab;
@@ -76,6 +78,13 @@ private static void SetupARFoundationComponentsGameObjects()
7678

7779
var sessionOrigin = GameObject.Find("AR Session Origin");
7880

81+
var camera = GameObject.Find("AR Camera");
82+
var cameraManager = camera.AddOrGetComponent<ARCameraManager>();
83+
84+
var light = GameObject.Find("Directional Light");
85+
var lightEstimation = light.AddOrGetComponent<ARLightEstimation>();
86+
lightEstimation.cameraManager = cameraManager;
87+
7988
var planeEvents = sessionOrigin.AddOrGetComponent<ARPlaneEvents>();
8089
var placeObjectsOnPlane = sessionOrigin.AddOrGetComponent<ARPlaceObjectOnPlane>();
8190

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "com.candycoded.arfoundation-components",
33
"displayName": "ARFoundation-Components",
4-
"version": "1.0.0",
5-
"unity": "2018.3",
4+
"version": "2.0.0",
5+
"unity": "2019.1",
66
"description": "Generic components for use with ARFoundation",
77
"keywords": [
88
"components",
@@ -12,7 +12,7 @@
1212
"arkit"
1313
],
1414
"dependencies": {
15-
"com.candycoded.candycoded": "https://github.com/CandyCoded/CandyCoded.git#v1.1.0",
16-
"com.unity.xr.arfoundation": "1.0.0-preview.22"
15+
"com.candycoded.candycoded": "https://github.com/CandyCoded/CandyCoded.git#v1.1.8",
16+
"com.unity.xr.arfoundation": "2.1.0-preview.2"
1717
}
1818
}

0 commit comments

Comments
 (0)