将Rigidbody.AddForce与NavmeshAgent结合使用

时间:2019-05-19 10:11:48

标签: unity3d game-development

对于这个问题,我似乎无法获得任何建议。我有一个跟随着我的玩家的座席,我想在该座席击中我的球员时将其推回去,并且可以正常工作,但是座席的位置似乎无法正确更新,因为在碰撞之后它无法正确地尝试到达再次认为玩家已经到达了位置。

它在Unity文档中还说我需要将RigidBody设置为Kinematic,但是然后我不能对其施加力了?

private void Update()
{
    if (!playerHit && followPlayer)
    {
        _agent.SetDestination(GameManager.instance.ActivePlayer.transform.position);
    }
}

private void FixedUpdate()
{
    if (playerHit)
    {
        _rb.AddForce(-transform.forward * 10, ForceMode.Impulse);
    }
}

1 个答案:

答案 0 :(得分:0)

您可以通过在一定时间内禁用navmesh代理,然后在速度接近零时重新启用它来实现此目的。

private void Update()
{
    if (!playerHit && followPlayer)
    {
        _agent.SetDestination(GameManager.instance.ActivePlayer.transform.position);
    }
}

private void FixedUpdate()
{
    if (playerHit)
    {
        agent.enabled = false; // disabling the navmesh agent.
        _rb.AddForce(-transform.forward * 10, ForceMode.Impulse);
    }
}

实施可以改善,请告诉我是否有帮助。