修复Chart节点下不能放自定义节点的问题

This commit is contained in:
monitor1394
2024-12-07 22:21:55 +08:00
parent 2e604529ee
commit f5ec47c105
20 changed files with 49 additions and 28 deletions

View File

@@ -78,7 +78,8 @@ slug: /changelog
## master ## master
* (2024.11.04) 增加`UIText`扩展组件 * (2024.12.07) 修复`Chart`节点下不能放自定义节点的问题
* (2024.12.05) 增加`UIText`扩展组件
* (2024.12.04) 删除`TextStyle`的无用配置项`tmpAlignment` * (2024.12.04) 删除`TextStyle`的无用配置项`tmpAlignment`
## v3.12.1 ## v3.12.1

View File

@@ -67,7 +67,7 @@ namespace XCharts.Runtime
string objName = component.GetType().Name + axis.index; string objName = component.GetType().Name + axis.index;
var axisObj = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, 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.transform.localPosition = Vector3.zero;
axisObj.SetActive(axis.show); axisObj.SetActive(axis.show);
axisObj.hideFlags = chart.chartHideFlags; axisObj.hideFlags = chart.chartHideFlags;

View File

@@ -379,7 +379,7 @@ namespace XCharts
chart.chartMinAnchor, chart.chartMinAnchor,
chart.chartMaxAnchor, chart.chartMaxAnchor,
chart.chartPivot, chart.chartPivot,
chart.chartSizeDelta); chart.chartSizeDelta, -1, chart.childrenNodeNames);
axisObj.SetActive(axis.show); axisObj.SetActive(axis.show);
axisObj.hideFlags = chart.chartHideFlags; axisObj.hideFlags = chart.chartHideFlags;
@@ -488,7 +488,7 @@ namespace XCharts
chart.chartMinAnchor, chart.chartMinAnchor,
chart.chartMaxAnchor, chart.chartMaxAnchor,
chart.chartPivot, chart.chartPivot,
chart.chartSizeDelta); chart.chartSizeDelta, -1, chart.childrenNodeNames);
axisObj.SetActive(axis.show); axisObj.SetActive(axis.show);
axisObj.hideFlags = chart.chartHideFlags; axisObj.hideFlags = chart.chartHideFlags;

View File

@@ -99,7 +99,7 @@ namespace XCharts.Runtime
var radius = polar.context.outsideRadius - polar.context.insideRadius; var radius = polar.context.outsideRadius - polar.context.insideRadius;
var objName = component.GetType().Name + axis.index; var objName = component.GetType().Name + axis.index;
var axisObj = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, 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.transform.localPosition = Vector3.zero;
axisObj.SetActive(axis.show && axis.axisLabel.show); axisObj.SetActive(axis.show && axis.axisLabel.show);
axisObj.hideFlags = chart.chartHideFlags; axisObj.hideFlags = chart.chartHideFlags;

View File

