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