SW 중심대학 OSS GIT 서버 박건태, 이승준, 고기완, 이준호 새로운 배포
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
5.3 KiB

4 years ago
  1. using UnityEngine;
  2. using UnityEngine.Rendering;
  3. using UnityEngine.XR.ARFoundation;
  4. namespace UnityEditor.XR.ARFoundation
  5. {
  6. internal static class SceneUtils
  7. {
  8. static readonly string k_DebugFaceMaterial = "Packages/com.unity.xr.arfoundation/Materials/DebugFace.mat";
  9. static readonly string k_DebugPlaneMaterial = "Packages/com.unity.xr.arfoundation/Materials/DebugPlane.mat";
  10. static readonly string k_ParticleMaterial = "Default-Particle.mat";
  11. static readonly string k_LineMaterial = "Default-Line.mat";
  12. static readonly Color k_ParticleColor = new Color(253f / 255f, 184f / 255f, 19f / 255f);
  13. static readonly float k_ParticleSize = 0.02f;
  14. [MenuItem("GameObject/XR/AR Session Origin", false, 10)]
  15. static void CreateARSessionOrigin()
  16. {
  17. var originGo = ObjectFactory.CreateGameObject("AR Session Origin", typeof(ARSessionOrigin));
  18. var cameraGo = ObjectFactory.CreateGameObject("AR Camera",
  19. typeof(Camera),
  20. typeof(ARPoseDriver),
  21. typeof(ARCameraManager),
  22. typeof(ARCameraBackground));
  23. Undo.SetTransformParent(cameraGo.transform, originGo.transform, "Parent camera to session origin");
  24. var camera = cameraGo.GetComponent<Camera>();
  25. // Enforce local transform as identity for new ARSessionOrigins
  26. camera.transform.localPosition = Vector3.zero;
  27. camera.transform.localRotation = Quaternion.identity;
  28. camera.clearFlags = CameraClearFlags.Color;
  29. camera.backgroundColor = Color.black;
  30. camera.nearClipPlane = 0.1f;
  31. camera.farClipPlane = 20f;
  32. var origin = originGo.GetComponent<ARSessionOrigin>();
  33. origin.camera = camera;
  34. }
  35. [MenuItem("GameObject/XR/AR Session", false, 10)]
  36. static void CreateARSession()
  37. {
  38. ObjectFactory.CreateGameObject("AR Session", typeof(ARSession), typeof(ARInputManager));
  39. }
  40. [MenuItem("GameObject/XR/AR Default Point Cloud", false, 10)]
  41. static void CreateARPointCloudVisualizer()
  42. {
  43. var go = ObjectFactory.CreateGameObject("AR Default Point Cloud",
  44. typeof(ARPointCloudParticleVisualizer));
  45. var particleSystem = go.GetComponent<ParticleSystem>();
  46. UnityEditorInternal.ComponentUtility.MoveComponentDown(particleSystem);
  47. UnityEditorInternal.ComponentUtility.MoveComponentDown(particleSystem);
  48. var main = particleSystem.main;
  49. main.loop = false;
  50. main.startSize = k_ParticleSize;
  51. main.startColor = k_ParticleColor;
  52. main.scalingMode = ParticleSystemScalingMode.Hierarchy;
  53. main.playOnAwake = false;
  54. var emission = particleSystem.emission;
  55. emission.enabled = false;
  56. var shape = particleSystem.shape;
  57. shape.enabled = false;
  58. var renderer = particleSystem.GetComponent<Renderer>();
  59. renderer.material = AssetDatabase.GetBuiltinExtraResource<Material>(k_ParticleMaterial);
  60. }
  61. [MenuItem("GameObject/XR/AR Default Plane", false, 10)]
  62. static void CreateARPlaneVisualizer()
  63. {
  64. var go = ObjectFactory.CreateGameObject("AR Default Plane",
  65. typeof(ARPlaneMeshVisualizer), typeof(MeshCollider), typeof(MeshFilter),
  66. typeof(MeshRenderer), typeof(LineRenderer));
  67. SetupMeshRenderer(go.GetComponent<MeshRenderer>(), k_DebugPlaneMaterial);
  68. SetupLineRenderer(go.GetComponent<LineRenderer>());
  69. }
  70. [MenuItem("GameObject/XR/AR Default Face", false, 10)]
  71. static void CreateARFaceVisualizer()
  72. {
  73. var go = ObjectFactory.CreateGameObject("AR Default Face",
  74. typeof(ARFaceMeshVisualizer), typeof(MeshCollider), typeof(MeshFilter),
  75. typeof(MeshRenderer));
  76. var meshRenderer = go.GetComponent<MeshRenderer>();
  77. SetupMeshRenderer(meshRenderer, k_DebugFaceMaterial);
  78. //self shadowing doesn't look good on the default face
  79. meshRenderer.receiveShadows = false;
  80. meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
  81. }
  82. static void SetupLineRenderer(LineRenderer lineRenderer)
  83. {
  84. var materials = new Material[1];
  85. materials[0] = AssetDatabase.GetBuiltinExtraResource<Material>(k_LineMaterial);
  86. lineRenderer.materials = materials;
  87. lineRenderer.loop = true;
  88. var curve = new AnimationCurve();
  89. curve.AddKey(0f, 0.005f);
  90. lineRenderer.widthCurve = curve;
  91. lineRenderer.startColor = Color.black;
  92. lineRenderer.endColor = Color.black;
  93. lineRenderer.numCornerVertices = 4;
  94. lineRenderer.numCapVertices = 4;
  95. lineRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  96. lineRenderer.receiveShadows = false;
  97. lineRenderer.useWorldSpace = false;
  98. }
  99. static void SetupMeshRenderer(MeshRenderer meshRenderer, string materialName)
  100. {
  101. var material = AssetDatabase.LoadAssetAtPath<Material>(materialName);
  102. meshRenderer.materials = new Material[] { material };
  103. }
  104. }
  105. }