9using System.Collections.Generic;
16 public static class MeshRendererConversion {
17 private const string CONTEXT_PATH =
"CONTEXT/MeshRenderer/Convert To Leap Graphic Mesh";
19 [MenuItem(CONTEXT_PATH)]
20 public static void convert(MenuCommand command) {
21 var graphicRenderer = (command.context as MeshRenderer).GetComponentInParent<LeapGraphicRenderer>();
23 if (graphicRenderer.groups.Count == 0) {
24 graphicRenderer.editor.CreateGroup(typeof(LeapBakedRenderer));
27 var group = graphicRenderer.groups[0];
29 var graphics =
new List<LeapMeshGraphic>();
30 var meshRenderers = (command.context as MeshRenderer).GetComponentsInChildren<MeshRenderer>();
31 foreach (var meshRenderer
in meshRenderers) {
32 var material = meshRenderer.sharedMaterial;
33 if (material ==
null)
continue;
35 var shader = material.shader;
36 if (shader ==
null)
continue;
38 var filter = meshRenderer.GetComponent<MeshFilter>();
39 if (filter ==
null)
continue;
41 var mesh = filter.sharedMesh;
42 if (mesh ==
null)
continue;
44 int propCount = ShaderUtil.GetPropertyCount(shader);
45 for (
int i = 0; i < propCount; i++) {
46 if (ShaderUtil.GetPropertyType(shader, i) == ShaderUtil.ShaderPropertyType.TexEnv) {
47 string propName = ShaderUtil.GetPropertyName(shader, i);
49 if (material.GetTexture(propName) ==
null)
continue;
51 var feature = group.features.Query().
52 OfType<LeapTextureFeature>().
53 FirstOrDefault(f => f.propertyName == propName);
55 if (feature ==
null) {
56 feature = group.editor.AddFeature(typeof(LeapTextureFeature)) as LeapTextureFeature;
57 feature.channel =
UnityEngine.Rendering.UVChannelFlags.UV0;
58 feature.propertyName = propName;
63 var graphic = meshRenderer.gameObject.AddComponent<LeapMeshGraphic>();
64 Undo.RegisterCreatedObjectUndo(graphic,
"Create Leap Mesh Graphic");
66 group.TryAddGraphic(graphic);
67 graphics.Add(graphic);
70 foreach (var graphic
in graphics) {
71 var meshRenderer = graphic.GetComponent<MeshRenderer>();
72 var meshFilter = graphic.GetComponent<MeshFilter>();
73 var material = meshRenderer.sharedMaterial;
75 graphic.SetMesh(meshFilter.sharedMesh);
77 foreach (var dataObj
in graphic.featureData) {
78 var textureData = dataObj as LeapTextureData;
79 if (textureData ==
null) {
83 var feature = textureData.feature as LeapTextureFeature;
84 if (!material.HasProperty(feature.propertyName)) {
88 Texture2D tex2d = material.GetTexture(feature.propertyName) as Texture2D;
93 textureData.texture = tex2d;
96 Undo.DestroyObjectImmediate(meshRenderer);
97 Undo.DestroyObjectImmediate(meshFilter);
100 group.renderer.editor.ScheduleRebuild();
103 [MenuItem(CONTEXT_PATH, validate =
true)]
104 public static bool convertValidate(MenuCommand command) {
105 var graphicRenderer = (command.context as MeshRenderer).GetComponentInParent<LeapGraphicRenderer>();
106 return graphicRenderer !=
null;