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);
}
}
}
}