我有一个Rigidbody2D节点(需要CollisionShape2D),在它里面有一个Area2D节点(也需要CollisionShape2D)。当我创建其中两个CollisionShapes时,将破坏物理场。因此,我只想拥有一个CollisionShape,但同时要为物理工作并在有东西进入时触发动作。有可能吗?
也许我的方法是绝对错误的,我对Godot还是很陌生,如果是的话,请告诉我如何正确执行此操作。谢谢!
答案 0 :(得分:0)
有一个陷阱,但是从您写的内容来看,我不确定您是否正确设置了所有内容,因此让我们从头开始。
您的树结构应如下所示:
外部的大蓝色正方形是我的Area2D
的{{1}}形状,而内部的小蓝色正方形是我的CollisionShape2D
的{{1}}形状。
您的Area2D应该具有正确设置的信号(即,连接到场景树中某个地方的脚本)。在此示例中,我选择将脚本放在RigidBody2D
本身上,并在此处捕获信号。
如您所见,我决定抓住任何进入我区域的尸体。
现在,如果您看一下我的代码,这是个陷阱:您必须忽略CollisionShape2D
的父RigidBody2D
本身,否则它将继续检测与它自己的父的冲突。 / p>
当然,做这种事情的最好方法是使用collision layers and masks,而不是每次都检查碰撞是否来自父项。
答案 1 :(得分:0)
碰撞层和遮罩是必经之路。进入“项目设置”,然后首先在常规(标签)和层名称(最底部的左侧)下命名碰撞层。然后,您可以在标题 PhysicsBody > Collision 下的小方框行中找到图层和蒙版。右侧是带有几个点的按钮,它显示带有复选框的命名图层。
图层用于对所有内容进行分类。遮罩用于定义每个对象将与哪些层碰撞。你可以在这里阅读更多: http://kidscancode.org/blog/2018/02/godot3_kinematic2d/