/******************************************/ /* */ /* Copyright (c) 2018 monitor1394 */ /* https://github.com/monitor1394 */ /* */ /******************************************/ using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using XCharts; namespace XChartsDemo { [DisallowMultipleComponent] [ExecuteInEditMode] public class Demo_Performance : MonoBehaviour { [SerializeField] private float fps = 0; [SerializeField] private int m_MaxCacheDataNumber = 3000; private const float INTERVAL = 0.2f; private int frameCount = 0; private float lastTime = 0f; private int initCount = 0; private System.DateTime timeNow; private LineChart fpsChart; private LineChart lineChart; private BarChart barChart; private Text fpsText; void Awake() { fpsChart = transform.Find("fps/FpsChart").gameObject.GetComponent(); lineChart = transform.Find("charts/LineChart").gameObject.GetComponent(); barChart = transform.Find("charts/BarChart").gameObject.GetComponent(); fpsText = transform.Find("settings/txtFps").gameObject.GetComponent(); fpsChart.ClearData(); lineChart.ClearData(); barChart.ClearData(); InitCharts(); } void Start() { lastTime = Time.realtimeSinceStartup; } void Update() { frameCount++; if (initCount < m_MaxCacheDataNumber) { for (int i = 0; i < 10; i++) { initCount++; if (initCount > m_MaxCacheDataNumber) break; AddOneData(); } } if (Time.realtimeSinceStartup - lastTime >= INTERVAL) { fps = frameCount / (Time.realtimeSinceStartup - lastTime); frameCount = 0; lastTime = Time.realtimeSinceStartup; fpsChart.AddData(0, fps); fpsChart.AddXAxisData(Time.frameCount.ToString()); fpsText.text = string.Format("FPS:{0:f1}", fps); if (initCount >= m_MaxCacheDataNumber) { AddOneData(); initCount++; } } } void AddOneData() { lineChart.title.text = initCount + "数据"; barChart.title.text = initCount + "数据"; timeNow = timeNow.AddSeconds(1); string category = timeNow.ToString("hh:mm:ss"); float xvalue = Mathf.PI / 180 * initCount; float yvalue = 15 + Mathf.Sin(xvalue) * 2; lineChart.AddData(0, yvalue); lineChart.AddXAxisData(category); barChart.AddData(0, yvalue); barChart.AddXAxisData(category); } void InitCharts() { fpsChart.SetMaxCache(1000); lineChart.SetMaxCache(m_MaxCacheDataNumber); barChart.SetMaxCache(m_MaxCacheDataNumber); SetInputField("settings/fadeIn/InputField", m_MaxCacheDataNumber, OnFadeInDurationChanged); } void SetInputField(string path, int value, UnityAction act) { var input = transform.Find(path).gameObject.GetComponent(); input.onEndEdit.AddListener(act); input.text = value.ToString(); } Button TryInitButton(string name, UnityAction act) { var trans = transform.Find(name); if (trans) { var btn = trans.gameObject.GetComponent