diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 93477538..5457a844 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -78,7 +78,8 @@ slug: /changelog ## master -* (2024.11.04) 增加`UIText`扩展组件 +* (2024.12.07) 修复`Chart`节点下不能放自定义节点的问题 +* (2024.12.05) 增加`UIText`扩展组件 * (2024.12.04) 删除`TextStyle`的无用配置项`tmpAlignment` ## v3.12.1 diff --git a/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs b/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs index 8818d016..ce8aa36e 100644 --- a/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs +++ b/Runtime/Component/Axis/AngleAxis/AngleAxisHandler.cs @@ -67,7 +67,7 @@ namespace XCharts.Runtime string objName = component.GetType().Name + axis.index; var axisObj = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); axisObj.transform.localPosition = Vector3.zero; axisObj.SetActive(axis.show); axisObj.hideFlags = chart.chartHideFlags; diff --git a/Runtime/Component/Axis/AxisHandler.cs b/Runtime/Component/Axis/AxisHandler.cs index a36ec72b..61b60cdf 100644 --- a/Runtime/Component/Axis/AxisHandler.cs +++ b/Runtime/Component/Axis/AxisHandler.cs @@ -379,7 +379,7 @@ namespace XCharts chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, - chart.chartSizeDelta); + chart.chartSizeDelta, -1, chart.childrenNodeNames); axisObj.SetActive(axis.show); axisObj.hideFlags = chart.chartHideFlags; @@ -488,7 +488,7 @@ namespace XCharts chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, - chart.chartSizeDelta); + chart.chartSizeDelta, -1, chart.childrenNodeNames); axisObj.SetActive(axis.show); axisObj.hideFlags = chart.chartHideFlags; diff --git a/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs b/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs index 5a84d71f..6feca7f5 100644 --- a/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs +++ b/Runtime/Component/Axis/RadiusAxis/RadiusAxisHandler.cs @@ -99,7 +99,7 @@ namespace XCharts.Runtime var radius = polar.context.outsideRadius - polar.context.insideRadius; var objName = component.GetType().Name + axis.index; var axisObj = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); axisObj.transform.localPosition = Vector3.zero; axisObj.SetActive(axis.show && axis.axisLabel.show); axisObj.hideFlags = chart.chartHideFlags; diff --git a/Runtime/Component/Background/BackgroundHandler.cs b/Runtime/Component/Background/BackgroundHandler.cs index bb53f759..b79ccd60 100644 --- a/Runtime/Component/Background/BackgroundHandler.cs +++ b/Runtime/Component/Background/BackgroundHandler.cs @@ -15,7 +15,7 @@ namespace XCharts.Runtime component.refreshComponent = delegate () { var backgroundObj = ChartHelper.AddObject(s_BackgroundObjectName, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); component.gameObject = backgroundObj; backgroundObj.hideFlags = chart.chartHideFlags; diff --git a/Runtime/Component/Comment/CommentHander.cs b/Runtime/Component/Comment/CommentHander.cs index 1fc580e4..b0d06eb5 100644 --- a/Runtime/Component/Comment/CommentHander.cs +++ b/Runtime/Component/Comment/CommentHander.cs @@ -22,7 +22,7 @@ namespace XCharts.Runtime chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, - chart.chartSizeDelta); + chart.chartSizeDelta, -1, chart.childrenNodeNames); commentObj.SetActive(comment.show); commentObj.hideFlags = chart.chartHideFlags; diff --git a/Runtime/Component/DataZoom/DataZoomHandler.cs b/Runtime/Component/DataZoom/DataZoomHandler.cs index cfbeaf43..14b78906 100644 --- a/Runtime/Component/DataZoom/DataZoomHandler.cs +++ b/Runtime/Component/DataZoom/DataZoomHandler.cs @@ -27,7 +27,7 @@ namespace XCharts.Runtime dataZoom.refreshComponent = delegate () { var dataZoomObject = ChartHelper.AddObject(s_DefaultDataZoom + dataZoom.index, chart.transform, - chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); dataZoom.gameObject = dataZoomObject; dataZoomObject.hideFlags = chart.chartHideFlags; ChartHelper.HideAllObject(dataZoomObject); diff --git a/Runtime/Component/Debug/DebugInfo.cs b/Runtime/Component/Debug/DebugInfo.cs index 966d7a98..e7aa0849 100644 --- a/Runtime/Component/Debug/DebugInfo.cs +++ b/Runtime/Component/Debug/DebugInfo.cs @@ -75,7 +75,7 @@ namespace XCharts.Runtime public void Init(BaseChart chart) { m_Chart = chart; - m_Label = AddDebugInfoObject("debug", chart.transform, m_LabelStyle, chart.theme); + m_Label = AddDebugInfoObject("debug", chart.transform, m_LabelStyle, chart.theme, chart.childrenNodeNames); } public void Update() @@ -155,14 +155,14 @@ namespace XCharts.Runtime } private ChartLabel AddDebugInfoObject(string name, Transform parent, LabelStyle labelStyle, - ThemeStyle theme) + ThemeStyle theme, List childrenNodeNames) { var anchorMax = new Vector2(0, 1); var anchorMin = new Vector2(0, 1); var pivot = new Vector2(0, 1); var sizeDelta = new Vector2(100, 100); - var labelGameObject = ChartHelper.AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta); + var labelGameObject = ChartHelper.AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta, -1, childrenNodeNames); labelGameObject.transform.SetAsLastSibling(); labelGameObject.hideFlags = m_Chart.chartHideFlags; ChartHelper.SetActive(labelGameObject, m_ShowDebugInfo); diff --git a/Runtime/Component/Legend/LegendHandler.cs b/Runtime/Component/Legend/LegendHandler.cs index aa830414..f098c929 100644 --- a/Runtime/Component/Legend/LegendHandler.cs +++ b/Runtime/Component/Legend/LegendHandler.cs @@ -55,7 +55,7 @@ namespace XCharts.Runtime { legend.OnChanged(); var legendObject = ChartHelper.AddObject(s_LegendObjectName + legend.index, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); legend.gameObject = legendObject; legendObject.hideFlags = chart.chartHideFlags; //ChartHelper.DestoryGameObjectByMatch(legendObject.transform, "_"); diff --git a/Runtime/Component/Legend/LegendHelper.cs b/Runtime/Component/Legend/LegendHelper.cs index 1ee362e3..ffc55f36 100644 --- a/Runtime/Component/Legend/LegendHelper.cs +++ b/Runtime/Component/Legend/LegendHelper.cs @@ -48,7 +48,7 @@ namespace XCharts.Runtime var objAnchorMin = new Vector2(0, 1); var objAnchorMax = new Vector2(0, 1); var objPivot = new Vector2(0, 1); - var btnObj = ChartHelper.AddObject(objName, parent, objAnchorMin, objAnchorMax, objPivot, sizeDelta); + var btnObj = ChartHelper.AddObject(objName, parent, objAnchorMin, objAnchorMax, objPivot, sizeDelta, -1, chart.childrenNodeNames); var iconObj = ChartHelper.AddObject("icon", btnObj.transform, anchorMin, anchorMax, pivot, iconSizeDelta); var img = ChartHelper.EnsureComponent(btnObj); img.color = Color.clear; diff --git a/Runtime/Component/Mark/MarkAreaHandler.cs b/Runtime/Component/Mark/MarkAreaHandler.cs index 98b9f6c9..df8eb1f9 100644 --- a/Runtime/Component/Mark/MarkAreaHandler.cs +++ b/Runtime/Component/Mark/MarkAreaHandler.cs @@ -14,7 +14,7 @@ namespace XCharts.Runtime public override void InitComponent() { m_MarkLineLabelRoot = ChartHelper.AddObject("markarea" + component.index, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); m_MarkLineLabelRoot.hideFlags = chart.chartHideFlags; ChartHelper.HideAllObject(m_MarkLineLabelRoot); InitMarkArea(component); diff --git a/Runtime/Component/Mark/MarkLineHandler.cs b/Runtime/Component/Mark/MarkLineHandler.cs index fcdb7a3c..ccf6cf1b 100644 --- a/Runtime/Component/Mark/MarkLineHandler.cs +++ b/Runtime/Component/Mark/MarkLineHandler.cs @@ -13,7 +13,7 @@ namespace XCharts.Runtime public override void InitComponent() { m_MarkLineLabelRoot = ChartHelper.AddObject("markline", chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); m_MarkLineLabelRoot.hideFlags = chart.chartHideFlags; ChartHelper.HideAllObject(m_MarkLineLabelRoot); InitMarkLine(component); diff --git a/Runtime/Component/Radar/RadarCoordHandler.cs b/Runtime/Component/Radar/RadarCoordHandler.cs index 15d3740b..3b820d39 100644 --- a/Runtime/Component/Radar/RadarCoordHandler.cs +++ b/Runtime/Component/Radar/RadarCoordHandler.cs @@ -41,7 +41,7 @@ namespace XCharts.Runtime { radar.UpdateRadarCenter(chart); var radarObject = ChartHelper.AddObject("Radar" + radar.index, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); radar.gameObject = radarObject; radar.gameObject.hideFlags = chart.chartHideFlags; ChartHelper.HideAllObject(radarObject.transform, INDICATOR_TEXT); diff --git a/Runtime/Component/Title/TitleHandler.cs b/Runtime/Component/Title/TitleHandler.cs index d1556c83..9f789aba 100644 --- a/Runtime/Component/Title/TitleHandler.cs +++ b/Runtime/Component/Title/TitleHandler.cs @@ -22,7 +22,7 @@ namespace XCharts.Runtime var pivot = title.location.runtimePivot; var objName = ChartCached.GetComponentObjectName(title); var titleObject = ChartHelper.AddObject(objName, chart.transform, anchorMin, anchorMax, - pivot, chart.chartSizeDelta); + pivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); title.gameObject = titleObject; title.gameObject.transform.SetSiblingIndex(chart.m_PainterUpper.transform.GetSiblingIndex() + 1); anchorMin = title.location.runtimeAnchorMin; diff --git a/Runtime/Component/Tooltip/TooltipHandler.cs b/Runtime/Component/Tooltip/TooltipHandler.cs index 21787aa1..449b7991 100644 --- a/Runtime/Component/Tooltip/TooltipHandler.cs +++ b/Runtime/Component/Tooltip/TooltipHandler.cs @@ -53,7 +53,7 @@ namespace XCharts.Runtime { var objName = ChartCached.GetComponentObjectName(tooltip); tooltip.gameObject = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); var tooltipObject = tooltip.gameObject; tooltipObject.transform.localPosition = Vector3.zero; tooltipObject.hideFlags = chart.chartHideFlags; diff --git a/Runtime/Internal/BaseChart.cs b/Runtime/Internal/BaseChart.cs index e661013b..df21b6f9 100644 --- a/Runtime/Internal/BaseChart.cs +++ b/Runtime/Internal/BaseChart.cs @@ -394,7 +394,7 @@ namespace XCharts.Runtime { var index = settings.reversePainter ? settings.maxPainter - 1 - i : i; var painter = ChartHelper.AddPainterObject("painter_" + index, transform, m_GraphMinAnchor, - m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + index); + m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + index, m_ChildNodeNames); painter.index = m_PainterList.Count; painter.type = Painter.Type.Serie; painter.onPopulateMesh = OnDrawPainterSerie; @@ -404,7 +404,7 @@ namespace XCharts.Runtime m_PainterList.Add(painter); } m_PainterUpper = ChartHelper.AddPainterObject("painter_u", transform, m_GraphMinAnchor, - m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + settings.maxPainter); + m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + settings.maxPainter, m_ChildNodeNames); m_PainterUpper.type = Painter.Type.Top; m_PainterUpper.onPopulateMesh = OnDrawPainterUpper; m_PainterUpper.SetActive(true, m_DebugInfo.showAllChartObject); @@ -412,7 +412,7 @@ namespace XCharts.Runtime m_PainterUpper.transform.SetSiblingIndex(settings.maxPainter + 1); m_PainterTop = ChartHelper.AddPainterObject("painter_t", transform, m_GraphMinAnchor, - m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + settings.maxPainter); + m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + settings.maxPainter, m_ChildNodeNames); m_PainterTop.type = Painter.Type.Top; m_PainterTop.onPopulateMesh = OnDrawPainterTop; m_PainterTop.SetActive(true, m_DebugInfo.showAllChartObject); diff --git a/Runtime/Internal/BaseGraph.API.cs b/Runtime/Internal/BaseGraph.API.cs index 210d681e..90c9adce 100644 --- a/Runtime/Internal/BaseGraph.API.cs +++ b/Runtime/Internal/BaseGraph.API.cs @@ -158,8 +158,8 @@ namespace XCharts.Runtime /// public void RebuildChartObject() { - ChartHelper.DestroyAllChildren(transform); - SetAllComponentDirty(); + ChartHelper.DestoryGameObjectByMatch(transform, m_ChildNodeNames); + //SetAllComponentDirty(); } public bool ScreenPointToChartPoint(Vector2 screenPoint, out Vector2 chartPoint) diff --git a/Runtime/Internal/BaseGraph.cs b/Runtime/Internal/BaseGraph.cs index 2bf81ac1..23de7149 100644 --- a/Runtime/Internal/BaseGraph.cs +++ b/Runtime/Internal/BaseGraph.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; @@ -14,6 +15,7 @@ namespace XCharts.Runtime IDragHandler, IEndDragHandler, IScrollHandler { [SerializeField] protected bool m_EnableTextMeshPro = false; + [SerializeField] protected List m_ChildNodeNames = new List(); protected Painter m_Painter; protected int m_SiblingIndex; @@ -54,6 +56,7 @@ namespace XCharts.Runtime private ScrollRect m_ScrollRect; public Painter painter { get { return m_Painter; } } + public List childrenNodeNames { get { return m_ChildNodeNames; } } protected virtual void InitComponent() { @@ -158,7 +161,7 @@ namespace XCharts.Runtime protected virtual void InitPainter() { m_Painter = ChartHelper.AddPainterObject("painter_b", transform, m_GraphMinAnchor, - m_GraphMaxAnchor, m_GraphPivot, new Vector2(m_GraphWidth, m_GraphHeight), chartHideFlags, 1); + m_GraphMaxAnchor, m_GraphPivot, new Vector2(m_GraphWidth, m_GraphHeight), chartHideFlags, 1, m_ChildNodeNames); m_Painter.type = Painter.Type.Base; m_Painter.onPopulateMesh = OnDrawPainterBase; m_Painter.transform.SetSiblingIndex(0); diff --git a/Runtime/Internal/Utilities/ChartHelper.cs b/Runtime/Internal/Utilities/ChartHelper.cs index f72c7c99..dc138d23 100644 --- a/Runtime/Internal/Utilities/ChartHelper.cs +++ b/Runtime/Internal/Utilities/ChartHelper.cs @@ -156,6 +156,21 @@ namespace XCharts.Runtime } } + public static void DestoryGameObjectByMatch(Transform parent, List children) + { + if (parent == null) return; + if (children == null || children.Count == 0) return; + var childCount = parent.childCount; + for (int i = childCount - 1; i >= 0; i--) + { + var go = parent.GetChild(i); + if (go != null && children.Contains(go.name)) + { + GameObject.DestroyImmediate(go.gameObject, true); + } + } + } + public static void DestoryGameObject(GameObject go) { if (go != null) GameObject.DestroyImmediate(go, true); @@ -233,7 +248,7 @@ namespace XCharts.Runtime } public static GameObject AddObject(string name, Transform parent, Vector2 anchorMin, - Vector2 anchorMax, Vector2 pivot, Vector2 sizeDelta, int replaceIndex = -1) + Vector2 anchorMax, Vector2 pivot, Vector2 sizeDelta, int replaceIndex = -1, List cacheNames = null) { GameObject obj; if (parent.Find(name)) @@ -267,6 +282,8 @@ namespace XCharts.Runtime rect.anchorMax = anchorMax; rect.pivot = pivot; rect.anchoredPosition3D = Vector3.zero; + + if (cacheNames != null && !cacheNames.Contains(name)) cacheNames.Add(name); return obj; } @@ -332,9 +349,9 @@ namespace XCharts.Runtime } public static Painter AddPainterObject(string name, Transform parent, Vector2 anchorMin, Vector2 anchorMax, - Vector2 pivot, Vector2 sizeDelta, HideFlags hideFlags, int siblingIndex) + Vector2 pivot, Vector2 sizeDelta, HideFlags hideFlags, int siblingIndex, List childNodeNames) { - var painterObj = ChartHelper.AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta); + var painterObj = ChartHelper.AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta, -1, childNodeNames); painterObj.hideFlags = hideFlags; painterObj.transform.SetSiblingIndex(siblingIndex); return ChartHelper.EnsureComponent(painterObj); diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index 52b57a1a..b24f4e22 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -314,7 +314,7 @@ namespace XCharts.Runtime } var objName = s_SerieRootObjectName + "_" + serie.index; m_SerieRoot = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, - chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta); + chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta, -1, chart.childrenNodeNames); m_SerieRoot.hideFlags = chart.chartHideFlags; ChartHelper.SetActive(m_SerieRoot, true); ChartHelper.HideAllObject(m_SerieRoot);