移动功能实现
- 创建位置组件(Component),速度组件。(注:这里采用的移动方法是数学计算,位移 = 速度*时间)
- 创建实体(Entity),添加组件
- 创建移动系统(system),通过GameMatcher查找具有指定组件的实体,对实体进行控制
public class MoveSystem : IExecuteSystem
{
private readonly IGroup<GameEntity> _group;
public MoveSystem(Contexts contexts)
{
_group = contexts.game.GetGroup(GameMatcher.AllOf(
GameMatcher.PosComp,
GameMatcher.VelComp
));
}
public void Execute()
{
var dt = Time.deltaTime;
foreach (var entity in _group.GetEntities())
{
var pos = entity.posComp;
var vel = entity.velComp;
entity.ReplacePosComp(new Vector2(
pos.Value.x + dt * vel.Value.x,
pos.Value.y + dt * vel.Value.y
));
}
}
}
- 创建继承自MonoBehaviour的GameManager,继承自Feature的GameSystems,通过GameManager控制GameSystems
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
private Contexts _contexts;
private GameSystems _gameSystems;
private FixedUpdateGameSystems _fixedUpdateGameSystems;
private void Awake()
{
if (Instance != null)
Destroy(Instance.gameObject);
Instance = this;
_contexts = Contexts.sharedInstance;
_gameSystems = new GameSystems(_contexts);
_fixedUpdateGameSystems = new FixedUpdateGameSystems(_contexts);
}
private void Start