2. Entitas ReactiveSystem 用法解析

我們通過一個渲染Sprite的例子來解析 ReactiveSystem的用法

 

  • .我們來看收集器,這個由我們的Context,直接提供在代碼中自動生成一般不用變,生成玩代碼後GameMatcher會自動添加我們組件對應的收集器。

      context.CreateCollector(GameMatcher.InterationDemoSprite);

  • Filter 這個是篩選,我們從過條件來判斷是否滿足需求,我們這裏寫的是 當前的entity包含一個 View組件和Sprite兩個組件這樣我們才能將圖片渲染到屏幕上。

  • Execute 這個是執行函數通過收集器和篩選器,最終的所有符合條件的entities 會傳過來,我們這裏做的操作給當前entity的view組件中的gameobject, 添加SpriteRender Unity組件,用於渲染我們的精靈

  • Context是一種爲Entity服務的的管理性數據結構。一個Entity不能自己獨立創建,它必須通過context.CreateEntity()

public class RenderSpriteSystem : ReactiveSystem<GameEntity>
{
    public RenderSpriteSystem(Contexts contexts) : base(contexts.game)
    {
    }

    protected override ICollector<GameEntity> GetTrigger(IContext<GameEntity> context)
    {
        return context.CreateCollector(GameMatcher.InterationDemoSprite);
    }

    protected override bool Filter(GameEntity entity)
    {
        return entity.hasInterationDemoView && entity.hasInterationDemoSprite;
    }

    protected override void Execute(List<GameEntity> entities)
    {
        foreach (var entity in entities)
        {
            Transform trans = entity.interationDemoView.transform;
            SpriteRender spr = trans.GetComponent<SpriteRenderer>();
            if (spr == null) spr = trans.gameObject.AddComponent<SpriteRenderer>();
            spr.sprite = Resources.Load<Sprite>(entity.interationDemoSprite.spriteName);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章