From 095c653b331748e4dbfe33bacb28e3e2b240ef1e Mon Sep 17 00:00:00 2001 From: wuwenbo Date: Fri, 5 Jun 2026 19:26:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=91=E7=8E=B0=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E5=B0=8F=E5=85=B5=E5=BC=82=E5=B8=B8=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E8=87=AA=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/TH1_Logic/Action/ActionLogic.cs | 1 + .../Scripts/TH1_Renderer/MapRenderer.cs | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/Unity/Assets/Scripts/TH1_Logic/Action/ActionLogic.cs b/Unity/Assets/Scripts/TH1_Logic/Action/ActionLogic.cs index bf5d7bfb1..21770094f 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Action/ActionLogic.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Action/ActionLogic.cs @@ -1345,6 +1345,7 @@ namespace Logic.Action AppendDataOnlyUnitsLog(sb, mapData, mapRenderer); LogSystem.LogError(sb.ToString()); + mapRenderer.RepairUnitRenderersToData(mapData, _sharedRendererOnlyUnitIds, _sharedDataOnlyUnitIds); } private static void AppendPreviousActionsLog(StringBuilder sb, MapData mapData) diff --git a/Unity/Assets/Scripts/TH1_Renderer/MapRenderer.cs b/Unity/Assets/Scripts/TH1_Renderer/MapRenderer.cs index 56b4c6e6f..de93ee8e0 100644 --- a/Unity/Assets/Scripts/TH1_Renderer/MapRenderer.cs +++ b/Unity/Assets/Scripts/TH1_Renderer/MapRenderer.cs @@ -452,6 +452,48 @@ namespace TH1Renderer } } } + + public void RepairUnitRenderersToData(MapData mapData, List rendererOnlyUnitIds, List dataOnlyUnitIds) + { + if (mapData != Main.MapData || mapData?.UnitMap == null || ROUnitMap == null) return; + if (PresentationManager.Busy) return; + + if (rendererOnlyUnitIds != null) + { + foreach (var unitId in rendererOnlyUnitIds) + { + if (!ROUnitMap.TryGetValue(unitId, out var orphanRenderer)) continue; + if (orphanRenderer != null) + orphanRenderer.Die(); + else + ROUnitMap.Remove(unitId); + } + } + + if (dataOnlyUnitIds != null) + { + foreach (var unitId in dataOnlyUnitIds) + { + if (!mapData.UnitMap.GetUnitDataByUnitId(unitId, out var unitData) || unitData == null) continue; + if (ROUnitMap.TryGetValue(unitId, out var existingRenderer)) + { + if (existingRenderer != null && existingRenderer.IsValid) continue; + if (existingRenderer != null) + existingRenderer.Die(); + else + ROUnitMap.Remove(unitId); + } + + var unitRenderer = new UnitRenderer(_unitPrefab, _unitRenderMap, unitData.Id); + if (!unitRenderer.IsValid) continue; + ROUnitMap[unitData.Id] = unitRenderer; + unitRenderer.InstantUpdateUnit(true); + } + } + + if (SelectUnitData != null && !mapData.UnitMap.GetUnitDataByUnitId(SelectUnitData.Id, out _)) + SelectUnitData = null; + } //当projectileMap出现新的对象时,新建对象 public void RenderUpdateProjectileMap()