OpenVRBuildProcessor.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. using UnityEditor.Build;
  6. using UnityEditor.Build.Reporting;
  7. #if UNITY_XR_MANAGEMENT
  8. using UnityEngine.XR;
  9. using UnityEngine.Experimental.XR;
  10. using UnityEngine.XR.Management;
  11. using UnityEditor.XR.Management;
  12. namespace Unity.XR.OpenVR
  13. {
  14. public class OpenVRBuildProcessor : IPreprocessBuildWithReport
  15. {
  16. private readonly string[] runtimePluginNames = new string[]
  17. {
  18. "XRSDKOpenVR",
  19. "openvr_api",
  20. "vc14",
  21. };
  22. public int callbackOrder { get; set; }
  23. public bool ShouldIncludeRuntimePluginsInBuild(string path)
  24. {
  25. XRGeneralSettings generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));
  26. if (generalSettings == null)
  27. return false;
  28. foreach (var loader in generalSettings.Manager.loaders)
  29. {
  30. if (loader is OpenVRLoader)
  31. return true;
  32. }
  33. return false;
  34. }
  35. public void OnPreprocessBuild(BuildReport report)
  36. {
  37. var allPlugins = PluginImporter.GetAllImporters();
  38. foreach (var plugin in allPlugins)
  39. {
  40. if (plugin.isNativePlugin)
  41. {
  42. foreach (var pluginName in runtimePluginNames)
  43. {
  44. if (plugin.assetPath.Contains(pluginName))
  45. {
  46. plugin.SetIncludeInBuildDelegate(ShouldIncludeRuntimePluginsInBuild);
  47. break;
  48. }
  49. }
  50. }
  51. }
  52. }
  53. }
  54. }
  55. #endif