我們通過一個渲染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);
}
}
}