Unity 3d использование кода на передвижение по верх Nav mesh agent

using Unity.Collections;
using UnityEngine;
using UnityEngine.AI;

public class PlayerController : MonoBehaviour
{
    public LayerMask Click;
    public Transform shotPoint;
    public GameObject bullet;
    public float range;
    Rigidbody rb;

    private NavMeshAgent myAgent;
    Ray myRay;
    RaycastHit hitInfo;

    public Camera _camera;

    void Start()
    {
        myAgent = GetComponent<NavMeshAgent>();
        rb = GetComponent<Rigidbody>();
    }

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            myRay = _camera.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(myRay, out hitInfo, 100, Click))
            {
                myAgent.SetDestination(hitInfo.point);
            }
        }
        if (Input.GetKeyDown(KeyCode.LeftAlt))
        {
            Instantiate(bullet, shotPoint.position, shotPoint.rotation);
        }
        if (Input.GetKeyDown(KeyCode.Q))
        {
            
        }
    }
} 

Описание цели:

  • данный код служит для передвижения по клику мыши, эту часть он отрабатывает на ура. Проблема в части где на клавишу Q должен производится перекат. Я пробовал так:

    if (Input.GetKeyDown(KeyCode.Q))
     {
         rb.velocity = transform.forward * range;
     }
    
  • но все работало криво. При нажатии на Q персонаж перемещается на некое кол-во единиц, но в тот же момент как он переместился он по крутится и вернется в точку (или в ту которая была задана для перемещения путем нажатием клавиши мыши, или в изначальную если перед нажатием Q не было задано другое перемещение )

Так в чем вопрос то:

  • Как написать импульсное перемещение(нажал на кнопку и переместился на некое кол-во), так чтобы он не противоречил Nav mesh agent?

Ответы (0 шт):