Files
VIVE-OpenXR-Unity/com.htc.upm.vive.openxr/Editor/ViveSpectatorCameraProcess.cs
2025-01-10 17:17:03 +08:00

81 lines
2.9 KiB
C#

using System;
using System.Reflection;
using UnityEditor;
using UnityEditor.Build.Reporting;
using UnityEditor.XR.OpenXR.Features;
using UnityEngine.XR.OpenXR.Features;
using UnityEngine.XR.OpenXR;
using static VIVE.OpenXR.VIVEFocus3Feature;
namespace VIVE.OpenXR.Editor
{
public class ViveSpectatorCameraProcess : OpenXRFeatureBuildHooks
{
public override int callbackOrder => 1;
public override Type featureType => typeof(VIVEFocus3Feature);
/// <summary>
/// Enable or disable the "First Person Observer" extension according to the Spectator Camera Feature.
/// </summary>
/// <param name="enable">Type True if Spectator Camera Feature is enabled. Otherwise, type False.</param>
private static void SetFirstPersonObserver(in bool enable)
{
var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(BuildTargetGroup.Android);
foreach (OpenXRFeature feature in settings.GetFeatures<OpenXRFeature>())
{
FieldInfo fieldInfoOpenXrExtensionStrings = typeof(OpenXRFeature).GetField(
"openxrExtensionStrings",
BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfoOpenXrExtensionStrings != null)
{
var openXrExtensionStringsArray =
((string)fieldInfoOpenXrExtensionStrings.GetValue(feature)).Split(' ');
foreach (var stringItem in openXrExtensionStringsArray)
{
if (string.IsNullOrEmpty(stringItem))
{
continue;
}
if (!string.Equals(stringItem, FirstPersonObserver.ViveFirstPersonObserver.OPEN_XR_EXTENSION_STRING))
{
continue;
}
feature.enabled = enable;
return;
}
}
}
}
#region The callbacks during the build process when your OpenXR Extension is enabled.
protected override void OnPreprocessBuildExt(BuildReport report)
{
if (IsViveSpectatorCameraEnabled())
{
SetFirstPersonObserver(true);
UnityEngine.Debug.Log("Enable \"First Person Observer\" extension due to the Spectator Camera Feature.");
}
else
{
SetFirstPersonObserver(false);
UnityEngine.Debug.Log("Disable \"First Person Observer\" extension because Spectator Camera Feature is closed.");
}
}
protected override void OnPostGenerateGradleAndroidProjectExt(string path)
{
}
protected override void OnPostprocessBuildExt(BuildReport report)
{
}
#endregion
}
}