LoadXR.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEditor;
  4. using UnityEditor.XR.Management;
  5. using UnityEditor.XR.Management.Metadata;
  6. using UnityEngine;
  7. using UnityEngine.SceneManagement;
  8. using UnityEngine.XR.Management;
  9. public class LoadXR
  10. {
  11. private static string Path = "Build";
  12. /// <summary>
  13. /// 打包成APK
  14. /// </summary>
  15. [MenuItem("Build/Build APK")]
  16. public static void BuildAPK()
  17. {
  18. switch (GHZSDKSettings.loadSDKType)
  19. {
  20. case "Rhinox":
  21. LoadXR.LoadOnlyRhinox();
  22. break;
  23. case "Phone":
  24. LoadXR.LoadOnlyARCore();
  25. break;
  26. }
  27. List<string> slist = new List<string>();
  28. for (int i = 0; i < SceneManager.sceneCount; i++)
  29. {
  30. Scene sc = SceneManager.GetSceneAt(i);
  31. if (sc.IsValid())
  32. {
  33. slist.Add(sc.path);
  34. }
  35. }
  36. string AndroidPath = "/Android/";
  37. BuildPipeline.BuildPlayer(slist.ToArray(), Path + AndroidPath + GHZSDKSettings.loadSDKType + ".apk", BuildTarget.Android, BuildOptions.None);
  38. }
  39. public static void LoadOnlyARCore()
  40. {
  41. XRGeneralSettings androidXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Android);
  42. if (androidXRSettings == null)
  43. {
  44. var assignedSettings = ScriptableObject.CreateInstance<XRManagerSettings>() as XRManagerSettings;
  45. androidXRSettings.AssignedSettings = assignedSettings;
  46. EditorUtility.SetDirty(androidXRSettings); // Make sure this gets picked up for serialization later.
  47. }
  48. //取消当前选择的
  49. IReadOnlyList<XRLoader> list = androidXRSettings.Manager.activeLoaders;
  50. int hasCount = list.Count;
  51. //Debug.Log(hasCount);
  52. for (int i = 0; i < hasCount; i++)
  53. {
  54. string nameTemp = list[0].GetType().FullName;
  55. Debug.Log("disable xr plug:" + nameTemp);
  56. XRPackageMetadataStore.RemoveLoader(androidXRSettings.Manager, nameTemp, BuildTargetGroup.Android);
  57. }
  58. //启用
  59. string loaderTypeName = "UnityEngine.XR.ARCore.ARCoreLoader";
  60. XRPackageMetadataStore.AssignLoader(androidXRSettings.Manager, loaderTypeName, BuildTargetGroup.Android);
  61. }
  62. public static void LoadOnlyRhinox()
  63. {
  64. XRGeneralSettings androidXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Android);
  65. if (androidXRSettings == null)
  66. {
  67. var assignedSettings = ScriptableObject.CreateInstance<XRManagerSettings>() as XRManagerSettings;
  68. androidXRSettings.AssignedSettings = assignedSettings;
  69. EditorUtility.SetDirty(androidXRSettings); // Make sure this gets picked up for serialization later.
  70. }
  71. //取消当前选择的
  72. IReadOnlyList<XRLoader> list = androidXRSettings.Manager.activeLoaders;
  73. int hasCount = list.Count;
  74. //Debug.Log(hasCount);
  75. for (int i = 0; i < hasCount; i++)
  76. {
  77. string nameTemp = list[0].GetType().FullName;
  78. Debug.Log("disable xr plug:" + nameTemp);
  79. XRPackageMetadataStore.RemoveLoader(androidXRSettings.Manager, nameTemp, BuildTargetGroup.Android);
  80. }
  81. //启用
  82. string loaderTypeName = "Ximmerse.XR.XimmerseXRLoader";
  83. XRPackageMetadataStore.AssignLoader(androidXRSettings.Manager, loaderTypeName, BuildTargetGroup.Android);
  84. }
  85. }