【发布时间】:2021-12-09 21:20:26
【问题描述】:
我一直在研究基于组件的系统的想法。想象一下我把它们变成了这样:
public class CObject
{
public Component[] components;
public T GetComponent<T>(string name = string.empty)
{
foreach(var c in components) if(c is T) if(name != string.empty || c.name == name) return c as T;
}
}
然后我们就可以像这样从脚本中获取组件了:
// ... some code
DragonComponent dragonComponent = dragonObject.GetComponent<DragonComponent>();
// some code ...
但正如您所见,每次通话都需要拳击... 我可以通过为以前的调用制作一个静态字典来提高效率,如果给出了类似的调用,我可以让它只使用字典。但是,它仍然非常混乱且效率不高...
我听说有类似联合的结构,GetComponent 可以这样实现:
public class CObject
{
private class CTypes {
public DragonComponent[] dragonComponents;
public CameraFocus[] cameraFocuses;
}
CTypes components;
public T GetComponent<T>()
{
switch(T)
{
case DragonComponent: return components.dragonComponents[0];
case CameraFocus: return components.cameraFocuses[0];
}
}
}
这是超级性能,但很难实现...我不知道如何自动化在类联合结构中创建新类型的过程。
最好的方法是什么?
谢谢 :D
【问题讨论】:
-
可能是
Dictionary<Type, List<object>>?然后public T GetComponent<T>() => _components[typeof(T)].OfType<T>() -
谢谢。明白了:D!
标签: c# data-structures components computer-science