using System.Collections.Generic; using UnityEditor; using UnityEngine; using System.IO; using System.Text; // #if UNITY_EDITOR using System; // using System.Collections; // using System.Collections.Generic; using System.Reflection; // using UnityEditor; // using UnityEngine; // using UnityEngine.Profiling; /// /// 将特效的性能数据显示到Scene /// namespace ParticleEffectProfilerNameSpace { [CustomEditor(typeof(ParticleEffectScript))] public class MyParticleEffectUI : Editor { string[] m_Label = new string[20]; float m_PictureMemory = 0; long m_PictureNum = 0; long m_GrainCompNum; long m_GrainNum; int m_DrawCallNum; string m_Extra_Des; // float m_PixelNum1; // float m_PixelNum2; // float m_PixelOverdraw; void OnSceneGUI() { ParticleEffectScript particleEffectScript = (ParticleEffectScript)target; int index = 0; m_Label[index] = GetParticleEffectData.GetGetRuntimeMemorySizeStr(particleEffectScript.gameObject); m_Label[++index] = GetParticleEffectData.GetParticleSystemCount(particleEffectScript.gameObject); if (EditorApplication.isPlaying) { m_Label[++index] = GetParticleEffectData.GetParticleCountStr(particleEffectScript); m_Label[++index] = GetParticleEffectData.GetOnlyParticleEffecDrawCallStr(); m_Label[++index] = GetParticleEffectData.GetPixDrawAverageStr(particleEffectScript); m_Label[++index] = GetParticleEffectData.GetPixActualDrawAverageStr(particleEffectScript); m_Label[++index] = GetParticleEffectData.GetPixRateStr(particleEffectScript); // csv存储用 m_PictureMemory = GetParticleEffectData.GetRuntimeMemorySizeNum(particleEffectScript.gameObject);//贴图所占用的内存 m_PictureNum = GetParticleEffectData.GetRuntimePictureNum(particleEffectScript.gameObject);//贴图数量 m_GrainCompNum = GetParticleEffectData.GetRuntimeGrainCompNum(particleEffectScript.gameObject) ;//所有粒子系统组件数量 m_GrainNum = particleEffectScript.GetMaxParticleCount() ;//粒子数量 m_DrawCallNum = GetParticleEffectData.GetRuntimeDrawCallNum() ;//DrawCall m_Extra_Des = GetParticleEffectData.GetCullingSupportedString(particleEffectScript.gameObject); // m_PixelNum1 = GetParticleEffectData.GetRuntimePixelNum1(particleEffectScript) ;//特效原填充像素点 // m_PixelNum2 = GetParticleEffectData.GetRuntimePixelNum2(particleEffectScript) ;//特效实际填充像素点 // m_PixelOverdraw = GetParticleEffectData.GetRuntimePixelOverdraw(particleEffectScript) ;//平均每像素overdraw率 } ShowUI(); } void ShowUI() { //开始绘制GUI Handles.BeginGUI(); //规定GUI显示区域 GUILayout.BeginArea(new Rect(10, 10, 300, 300)); GUIStyle style = new GUIStyle(); style.richText = true; style.fontStyle = FontStyle.Bold; style.normal.textColor=new Color(0,2,4); string out_str = ""; for (int i = 0; i < m_Label.Length; i++) { if (!string.IsNullOrEmpty(m_Label[i])) { GUILayout.Label(m_Label[i], style); /// /// 筛选信息输出 string temp = m_Label[i].Replace("",""); temp = temp.Replace("",""); temp = temp.Replace("",""); out_str = out_str + temp + '\n'; /// } } GUILayout.EndArea(); Handles.EndGUI(); if (EditorApplication.isPlaying) { //保存数据TXT /*if (!Directory.Exists(@"D:\u3d_particle_log")) Directory.CreateDirectory(@"D:\u3d_particle_log"); ParticleEffectScript particleEffectScript = (ParticleEffectScript)target; string confighFilePath = "D:/u3d_particle_log/" + particleEffectScript.gameObject.name + ".txt"; File.WriteAllText(confighFilePath, out_str);*/ //保存数据csv ParticleEffectScript particleEffectScript = (ParticleEffectScript)target; string save_str = ""; string name = particleEffectScript.gameObject.name.Replace("(Clone)",""); save_str = save_str + name + ",";//特效名 save_str = save_str + m_PictureMemory + ",";//贴图所占用的内存 save_str = save_str + m_PictureNum + ",";//贴图数量 save_str = save_str + m_GrainCompNum + ",";//所有粒子系统组件数量 save_str = save_str + m_GrainNum + ",";//粒子数量 save_str = save_str + m_DrawCallNum + ",";//DrawCall save_str = save_str + "\"" + m_Extra_Des + "\"" + ",";//额外描述 BatchTestParticleEffect.SaveTempOutPutData(save_str); } } public override void OnInspectorGUI() { base.OnInspectorGUI(); ParticleEffectScript particleEffectScript = (ParticleEffectScript)target; string autoCullingTips = GetParticleEffectData.GetCullingSupportedString(particleEffectScript.gameObject); if (!string.IsNullOrEmpty(autoCullingTips)) { GUILayout.Label("ParticleSystem以下选项会导致无法自动剔除:", EditorStyles.whiteLargeLabel); GUILayout.Label(autoCullingTips); } } } }