From c45e81d2e9114cfb27b8e246b9d08a5884450c04 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sat, 15 Sep 2018 06:52:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E4=B8=BAxcharts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Demo.cs | 23 + Demo.cs.meta | 13 + Scripts.meta | 10 + Scripts/BarChart.cs | 101 +++ Scripts/BarChart.cs.meta | 13 + Scripts/ChartUtils.cs | 177 ++++ Scripts/ChartUtils.cs.meta | 13 + Scripts/LineChart.cs | 462 ++++++++++ Scripts/LineChart.cs.meta | 13 + demo.unity | 1745 ++++++++++++++++++++++++++++++++++++ demo.unity.meta | 9 + 11 files changed, 2579 insertions(+) create mode 100644 Demo.cs create mode 100644 Demo.cs.meta create mode 100644 Scripts.meta create mode 100644 Scripts/BarChart.cs create mode 100644 Scripts/BarChart.cs.meta create mode 100644 Scripts/ChartUtils.cs create mode 100644 Scripts/ChartUtils.cs.meta create mode 100644 Scripts/LineChart.cs create mode 100644 Scripts/LineChart.cs.meta create mode 100644 demo.unity create mode 100644 demo.unity.meta diff --git a/Demo.cs b/Demo.cs new file mode 100644 index 00000000..acdecf22 --- /dev/null +++ b/Demo.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using xcharts; + +public class Demo : MonoBehaviour +{ + private LineChart lineChart; + private float time; + + void Awake () { + lineChart = transform.Find("line_chart").GetComponent(); + } + + void Update () { + time += Time.deltaTime; + if (time >= 1) + { + time = 0; + lineChart.AddPoint("fps", Random.Range(24.0f, 60.0f)); + lineChart.AddPoint("rtt", Random.Range(15, 30)); + lineChart.AddPoint("ping", Random.Range(0, 100)); + } + } +} diff --git a/Demo.cs.meta b/Demo.cs.meta new file mode 100644 index 00000000..21f9e4f4 --- /dev/null +++ b/Demo.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e6bd57e81d68cac47a78ccb7a452c8d7 +timeCreated: 1536708123 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts.meta b/Scripts.meta new file mode 100644 index 00000000..6f6a808f --- /dev/null +++ b/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dd29cbce72290724b8772e66460b2a1d +folderAsset: yes +timeCreated: 1536101222 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/BarChart.cs b/Scripts/BarChart.cs new file mode 100644 index 00000000..86c17446 --- /dev/null +++ b/Scripts/BarChart.cs @@ -0,0 +1,101 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace xcharts +{ + [System.Serializable] + public class BarGroup + { + [SerializeField] + public string name; + [SerializeField] + public Color color; + } + + [System.Serializable] + public class BarData + { + [SerializeField] + public string group; + [SerializeField] + public string key; + [SerializeField] + public float value; + } + + public class BarChart : MaskableGraphic + { + [SerializeField] + private float keyRectWidth = 50; + [SerializeField] + private float valueRectWidth = 50; + [SerializeField] + private float barWidth = 50; + [SerializeField] + private float barSpace = 20; + [SerializeField] + private Color backgroundColor = Color.black; + + [SerializeField] + private List groupList = new List(); + [SerializeField] + private List dataList = new List(); + + private float dataTotal = 0; + private List keyTextList = new List(); + private List valueTextList = new List(); + + private float chartWid { get { return rectTransform.sizeDelta.x; } } + private float chartHig { get { return rectTransform.sizeDelta.y; } } + + + void Awake() + { + dataTotal = getDataTotal(); + } + + void Update() + { + + } + + private float getDataTotal() + { + float total = 0; + foreach (var data in dataList) + { + total += data.value; + } + return total; + } + + protected override void OnPopulateMesh(VertexHelper vh) + { + vh.Clear(); + // draw bg + Vector3 p1 = new Vector3(-keyRectWidth, 0); + Vector3 p2 = new Vector3(chartWid, 0); + Vector3 p3 = new Vector3(chartWid, -chartHig); + Vector3 p4 = new Vector3(-keyRectWidth, -chartHig); + ChartUtils.DrawPolygon(vh, p1, p2, p3, p4, backgroundColor); + + //draw data bar + + dataTotal = getDataTotal(); + for(int i=0;i(); + txt.font = font; + txt.text = "Text"; + txt.alignment = anchor; + txt.horizontalOverflow = HorizontalWrapMode.Overflow; + txt.verticalOverflow = VerticalWrapMode.Overflow; + } + RectTransform rect = txtObj.GetComponent(); + rect.anchorMin = anchorMin; + rect.anchorMax = anchorMax; + rect.pivot = pivot; + rect.sizeDelta = sizeDelta; + return txtObj.GetComponent(); + } + + public static Button AddButtonObject(string name,Transform parent,Font font, + Vector2 anchorMin, Vector2 anchorMax, Vector2 pivot, Vector2 sizeDelta) + { + GameObject btnObj; + if (parent.Find(name)) + { + btnObj = parent.Find(name).gameObject; + btnObj.SetActive(true); + } + else + { + btnObj = new GameObject(); + btnObj.name = name; + btnObj.transform.parent = parent; + btnObj.transform.localPosition = Vector3.zero; + btnObj.transform.localScale = Vector3.one; + btnObj.AddComponent(); + btnObj.AddComponent