Component介紹
Component是ECS框架中重要組成部分之一的組件斯够。在Entitas中它是一個接口類,我們需要實現(xiàn)它的接口來保存我們需要的數(shù)據(jù)江兢。同時Entitas還給我們提供各種特殊的標簽屬性昨忆,通過生成代碼為我們生成具有各種特殊功能的組件。例如:[Attributes]
確保最多存在一個具有此組件的實體杉允,類似單例邑贴;[Event]
類似事件組件席里,當這個組件改變了可以回調(diào)到對應的注冊方法。還有很多其它實用的屬性拢驾,我們可以在這里查看奖磁。
一、IComponent接口
IComponent是一個接口繁疤,Entitas中所有我們自定義的Component都必須繼承它咖为。
public interface IComponent {
}
二、ComponentsLookup
正如它的命名稠腊,這個類就是用來定義和查找Context中Component的相關信息躁染。這個類是代碼生成器自動生成的,無須我們手動編寫架忌。它主要為我們自定義的Component定義了一個int類型的索引吞彤。在其他地方我們都是通過這個索引來關聯(lián)對應的Componet,例如:作為Entity中保存的組件數(shù)組的下標叹放;Matcher中篩選數(shù)組的下標等饰恕。這樣,所有引用Component的地方都可以使用數(shù)組下標訪問井仰,提高效率埋嵌。
public static class GameComponentsLookup {
//定義組件索引
public const int Asset = 0;
public const int Destroy = 1;
public const int Log = 2;
public const int Position = 3;
//組件的總個數(shù),初始化Entity是用到
public const int TotalComponents = 4;
public static readonly string[] componentNames = {
"Asset",
"Destroy",
"Log",
"Position"
};
//所有組件類型的數(shù)組
public static readonly System.Type[] componentTypes = {
typeof(AssetComponent),
typeof(DestroyComponent),
typeof(LogComponent),
typeof(PositionComponent)
};
}
三糕档、總結(jié)
Component是Entitas中的數(shù)據(jù)類莉恼,它通過組合添加到Entity上來實現(xiàn)各種各樣不同含義的對象拌喉。Entitas為我們提供了各種特殊的屬性標簽速那,通過生成代碼,表現(xiàn)出不同特征的組件尿背,例如:單例端仰,事件,鍵值對等田藐。同時還會自動為我們所有的Component生成對應的索引荔烧,方便我們在其他地方方便快速的訪問。