|
|
- 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;
-
- /// <summary>
- /// 将特效的性能数据显示到Scene
- /// </summary>
- 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);
- /// <summary>
- /// 筛选信息输出
- string temp = m_Label[i].Replace("</color>","");
- temp = temp.Replace("<color=red>","");
- temp = temp.Replace("<color=green>","");
- out_str = out_str + temp + '\n';
- /// </summary>
- }
- }
-
- 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);
- }
- }
- }
- }
|