WorldWebARMenu.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using UnityEngine;
  7. using UnityEditor;
  8. namespace Imagine.WebAR.Editor
  9. {
  10. public class WorldWebARMenu
  11. {
  12. [MenuItem("Assets/Imagine WebAR/Create/WorldTracker", false, 1100)]
  13. public static void CreateWorldTracker()
  14. {
  15. GameObject prefab = (GameObject)AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Imagine/WorldTracker/Prefabs/WorldTracker.prefab");
  16. GameObject gameObject = (GameObject)PrefabUtility.InstantiatePrefab(prefab);
  17. PrefabUtility.UnpackPrefabInstance(gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction);
  18. Selection.activeGameObject = gameObject;
  19. gameObject.name = "WorldTracker";
  20. }
  21. [MenuItem("Assets/Imagine WebAR/Create/AR Camera", false, 1120)]
  22. public static void CreateARCamera()
  23. {
  24. GameObject prefab = (GameObject)AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Imagine/Common/Prefabs/ARCamera.prefab");
  25. GameObject gameObject = (GameObject)PrefabUtility.InstantiatePrefab(prefab);
  26. PrefabUtility.UnpackPrefabInstance(gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction);
  27. Selection.activeGameObject = gameObject;
  28. gameObject.name = "ARCamera";
  29. }
  30. [MenuItem("Assets/Imagine WebAR/Update Plugin to URP", false, 1200)]
  31. public static void SetURP()
  32. {
  33. if (EditorUtility.DisplayDialog(
  34. "Update Imagine WebAR Plugin to URP",
  35. "Please make sure that the Universal RP package is already installed before doing this step.",
  36. "Proceed",
  37. "Cancel"))
  38. {
  39. string[] files = Directory.GetFiles(Application.dataPath + "/Imagine/WorldTracker/Demos/Materials", "*.mat", SearchOption.TopDirectoryOnly);
  40. foreach (var file in files)
  41. {
  42. var path = file.Replace(Application.dataPath, "Assets");
  43. var mat = AssetDatabase.LoadAssetAtPath<Material>(path);
  44. if (mat.shader.name == "Standard")
  45. {
  46. mat.shader = Shader.Find("Universal Render Pipeline/Lit");
  47. }
  48. else if (mat.shader.name == "Imagine/ARShadow")
  49. {
  50. mat.shader = Shader.Find("Imagine/ARShadowURP");
  51. }
  52. }
  53. AddDefineSymbol("IMAGINE_URP");
  54. EditorUtility.DisplayDialog("Completed", "Imagine WebAR Plugin is now set to URP. \n\nSome URP features such as HDR and Post-Processing may be partially/fully unsupported.", "Ok");
  55. }
  56. }
  57. [MenuItem("Assets/Imagine WebAR/Roll-back Plugin to Built-In RP", false, 1201)]
  58. public static void SetBuiltInRP ()
  59. {
  60. if (EditorUtility.DisplayDialog(
  61. "Roll-back Imagine WebAR Plugin to Built-In RP",
  62. "Plese confirm.",
  63. "Proceed",
  64. "Cancel"))
  65. {
  66. string[] files = Directory.GetFiles(Application.dataPath + "/Imagine/WorldTracker/Demos/Materials", "*.mat", SearchOption.TopDirectoryOnly);
  67. foreach (var file in files)
  68. {
  69. var path = file.Replace(Application.dataPath, "Assets");
  70. var mat = AssetDatabase.LoadAssetAtPath<Material>(path);
  71. if (mat.shader.name == "Universal Render Pipeline/Lit" || mat.shader.name == "Hidden/InternalErrorShader")
  72. {
  73. mat.shader = Shader.Find("Standard");
  74. }
  75. else if (mat.shader.name == "Imagine/ARShadowURP")
  76. {
  77. mat.shader = Shader.Find("Imagine/ARShadow");
  78. }
  79. }
  80. RemoveDefineSymbol("IMAGINE_URP");
  81. EditorUtility.DisplayDialog("Completed", "Imagine WebAR Plugin is now set to Built-In RP. Some edited materials may still require manual shader change","Ok");
  82. }
  83. }
  84. public static void AddDefineSymbol(string symbol)
  85. {
  86. string definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
  87. List<string> allDefines = definesString.Split(';').ToList();
  88. if (!allDefines.Contains(symbol))
  89. allDefines.Add(symbol);
  90. PlayerSettings.SetScriptingDefineSymbolsForGroup(
  91. EditorUserBuildSettings.selectedBuildTargetGroup,
  92. string.Join(";", allDefines.ToArray()));
  93. AssetDatabase.RefreshSettings();
  94. }
  95. public static void RemoveDefineSymbol(string symbol)
  96. {
  97. string definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
  98. List<string> allDefines = definesString.Split(';').ToList();
  99. allDefines.RemoveAll(s => s == symbol);
  100. PlayerSettings.SetScriptingDefineSymbolsForGroup(
  101. EditorUserBuildSettings.selectedBuildTargetGroup,
  102. string.Join(";", allDefines.ToArray()));
  103. AssetDatabase.RefreshSettings();
  104. }
  105. }
  106. }