【问题标题】:Get Rigidbody2D collision velocity without the sliding factor获取没有滑动因子的 Rigidbody2D 碰撞速度
【发布时间】:2022-12-20 10:18:43
【问题描述】:

我有一辆飞行汽车,我想在与物体碰撞时损失一些 HP。

我将汽车的 RigidBody2D 连接到此功能以执行此操作

func _on_Car_body_entered(body):
    var force = linear_velocity.length()
    var dmg = pow(force / 100, 2) - 0.25
    if dmg <= 0: return
    Health = Health - dmg

现在,因为我不必非常精确,所以我只是使用当前速度作为力,尽管这是有待改变的。

得到我的“冲击力”后,我将其输入伤害计算公式,如果伤害大于0,则减少HP伤害。

这在大多数情况下工作正常

我注意到,如果汽车在水平方向快速行驶并且几乎不接触地面(完全水平),汽车会受到很大的伤害,因为我使用的是速度矢量的长度。

当然,这种情况可以通过仅使用速度矢量的 Y 分量来管理,但它会消除任何水平碰撞,反之亦然,它也让我走上了编程垂直和水平碰撞的道路,当然那些是不是我需要的仅有的两个碰撞方向。

有没有办法从这个等式中删除滑动因子?

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    橡皮鸭在这里

    在汽车脚本中,我添加了一个新变量var last_linear_velocity = Vector2()

    然后将最后一个速度存入_process

    func _process(delta):
        last_linear_velocity = linear_velocity
    

    不在 _integrate_forces 中,因为如果我把它放在那里,那么新的速度和最后的速度是相同的。

    只是改变了上面提到的函数中力的计算方式,所以它看起来像这样

    func _on_Car_body_entered(body):
        var force = last_linear_velocity.length() - linear_velocity.length()
        var dmg = pow(force / 100, 2) - 0.25
        if dmg <= 0: return
        Health = Health - dmg
    

    现在我得到了一个很好的可预测值范围,可以将其转化为伤害。

    笔记

    我注意到有时当发生碰撞时,最后一个速度长度和当前速度长度之间的差异是负的,因为 - 汽车正在加速。

    无论如何,这对我现在有用。

    如果您找到更好的解决方案,请将其发布,因为我无法在其他地方在线找到解决此问题的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多