在围绕组件设计的游戏中,尝试绕过正确处理碰撞的方法。
我看到许多示例PhysicsComponent
在实体的组件列表中添加了某种示例,但实际的实现使我感到困惑。
为了PhysicsComponent
使它起作用,需要访问周围的环境。这对我来说没有直觉。组件不应该不仅意识到其容器(实体),还没有意识到其容器的容器(世界)吗?
对我来说,听起来好像关卡或场景应该维护这些实体的列表,并且每次游戏更新都会遍历这些实体以确定哪个碰撞。
我的问题是,首先,这是否是好的设计,其次,如何确定哪些实体会发生冲突。我想实体实体可以实现一个空的IRigidBody接口,以便该级别可以确定列表中的哪些实体支持冲突。但这会破坏组件设计吗?
相反,它们应该包含一个空的RigidBody成分吗?实际上,这可能会更好,因为它可能并不总是空的,而且这种方法更适合未来。唯一的问题是复杂性。场景不仅必须遍历每个实体,还必须遍历每个实体的组件,以确定它是否具有此RigidBody组件。
第三,当它们确实发生碰撞时,应该以某种方式告知两个实体,我也不确定如何做到这一点。
假设两个实体都包含一个HealthComponent,并且当它们碰撞时,两个实体的健康状况都会降低一些任意值5。我想当场景中检测到两个实体之间发生碰撞时,要负责处理此问题?
但是,现场是否要承担太多责任?当场景负责实体不应该访问的许多事物时,我可以看到这种情况可能会变得一发不可收拾并且变得笨拙。
编辑:问题已更新,具有更多详细信息。