Files
adriadri6972 d3d9c5f833 upload project
2025-07-31 15:21:08 +02:00

129 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.XR.Management;
namespace Unity.XR.XREAL
{
public enum StereoRenderingMode
{
MultiPass = UnityEngine.XR.XRSettings.StereoRenderingMode.MultiPass,
SinglePassInstanced = UnityEngine.XR.XRSettings.StereoRenderingMode.SinglePassInstanced,
}
[XRConfigurationData("XREAL", k_SettingsKey)]
public class XREALSettings : ScriptableObject
{
public const string k_SettingsKey = "com.unity.xr.management.xrealsettings";
public StereoRenderingMode StereoRendering = StereoRenderingMode.SinglePassInstanced;
public TrackingType InitialTrackingType = TrackingType.MODE_6DOF;
#if UNITY_ANDROID
public InputSource InitialInputSource = InputSource.Controller;
public GameObject VirtualController;
public bool SupportMultiResume = true;
public List<string> AddtionalPermissions = new List<string>();
#if XREAL_ENTERPRISE
public bool SupportMonoMode = false;
#endif
#endif
public List<XREALDeviceCategory> SupportDevices = new List<XREALDeviceCategory>() { XREALDeviceCategory.XREAL_DEVICE_CATEGORY_REALITY, XREALDeviceCategory.XREAL_DEVICE_CATEGORY_VISION };
public TextAsset LicenseAsset = null;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void OnLoad()
{
Debug.Log($"[XREALSettings] OnLoad");
#if UNITY_ANDROID
if (XREALUtility.IsLoaderActive())
{
if (GetSettings() != null && GetSettings().VirtualController != null)
{
Instantiate(GetSettings().VirtualController);
}
else
{
XREALVirtualController.CreateSingleton();
}
}
#endif
#if UNITY_STANDALONE
if (GetSettings() != null)
{
GetSettings().InitLicenseData();
}
#endif
if (XREALMainThreadDispather.Singleton == null)
{
XREALMainThreadDispather.CreateSingleton();
}
}
#if !UNITY_EDITOR
static XREALSettings s_Settings;
void Awake()
{
s_Settings = this;
}
#endif
internal unsafe void InitLicenseData()
{
byte[] licenseData = null;
var licenseFile = Path.Combine(Application.persistentDataPath, "nrsdk_license.bin");
if (File.Exists(licenseFile))
{
try
{
licenseData = File.ReadAllBytes(licenseFile);
}
catch (Exception ex)
{
Debug.LogException(ex);
}
}
if (licenseData == null && LicenseAsset != null)
licenseData = LicenseAsset.bytes;
if (licenseData != null && licenseData.Length > 0)
{
fixed (byte* ptr = licenseData)
{
XREALPlugin.InitLicenseData(new NativeView
{
data = ptr,
count = licenseData.Length
});
}
}
}
/// <summary>
/// Checks whether the current device is supported.
/// </summary>
/// <returns> Returns true if the device is supported; otherwise, false. </returns>
public bool IsDeviceSupported()
{
var deviceCategory = XREALPlugin.GetDeviceCategory();
return SupportDevices.Contains(deviceCategory);
}
public static XREALSettings GetSettings()
{
#if UNITY_EDITOR
return UnityEditor.EditorBuildSettings.TryGetConfigObject(k_SettingsKey, out XREALSettings settings) ? settings : null;
#else
return s_Settings;
#endif
}
}
public static partial class XREALPlugin
{
[DllImport(LibName)]
internal static extern void InitLicenseData(NativeView nativeView);
}
}