@@ -15,7 +15,7 @@ namespace XCharts.Runtime
component.refreshComponent = delegate () component.refreshComponent = delegate ()
{ {
var backgroundObj = ChartHelper.AddObject(s_BackgroundObjectName, chart.transform, chart.chartMinAnchor, 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; component.gameObject = backgroundObj;
backgroundObj.hideFlags = chart.chartHideFlags; backgroundObj.hideFlags = chart.chartHideFlags;

View File

@@ -22,7 +22,7 @@ namespace XCharts.Runtime
chart.chartMinAnchor, chart.chartMinAnchor,
chart.chartMaxAnchor, chart.chartMaxAnchor,
chart.chartPivot, chart.chartPivot,
chart.chartSizeDelta); chart.chartSizeDelta, -1, chart.childrenNodeNames);
commentObj.SetActive(comment.show); commentObj.SetActive(comment.show);
commentObj.hideFlags = chart.chartHideFlags; commentObj.hideFlags = chart.chartHideFlags;

View File

@@ -27,7 +27,7 @@ namespace XCharts.Runtime
dataZoom.refreshComponent = delegate () dataZoom.refreshComponent = delegate ()
{ {
var dataZoomObject = ChartHelper.AddObject(s_DefaultDataZoom + dataZoom.index, chart.transform, 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; dataZoom.gameObject = dataZoomObject;
dataZoomObject.hideFlags = chart.chartHideFlags; dataZoomObject.hideFlags = chart.chartHideFlags;
ChartHelper.HideAllObject(dataZoomObject); ChartHelper.HideAllObject(dataZoomObject);

View File

@@ -75,7 +75,7 @@ namespace XCharts.Runtime
public void Init(BaseChart chart) public void Init(BaseChart chart)
{ {
m_Chart = 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() public void Update()
@@ -155,14 +155,14 @@ namespace XCharts.Runtime
} }
private ChartLabel AddDebugInfoObject(string name, Transform parent, LabelStyle labelStyle, private ChartLabel AddDebugInfoObject(string name, Transform parent, LabelStyle labelStyle,
ThemeStyle theme) ThemeStyle theme, List<string> childrenNodeNames)
{ {
var anchorMax = new Vector2(0, 1); var anchorMax = new Vector2(0, 1);
var anchorMin = new Vector2(0, 1); var anchorMin = new Vector2(0, 1);
var pivot = new Vector2(0, 1); var pivot = new Vector2(0, 1);
var sizeDelta = new Vector2(100, 100); 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.transform.SetAsLastSibling();
labelGameObject.hideFlags = m_Chart.chartHideFlags; labelGameObject.hideFlags = m_Chart.chartHideFlags;
ChartHelper.SetActive(labelGameObject, m_ShowDebugInfo); ChartHelper.SetActive(labelGameObject, m_ShowDebugInfo);

View File

@@ -55,7 +55,7 @@ namespace XCharts.Runtime
{ {
legend.OnChanged(); legend.OnChanged();
var legendObject = ChartHelper.AddObject(s_LegendObjectName + legend.index, chart.transform, chart.chartMinAnchor, 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; legend.gameObject = legendObject;
legendObject.hideFlags = chart.chartHideFlags; legendObject.hideFlags = chart.chartHideFlags;
//ChartHelper.DestoryGameObjectByMatch(legendObject.transform, "_"); //ChartHelper.DestoryGameObjectByMatch(legendObject.transform, "_");

View File

@@ -48,7 +48,7 @@ namespace XCharts.Runtime
var objAnchorMin = new Vector2(0, 1); var objAnchorMin = new Vector2(0, 1);
var objAnchorMax = new Vector2(0, 1); var objAnchorMax = new Vector2(0, 1);
var objPivot = 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 iconObj = ChartHelper.AddObject("icon", btnObj.transform, anchorMin, anchorMax, pivot, iconSizeDelta);
var img = ChartHelper.EnsureComponent<Image>(btnObj); var img = ChartHelper.EnsureComponent<Image>(btnObj);
img.color = Color.clear; img.color = Color.clear;

View File

@@ -14,7 +14,7 @@ namespace XCharts.Runtime
public override void InitComponent() public override void InitComponent()
{ {
m_MarkLineLabelRoot = ChartHelper.AddObject("markarea" + component.index, chart.transform, chart.chartMinAnchor, 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; m_MarkLineLabelRoot.hideFlags = chart.chartHideFlags;
ChartHelper.HideAllObject(m_MarkLineLabelRoot); ChartHelper.HideAllObject(m_MarkLineLabelRoot);
InitMarkArea(component); InitMarkArea(component);

View File

@@ -13,7 +13,7 @@ namespace XCharts.Runtime
public override void InitComponent() public override void InitComponent()
{ {
m_MarkLineLabelRoot = ChartHelper.AddObject("markline", chart.transform, chart.chartMinAnchor, 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; m_MarkLineLabelRoot.hideFlags = chart.chartHideFlags;
ChartHelper.HideAllObject(m_MarkLineLabelRoot); ChartHelper.HideAllObject(m_MarkLineLabelRoot);
InitMarkLine(component); InitMarkLine(component);

View File

@@ -41,7 +41,7 @@ namespace XCharts.Runtime
{ {
radar.UpdateRadarCenter(chart); radar.UpdateRadarCenter(chart);
var radarObject = ChartHelper.AddObject("Radar" + radar.index, chart.transform, chart.chartMinAnchor, 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 = radarObject;
radar.gameObject.hideFlags = chart.chartHideFlags; radar.gameObject.hideFlags = chart.chartHideFlags;
ChartHelper.HideAllObject(radarObject.transform, INDICATOR_TEXT); ChartHelper.HideAllObject(radarObject.transform, INDICATOR_TEXT);

View File

@@ -22,7 +22,7 @@ namespace XCharts.Runtime
var pivot = title.location.runtimePivot; var pivot = title.location.runtimePivot;
var objName = ChartCached.GetComponentObjectName(title); var objName = ChartCached.GetComponentObjectName(title);
var titleObject = ChartHelper.AddObject(objName, chart.transform, anchorMin, anchorMax, var titleObject = ChartHelper.AddObject(objName, chart.transform, anchorMin, anchorMax,
pivot, chart.chartSizeDelta); pivot, chart.chartSizeDelta, -1, chart.childrenNodeNames);
title.gameObject = titleObject; title.gameObject = titleObject;
title.gameObject.transform.SetSiblingIndex(chart.m_PainterUpper.transform.GetSiblingIndex() + 1); title.gameObject.transform.SetSiblingIndex(chart.m_PainterUpper.transform.GetSiblingIndex() + 1);
anchorMin = title.location.runtimeAnchorMin; anchorMin = title.location.runtimeAnchorMin;

View File

@@ -53,7 +53,7 @@ namespace XCharts.Runtime
{ {
var objName = ChartCached.GetComponentObjectName(tooltip); var objName = ChartCached.GetComponentObjectName(tooltip);
tooltip.gameObject = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, 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; var tooltipObject = tooltip.gameObject;
tooltipObject.transform.localPosition = Vector3.zero; tooltipObject.transform.localPosition = Vector3.zero;
tooltipObject.hideFlags = chart.chartHideFlags; tooltipObject.hideFlags = chart.chartHideFlags;

View File

@@ -394,7 +394,7 @@ namespace XCharts.Runtime
{ {
var index = settings.reversePainter ? settings.maxPainter - 1 - i : i; var index = settings.reversePainter ? settings.maxPainter - 1 - i : i;
var painter = ChartHelper.AddPainterObject("painter_" + index, transform, m_GraphMinAnchor, 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.index = m_PainterList.Count;
painter.type = Painter.Type.Serie; painter.type = Painter.Type.Serie;
painter.onPopulateMesh = OnDrawPainterSerie; painter.onPopulateMesh = OnDrawPainterSerie;
@@ -404,7 +404,7 @@ namespace XCharts.Runtime
m_PainterList.Add(painter); m_PainterList.Add(painter);
} }
m_PainterUpper = ChartHelper.AddPainterObject("painter_u", transform, m_GraphMinAnchor, 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.type = Painter.Type.Top;
m_PainterUpper.onPopulateMesh = OnDrawPainterUpper; m_PainterUpper.onPopulateMesh = OnDrawPainterUpper;
m_PainterUpper.SetActive(true, m_DebugInfo.showAllChartObject); m_PainterUpper.SetActive(true, m_DebugInfo.showAllChartObject);
@@ -412,7 +412,7 @@ namespace XCharts.Runtime
m_PainterUpper.transform.SetSiblingIndex(settings.maxPainter + 1); m_PainterUpper.transform.SetSiblingIndex(settings.maxPainter + 1);
m_PainterTop = ChartHelper.AddPainterObject("painter_t", transform, m_GraphMinAnchor, 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.type = Painter.Type.Top;
m_PainterTop.onPopulateMesh = OnDrawPainterTop; m_PainterTop.onPopulateMesh = OnDrawPainterTop;
m_PainterTop.SetActive(true, m_DebugInfo.showAllChartObject); m_PainterTop.SetActive(true, m_DebugInfo.showAllChartObject);

View File

@@ -158,8 +158,8 @@ namespace XCharts.Runtime
/// </summary> /// </summary>
public void RebuildChartObject() public void RebuildChartObject()
{ {
ChartHelper.DestroyAllChildren(transform); ChartHelper.DestoryGameObjectByMatch(transform, m_ChildNodeNames);
SetAllComponentDirty(); //SetAllComponentDirty();
} }
public bool ScreenPointToChartPoint(Vector2 screenPoint, out Vector2 chartPoint) public bool ScreenPointToChartPoint(Vector2 screenPoint, out Vector2 chartPoint)

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using UnityEngine.UI; using UnityEngine.UI;
@@ -14,6 +15,7 @@ namespace XCharts.Runtime
IDragHandler, IEndDragHandler, IScrollHandler IDragHandler, IEndDragHandler, IScrollHandler
{ {
[SerializeField] protected bool m_EnableTextMeshPro = false; [SerializeField] protected bool m_EnableTextMeshPro = false;
[SerializeField] protected List<string> m_ChildNodeNames = new List<string>();
protected Painter m_Painter; protected Painter m_Painter;
protected int m_SiblingIndex; protected int m_SiblingIndex;
@@ -54,6 +56,7 @@ namespace XCharts.Runtime
private ScrollRect m_ScrollRect; private ScrollRect m_ScrollRect;
public Painter painter { get { return m_Painter; } } public Painter painter { get { return m_Painter; } }
public List<string> childrenNodeNames { get { return m_ChildNodeNames; } }
protected virtual void InitComponent() protected virtual void InitComponent()
{ {
@@ -158,7 +161,7 @@ namespace XCharts.Runtime
protected virtual void InitPainter() protected virtual void InitPainter()
{ {
m_Painter = ChartHelper.AddPainterObject("painter_b", transform, m_GraphMinAnchor, 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.type = Painter.Type.Base;
m_Painter.onPopulateMesh = OnDrawPainterBase; m_Painter.onPopulateMesh = OnDrawPainterBase;
m_Painter.transform.SetSiblingIndex(0); m_Painter.transform.SetSiblingIndex(0);

View File

@@ -156,6 +156,21 @@ namespace XCharts.Runtime
} }
} }
public static void DestoryGameObjectByMatch(Transform parent, List<string> 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) public static void DestoryGameObject(GameObject go)
{ {
if (go != null) GameObject.DestroyImmediate(go, true); if (go != null) GameObject.DestroyImmediate(go, true);
@@ -233,7 +248,7 @@ namespace XCharts.Runtime
} }
public static GameObject AddObject(string name, Transform parent, Vector2 anchorMin, 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<string> cacheNames = null)
{ {
GameObject obj; GameObject obj;
if (parent.Find(name)) if (parent.Find(name))
@@ -267,6 +282,8 @@ namespace XCharts.Runtime
rect.anchorMax = anchorMax; rect.anchorMax = anchorMax;
rect.pivot = pivot; rect.pivot = pivot;
rect.anchoredPosition3D = Vector3.zero; rect.anchoredPosition3D = Vector3.zero;
if (cacheNames != null && !cacheNames.Contains(name)) cacheNames.Add(name);
return obj; return obj;
} }
@@ -332,9 +349,9 @@ namespace XCharts.Runtime
} }
public static Painter AddPainterObject(string name, Transform parent, Vector2 anchorMin, Vector2 anchorMax, 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<string> 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.hideFlags = hideFlags;
painterObj.transform.SetSiblingIndex(siblingIndex); painterObj.transform.SetSiblingIndex(siblingIndex);
return ChartHelper.EnsureComponent<Painter>(painterObj); return ChartHelper.EnsureComponent<Painter>(painterObj);

View File

@@ -314,7 +314,7 @@ namespace XCharts.Runtime
} }
var objName = s_SerieRootObjectName + "_" + serie.index; var objName = s_SerieRootObjectName + "_" + serie.index;
m_SerieRoot = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor, 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; m_SerieRoot.hideFlags = chart.chartHideFlags;
ChartHelper.SetActive(m_SerieRoot, true); ChartHelper.SetActive(m_SerieRoot, true);
ChartHelper.HideAllObject(m_SerieRoot); ChartHelper.HideAllObject(m_SerieRoot);