今天在写Entitas的时候遇到一个问题,我创建一个 ClickComponet
[Input, Unique]
public class ClickComponent : IComponent
{
// 如果需要做筛选这里不能放对象
public GVector2 position;
}
当我点击了,需要去通过 我的GameContext 筛选点击对象的时候发现,始终无法筛选到
protected override void Execute(List<InputEntity> entities)
{
var clickPos = entities.SingleEntity().gameClick.position;
var gameEntities = _contexts.game.GetEntitiesWithGameElementIndex(new GVector2(clickPos));
var entity = gameEntities.SingleEntity();
}
查看源码 GetEntitiesWithGameElementIndex, 是通过 Dictionary来查找实现,这样对象之间值相等 HashCode 不等,在Dict的内部实现中,比较两个key是否相等用到了两个方法:GetHashCode()和Equal(),所以接下来需要在自定义类(GVector2 )中重写GetHashCode()和Equal()方法, Entitas就可以筛选出我们想要的Entity了。