源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
5.8 KiB

  1. using System.Collections.Generic;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using System.IO;
  5. using System.Text;
  6. // #if UNITY_EDITOR
  7. using System;
  8. // using System.Collections;
  9. // using System.Collections.Generic;
  10. using System.Reflection;
  11. // using UnityEditor;
  12. // using UnityEngine;
  13. // using UnityEngine.Profiling;
  14. /// <summary>
  15. /// 将特效的性能数据显示到Scene
  16. /// </summary>
  17. namespace ParticleEffectProfilerNameSpace {
  18. [CustomEditor(typeof(ParticleEffectScript))]
  19. public class MyParticleEffectUI : Editor {
  20. string[] m_Label = new string[20];
  21. float m_PictureMemory = 0;
  22. long m_PictureNum = 0;
  23. long m_GrainCompNum;
  24. long m_GrainNum;
  25. int m_DrawCallNum;
  26. string m_Extra_Des;
  27. // float m_PixelNum1;
  28. // float m_PixelNum2;
  29. // float m_PixelOverdraw;
  30. void OnSceneGUI()
  31. {
  32. ParticleEffectScript particleEffectScript = (ParticleEffectScript)target;
  33. int index = 0;
  34. m_Label[index] = GetParticleEffectData.GetGetRuntimeMemorySizeStr(particleEffectScript.gameObject);
  35. m_Label[++index] = GetParticleEffectData.GetParticleSystemCount(particleEffectScript.gameObject);
  36. if (EditorApplication.isPlaying)
  37. {
  38. m_Label[++index] = GetParticleEffectData.GetParticleCountStr(particleEffectScript);
  39. m_Label[++index] = GetParticleEffectData.GetOnlyParticleEffecDrawCallStr();
  40. m_Label[++index] = GetParticleEffectData.GetPixDrawAverageStr(particleEffectScript);
  41. m_Label[++index] = GetParticleEffectData.GetPixActualDrawAverageStr(particleEffectScript);
  42. m_Label[++index] = GetParticleEffectData.GetPixRateStr(particleEffectScript);
  43. // csv存储用
  44. m_PictureMemory = GetParticleEffectData.GetRuntimeMemorySizeNum(particleEffectScript.gameObject);//贴图所占用的内存
  45. m_PictureNum = GetParticleEffectData.GetRuntimePictureNum(particleEffectScript.gameObject);//贴图数量
  46. m_GrainCompNum = GetParticleEffectData.GetRuntimeGrainCompNum(particleEffectScript.gameObject) ;//所有粒子系统组件数量
  47. m_GrainNum = particleEffectScript.GetMaxParticleCount() ;//粒子数量
  48. m_DrawCallNum = GetParticleEffectData.GetRuntimeDrawCallNum() ;//DrawCall
  49. m_Extra_Des = GetParticleEffectData.GetCullingSupportedString(particleEffectScript.gameObject);
  50. // m_PixelNum1 = GetParticleEffectData.GetRuntimePixelNum1(particleEffectScript) ;//特效原填充像素点
  51. // m_PixelNum2 = GetParticleEffectData.GetRuntimePixelNum2(particleEffectScript) ;//特效实际填充像素点
  52. // m_PixelOverdraw = GetParticleEffectData.GetRuntimePixelOverdraw(particleEffectScript) ;//平均每像素overdraw率
  53. }
  54. ShowUI();
  55. }
  56. void ShowUI()
  57. {
  58. //开始绘制GUI
  59. Handles.BeginGUI();
  60. //规定GUI显示区域
  61. GUILayout.BeginArea(new Rect(10, 10, 300, 300));
  62. GUIStyle style = new GUIStyle();
  63. style.richText = true;
  64. style.fontStyle = FontStyle.Bold;
  65. style.normal.textColor=new Color(0,2,4);
  66. string out_str = "";
  67. for (int i = 0; i < m_Label.Length; i++)
  68. {
  69. if (!string.IsNullOrEmpty(m_Label[i]))
  70. {
  71. GUILayout.Label(m_Label[i], style);
  72. /// <summary>
  73. /// 筛选信息输出
  74. string temp = m_Label[i].Replace("</color>","");
  75. temp = temp.Replace("<color=red>","");
  76. temp = temp.Replace("<color=green>","");
  77. out_str = out_str + temp + '\n';
  78. /// </summary>
  79. }
  80. }
  81. GUILayout.EndArea();
  82. Handles.EndGUI();
  83. if (EditorApplication.isPlaying)
  84. {
  85. //保存数据TXT
  86. /*if (!Directory.Exists(@"D:\u3d_particle_log"))
  87. Directory.CreateDirectory(@"D:\u3d_particle_log");
  88. ParticleEffectScript particleEffectScript = (ParticleEffectScript)target;
  89. string confighFilePath = "D:/u3d_particle_log/" + particleEffectScript.gameObject.name + ".txt";
  90. File.WriteAllText(confighFilePath, out_str);*/
  91. //保存数据csv
  92. ParticleEffectScript particleEffectScript = (ParticleEffectScript)target;
  93. string save_str = "";
  94. string name = particleEffectScript.gameObject.name.Replace("(Clone)","");
  95. save_str = save_str + name + ",";//特效名
  96. save_str = save_str + m_PictureMemory + ",";//贴图所占用的内存
  97. save_str = save_str + m_PictureNum + ",";//贴图数量
  98. save_str = save_str + m_GrainCompNum + ",";//所有粒子系统组件数量
  99. save_str = save_str + m_GrainNum + ",";//粒子数量
  100. save_str = save_str + m_DrawCallNum + ",";//DrawCall
  101. save_str = save_str + "\"" + m_Extra_Des + "\"" + ",";//额外描述
  102. BatchTestParticleEffect.SaveTempOutPutData(save_str);
  103. }
  104. }
  105. public override void OnInspectorGUI()
  106. {
  107. base.OnInspectorGUI();
  108. ParticleEffectScript particleEffectScript = (ParticleEffectScript)target;
  109. string autoCullingTips = GetParticleEffectData.GetCullingSupportedString(particleEffectScript.gameObject);
  110. if (!string.IsNullOrEmpty(autoCullingTips))
  111. {
  112. GUILayout.Label("ParticleSystem以下选项会导致无法自动剔除:", EditorStyles.whiteLargeLabel);
  113. GUILayout.Label(autoCullingTips);
  114. }
  115. }
  116. }
  117. }