ECS Entitas分析(三)___Component

Component介紹

Component是ECS框架中重要組成部分之一的組件。在Entitas中它是一個接口類,我們需要實現它的接口來保存我們需要的數據。同時Entitas還給我們提供各種特殊的標簽屬性,通過生成代碼為我們生成具有各種特殊功能的組件。例如:[Attributes]確保最多存在一個具有此組件的實體,類似單例;[Event]類似事件組件,當這個組件改變了可以回調到對應的注冊方法。還有很多其它實用的屬性,我們可以在這里查看

一、IComponent接口

IComponent是一個接口,Entitas中所有我們自定義的Component都必須繼承它。

public interface IComponent {

}
二、ComponentsLookup

正如它的命名,這個類就是用來定義和查找Context中Component的相關信息。這個類是代碼生成器自動生成的,無須我們手動編寫。它主要為我們自定義的Component定義了一個int類型的索引。在其他地方我們都是通過這個索引來關聯對應的Componet,例如:作為Entity中保存的組件數組的下標;Matcher中篩選數組的下標等。這樣,所有引用Component的地方都可以使用數組下標訪問,提高效率。

public static class GameComponentsLookup {
    //定義組件索引
    public const int Asset = 0;
    public const int Destroy = 1;
    public const int Log = 2;
    public const int Position = 3;
    
    //組件的總個數,初始化Entity是用到
    public const int TotalComponents = 4;
    
    public static readonly string[] componentNames = {
        "Asset",       
        "Destroy",    
        "Log",
        "Position"
    };
    //所有組件類型的數組
    public static readonly System.Type[] componentTypes = {
        typeof(AssetComponent),
        typeof(DestroyComponent),
        typeof(LogComponent),
        typeof(PositionComponent)
    };
}
三、總結

Component是Entitas中的數據類,它通過組合添加到Entity上來實現各種各樣不同含義的對象。Entitas為我們提供了各種特殊的屬性標簽,通過生成代碼,表現出不同特征的組件,例如:單例,事件,鍵值對等。同時還會自動為我們所有的Component生成對應的索引,方便我們在其他地方方便快速的訪問。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。