Event特性可以使得模拟层和视图层完全解耦
目标: 使得点击一下鼠标 增加一次分数 (基于Entitas的Written Tutorials的第一个Hello world)
Component
[Game, Unique, Event(true)]
public class ScoreComponent:IComponent {
public int value;
}
System
public class ScoreSystem : ReactiveSystem<GameEntity>, IInitializeSystem
{
readonly Contexts _contexts;
public ScoreSystem(Contexts contexts):base(contexts.game)
{
_contexts = contexts;
}
/// <summary>
/// 初始化
/// </summary>
public void Initialize()
{
_contexts.game.SetScore(0);
}
protected override void Execute(List<GameEntity> entities)
{
_contexts.game.ReplaceScore(_contexts.game.score.value + 1);
}
protected override bool Filter(GameEntity entity)
{
return entity.hasDebugMessage;
}
protected override ICollector<GameEntity> GetTrigger(IContext<GameEntity> context)
{
return context.CreateCollector(GameMatcher.DebugMessage);
}
}
在GameSystem里添加生成的 Add(new GameEventSystems(contexts));
Monobehavior(启动脚本)
public class ScoreLabelController : MonoBehaviour, IScoreListener {
public Text label;
void Start () {
// scoreEntity是单例
Contexts.sharedInstance.game.scoreEntity.AddScoreListener(this);
}
public void OnScore(GameEntity entity, int value)
{
label.text = "Score: " + value;
}
}