大家好!!!我正在用C#从零开始开发一个游戏作为编程练习。 我喜欢看到的关于ECS的内容,至少足够简单地创建一个平台游戏原型。
我试图实现非常简单的物理:如果实体A站在实体B上面,那么B的任何移动也会传递给A,就像原始的超级马里奥游戏中的飞行平台一样。 这很容易实现,但我也想让任何数量的实体都可以堆叠起来。 如果有90个盒子堆叠在一起,那么底部的盒子会移动上面的88个盒子,第二个盒子会移动上面的87个盒子...
最初,这个实现的方式是这样的:实体有一个MovementComponent。 在移动系统移动一个实体之前,它会检查这个实体是否站在一个平台上。 如果这个是真的,它会试着先移动这个平台,直到到达底部。 一旦任何一个实体被移动,移动的距离就会被保存在一个MovementData组件中,然后所有堆叠在上面的实体都可以读取这个MovementData来知道它们会移动多少。
(这种从下往上的方法是有效的)
我想知道是否有任何人有ECS经验可以告诉我这个代码的稳定性和可用性。 我觉得很多“ECS纯粹性”都被丢失了(我知道,不所有的东西都需要是ECS,但我希望代码是连贯的),因为最终你需要检查谁需要移动的顺序是不可预测的。 运动系统看起来有点过载:它会移动实体,移动它们,检测碰撞,解决碰撞... 这个代码会长久吗,还是说当我实现更复杂的碰撞时(例如陷阱或关卡结尾)就会崩溃? 是不是有更有用的,更流行的方法来实现这些东西?
我的第二种方法是,让运动系统无论什么情况下都移动所有实体,然后创建一个碰撞列表。 然后,碰撞系统就会根据涉及的实体来解决每个碰撞。 但当我写代码时,我意识到我要实现的东西几乎与我之前的实现一样,只是更抽象了一点。
总之,TLDR:如何在ECS中实现平台? 感谢你们!!!
评论 (0)