GvrXREventsSubscriber.cs
3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//-----------------------------------------------------------------------
// <copyright file="GvrXREventsSubscriber.cs" company="Google Inc.">
// Copyright 2018 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
//-----------------------------------------------------------------------
using System.Collections;
using UnityEngine;
#if UNITY_2017_2_OR_NEWER
using UnityEngine.XR;
#else
using XRDevice = UnityEngine.VR.VRDevice;
using XRSettings = UnityEngine.VR.VRSettings;
#endif // UNITY_2017_2_OR_NEWER
/// <summary>Handler for subscribing XR Unity actions to GVR Actions.</summary>
public class GvrXREventsSubscriber : MonoBehaviour
{
private static GvrXREventsSubscriber instance;
private string instanceLoadedDeviceName;
/// <summary>Gets the name of the loaded GVR device.</summary>
/// <remarks><para>
/// This should be used in place of `XRSettings.loadedDeviceName`, which allocates small
/// amounts of memory on every call.
/// </para><para>
/// When using 2018.3 and above, a cached copy of `XRSettings.loadedDeviceName` which updates
/// whenever the `OnDeviceLoadAction` event triggers.
/// </para><para>
/// On 2018.2 and below, a one-time snapshot of the initial `XRSettings.loadedDeviceName` taken
/// when this component is instantiated. If `loadedDeviceName` is expected to change during
/// runtime in 2018.2 or earlier, use the setter to assign `XRSettings.loadedDeviceName` when
/// this is expected to happen.
/// </para></remarks>
/// <value>The name of the loaded GVR device.</value>
[System.Diagnostics.CodeAnalysis.SuppressMessage("UnityRules.LegacyGvrStyleRules",
"VR1001:AccessibleNonConstantPropertiesMustBeUpperCamelCase",
Justification = "Legacy Public API.")]
public static string loadedDeviceName
{
get { return GetInstance().instanceLoadedDeviceName; }
private set { GetInstance().instanceLoadedDeviceName = value; }
}
private static void OnDeviceLoadAction(string newLoadedDeviceName)
{
loadedDeviceName = newLoadedDeviceName;
}
private static GvrXREventsSubscriber GetInstance()
{
if (instance == null)
{
GameObject gvrXREventsSubscriber = new GameObject("GvrXREventsSubscriber");
gvrXREventsSubscriber.AddComponent<GvrXREventsSubscriber>();
}
return instance;
}
private void Awake()
{
instance = this;
loadedDeviceName = XRSettings.loadedDeviceName;
#if UNITY_2018_3_OR_NEWER
XRDevice.deviceLoaded += OnDeviceLoadAction;
#endif // UNITY_2018_3_OR_NEWER
}
}