首页 > 解决方案 > 我可以在 Godot 中进行半圆碰撞吗?

问题描述

我在 Godot 中制作了一个半圆形的 2D 形状。现在我试图给它适当的碰撞。到目前为止,我还没有找到办法做到这一点。CollisionShape2D 节点只允许简单的形状,如圆形和矩形,而 CollisionPolygon2D 形状不允许我制作我需要的弯曲形状。有什么办法可以得到正确的碰撞吗?

标签: 2dcollision-detectiongame-enginegame-physicsgodot

解决方案


我不熟悉执行此操作的内置函数。

但是,您可以做两件事:

  1. 使用 CollisionPolygon2D 近似圆形。这很简单并且会起作用。但是,可能效率不高。
  2. 您覆盖对象的碰撞方法。这也很简单:

假设它是 head_dir 方向的半圆。简单地:

dir := head_dir
position := this object position
circRadius := semi-circle radius
otherPos := other object position
inside = false
if(dotProduct(dir, otherPos) >= 0):
    inside = true
if(inside):
    if(norm(otherPos - position) > radius)
        inside = false
return inside

第二种方法将为您提供您正在寻找的确切碰撞。您只需要更新 head_dir。


推荐阅读