(client) feat:修复Tick中创建实体导致遍历时修改列表错误

This commit is contained in:
m0_75251201
2025-08-17 12:21:46 +08:00
parent ed7ecdb226
commit dea6cd5fa3

View File

@ -20,6 +20,9 @@ namespace Managers
public EntityPrefab defaultEntityPrefab; public EntityPrefab defaultEntityPrefab;
private List<Tuple<string,EntityPrefab>> pendingAdditions;
public LinkedList<EntityPrefab> FindEntitiesByFaction(string factionKey) public LinkedList<EntityPrefab> FindEntitiesByFaction(string factionKey)
{ {
if (factionEntities.TryGetValue(factionKey, out var entities)) if (factionEntities.TryGetValue(factionKey, out var entities))
@ -56,6 +59,20 @@ namespace Managers
Destroy(entityToRemove.gameObject); Destroy(entityToRemove.gameObject);
} }
} }
if (pendingAdditions.Any())
{
foreach (var entity in pendingAdditions)
{
if (!factionEntities.ContainsKey(entity.Item1))
{
factionEntities[entity.Item1] = new LinkedList<EntityPrefab>();
}
factionEntities[entity.Item1].AddLast(entity.Item2);
}
pendingAdditions.Clear();
}
} }
/// <summary> /// <summary>
@ -96,12 +113,14 @@ namespace Managers
// 管理派系列表 // 管理派系列表
var factionKey = def.attributes.label ?? "default"; var factionKey = def.attributes.label ?? "default";
if (!factionEntities.ContainsKey(factionKey)) pendingAdditions.Add(Tuple.Create(factionKey, entityComponent));
{
factionEntities[factionKey] = new LinkedList<EntityPrefab>();
}
factionEntities[factionKey].AddLast(entityComponent); // if (!factionEntities.ContainsKey(factionKey))
// {
// factionEntities[factionKey] = new LinkedList<EntityPrefab>();
// }
// factionEntities[factionKey].AddLast(entityComponent);
return entityComponent; return entityComponent;
} }
@ -219,13 +238,14 @@ namespace Managers
var entityComponent = entity.GetComponent<EntityPrefab>(); var entityComponent = entity.GetComponent<EntityPrefab>();
const string factionKey = "default"; const string factionKey = "default";
if (!factionEntities.ContainsKey(factionKey)) pendingAdditions.Add(Tuple.Create(factionKey, entityComponent));
{ // if (!factionEntities.ContainsKey(factionKey))
factionEntities[factionKey] = new LinkedList<EntityPrefab>(); // {
} // factionEntities[factionKey] = new LinkedList<EntityPrefab>();
// }
entityComponent.DefaultInit(); // entityComponent.DefaultInit();
factionEntities[factionKey].AddLast(entityComponent); // factionEntities[factionKey].AddLast(entityComponent);
} }
protected override void OnStart() protected override void OnStart()