我目前正在使用GDI +在C#中开发基于组件的游戏引擎,并且已经达到某些组件依赖其他组件的程度。
我希望创建一个RequireComponents属性,该属性检查游戏对象是否包含所需的组件(非常类似于统一性)
我之前从未真正创建过自定义属性...很抱歉,如果我听起来很愚蠢,但我不确定如何处理它。
这就是我迄今为止所做的一切哈哈:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GameEngine.Components
{
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class RequireComponent : Attribute
{
public RequireComponent(Type type)
{
}
}
}
非常感谢任何帮助。
答案 0 :(得分:0)
其余的完全取决于您的库,但我认为这几乎就是属性级别所需要的。
只需添加一个字段即可存储所需的类型,以便以后能够使用它。
Type componentType;
public Type ComponentType{
get{ return componentType; }
}
在构造函数中设置它。
稍后,当您向实体添加组件时......
// Returns whether the component is successfully added
public bool AddComponent(Component c){
var attribute =
c.GetType().
GetCustomAttributes(typeof(RequireComponent), true).
FirstOrDefault() as RequireComponent;
if (attribute != null)
{
// Check requirements
if(!AlreadyHasComponent(requiredAttribute.ComponentType)){
return false;
}
}
// Requirements met: Add c
return true;
}
您可能希望将字段改为List<Type>
。
甚至可以查看Unity的现有ECS库。 有一个特别是我尝试了很多:Entitas