Godot-父母可以与孩子分享CollisionShape吗?

时间:2019-03-23 21:03:43

标签: godot

我有一个Rigidbody2D节点(需要CollisionShape2D),在它里面有一个Area2D节点(也需要CollisionShape2D)。当我创建其中两个CollisionShapes时,将破坏物理场。因此,我只想拥有一个CollisionShape,但同时要为物理工作并在有东西进入时触发动作。有可能吗?

也许我的方法是绝对错误的,我对Godot还是很陌生,如果是的话,请告诉我如何正确执行此操作。谢谢!

2 个答案:

答案 0 :(得分:0)

有一个陷阱,但是从您写的内容来看,我不确定您是否正确设置了所有内容,因此让我们从头开始。

您的树结构应如下所示: enter image description here 外部的大蓝色正方形是我的Area2D的{​​{1}}形状,而内部的小蓝色正方形是我的CollisionShape2D的{​​{1}}形状。

您的Area2D应该具有正确设置的信号(即,连接到场景树中某个地方的脚本)。在此示例中,我选择将脚本放在RigidBody2D本身上,并在此处捕获信号。 enter image description here 如您所见,我决定抓住任何进入我区域的尸体。

现在,如果您看一下我的代码,这是个陷阱:您必须忽略CollisionShape2D的父RigidBody2D本身,否则它将继续检测与它自己的父的冲突。 / p>

当然,做这种事情的最好方法是使用collision layers and masks,而不是每次都检查碰撞是否来自父项。

答案 1 :(得分:0)

碰撞层和遮罩是必经之路。进入“项目设置”,然后首先在常规(标签)和层名称(最底部的左侧)下命名碰撞层。然后,您可以在标题 PhysicsBody > Collision 下的小方框行中找到图层和蒙版。右侧是带有几个点的按钮,它显示带有复选框的命名图层。

图层用于对所有内容进行分类。遮罩用于定义每个对象将与哪些层碰撞。你可以在这里阅读更多: http://kidscancode.org/blog/2018/02/godot3_kinematic2d/