using UnityEngine; using UnityEditor; using System.Collections.Generic; using System.Collections; using UnityEditorInternal; using System.Reflection; using System; [CustomEditor(typeof(RenderEffect))] public class RenderEffectInspector : Editor { public bool m_EnableSortLayer = false; private string[] m_LayerName; private int[] m_LayerID; void OnEnable() { m_LayerName = GetSortingLayerNames(); m_LayerID = GetSortingLayerUniqueIDs(); } public string[] GetSortingLayerNames() { Type internalEditorUtilityType = typeof(InternalEditorUtility); PropertyInfo sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic); return (string[])sortingLayersProperty.GetValue(null, new object[0]); } // Get the unique sorting layer IDs -- tossed this in for good measure public int[] GetSortingLayerUniqueIDs() { Type internalEditorUtilityType = typeof(InternalEditorUtility); PropertyInfo sortingLayerUniqueIDsProperty = internalEditorUtilityType.GetProperty("sortingLayerUniqueIDs", BindingFlags.Static | BindingFlags.NonPublic); return (int[])sortingLayerUniqueIDsProperty.GetValue(null, new object[0]); } public override void OnInspectorGUI() { RenderEffect renderEffect = target as RenderEffect; ParticleSystem particleSystem = renderEffect.gameObject.GetComponent(); EditorGUILayout.BeginVertical(); if (particleSystem == null) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Open BillBoardOption"); renderEffect.m_EnableBillBoard = EditorGUILayout.Toggle(renderEffect.m_EnableBillBoard); EditorGUILayout.EndHorizontal(); if (renderEffect.m_EnableBillBoard) { EditorGUI.indentLevel++; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("BillBoard Type"); renderEffect.m_BillBoardType = (RenderBillBoardType)EditorGUILayout.EnumPopup(renderEffect.m_BillBoardType); EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel--; } } if(particleSystem == null) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Open Sort Layer Option"); renderEffect.m_EnableSetSortLayer = EditorGUILayout.Toggle(renderEffect.m_EnableSetSortLayer); EditorGUILayout.EndHorizontal(); if (renderEffect.m_EnableSetSortLayer) { EditorGUI.indentLevel++; EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Sorting Layer"); renderEffect.m_SortingLayerID = EditorGUILayout.IntPopup(renderEffect.m_SortingLayerID, m_LayerName, m_LayerID); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Sorting Order"); renderEffect.m_SortingOrder = EditorGUILayout.IntField(renderEffect.m_SortingOrder); EditorGUILayout.EndHorizontal(); if (EditorGUI.EndChangeCheck()) { renderEffect.UpdateRenderLayer(); } EditorGUI.indentLevel--; } } Renderer render = renderEffect.gameObject.GetComponent(); if (render != null) { if (GUILayout.Button ("Refresh Material")) { renderEffect.RefreshMaterial (); } EditorGUILayout.LabelField ("Materials"); } EditorGUI.indentLevel++; int index = 0; foreach(MaterialEffect matEffect in renderEffect.m_MaterialEffects) { string strIndex = "Element:" + index + " "; if (matEffect.m_EffectMaterial == null) { GUILayout.Button(strIndex + "Material Not Assign"); index++; continue; } else { if(GUILayout.Button(strIndex + matEffect.m_EffectMaterial.name)) { matEffect.m_EditorExtend = !matEffect.m_EditorExtend; } index++; if (matEffect.m_EditorExtend) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Main Texture WrapMode"); matEffect.m_MainTexWrapMode = (TextureWrapMode)EditorGUILayout.EnumPopup(matEffect.m_MainTexWrapMode); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Cutoff Texture WrapMode"); matEffect.m_MaskTexWrapMode = (TextureWrapMode)EditorGUILayout.EnumPopup(matEffect.m_MaskTexWrapMode); EditorGUILayout.EndHorizontal(); } } } EditorGUI.indentLevel--; if (render != null && particleSystem == null) { EditorGUI.indentLevel++; EditorGUILayout.LabelField("Switch Render Type"); if (render.GetType() != typeof(LineRenderer)) { if (GUILayout.Button("Switch To Line Render")) { LineRenderer lineRender = renderEffect.gameObject.AddComponent(); renderEffect.m_Render = lineRender; lineRender.sharedMaterials = render.sharedMaterials; UnityEngine.Object.DestroyImmediate(render); MeshFilter meshFilter = renderEffect.gameObject.GetComponent(); if (meshFilter != null) { UnityEngine.Object.DestroyImmediate(meshFilter); } Collider meshCollider = renderEffect.gameObject.GetComponent(); if (meshCollider != null) { UnityEngine.Object.DestroyImmediate(meshCollider); } EditorGUIUtility.ExitGUI(); } } if (render.GetType() != typeof(MeshRenderer)) { if (GUILayout.Button("Switch To Mesh Render")) { MeshRenderer lineRender = renderEffect.gameObject.AddComponent(); lineRender.sharedMaterials = render.sharedMaterials; renderEffect.m_Render = lineRender; UnityEngine.Object.DestroyImmediate(render); MeshFilter meshFilter = renderEffect.gameObject.GetComponent(); if (meshFilter == null) { renderEffect.gameObject.AddComponent(); } Collider Collider = renderEffect.gameObject.GetComponent(); if (Collider != null) { UnityEngine.Object.DestroyImmediate(Collider); } MeshCollider meshCollider = renderEffect.gameObject.GetComponent(); if (meshCollider == null) { renderEffect.gameObject.AddComponent(); } EditorGUIUtility.ExitGUI(); } } if (render.GetType() != typeof(TrailRenderer)) { if (GUILayout.Button("Switch To Trail Render")) { TrailRenderer lineRender = renderEffect.gameObject.AddComponent(); lineRender.sharedMaterials = render.sharedMaterials; renderEffect.m_Render = lineRender; UnityEngine.Object.DestroyImmediate(render); MeshFilter meshFilter = renderEffect.gameObject.GetComponent(); if (meshFilter != null) { UnityEngine.Object.DestroyImmediate(meshFilter); } Collider Collider = renderEffect.gameObject.GetComponent(); if (Collider != null) { UnityEngine.Object.DestroyImmediate(Collider); } EditorGUIUtility.ExitGUI(); } } if (render.GetType () == typeof(TrailRenderer)) { if (GUILayout.Button ("Clear Trail")) { TrailRenderer trailRender = render.GetComponent (); trailRender.Clear(); } } EditorGUI.indentLevel--; } EditorGUILayout.EndVertical(); } }