I have the following code:
private Dictionary<int, Entity> m_allEntities;
private Dictionary<Entity, List<IComponent>> m_entityComponents;
public Dictionary<int, T> GetComponentType<T>() where T: IComponent
{
Dictionary<int, T> components = new Dictionary<int, T>();
foreach (KeyValuePair<int, Entity> pair in m_allEntities)
{
foreach (T t in m_entityComponents[m_allEntities[pair.Key]])
{
components.Add(pair.Key, t);
}
}
return components;
}
m_allEntities = 存储所有实体的字典,键为它们的ID,值为实体对象。 m_entityComponents = 存储所有实体及其组件列表的字典,键为实体对象,值为它的组件列表。
我有几个不同的类实现了IComponents接口。GetComponentType()函数的作用是循环遍历所有实体,并创建一个特定类型的实体ID和组件的字典。
例如:如果我想要获取所有具有位置组件的实体列表,则可以使用:
entityManager.GetComponentType<Location>();
我遇到的问题出在第二个循环中,因为它似乎没有过滤我的字典。相反,它试图将字典中所有组件强制转换为“Location”类型,这当然会引发异常。我该如何修改这段代码以达到想要的效果?