1. Вместо AddForce просто выставлять скорость движения (через RigidBody.velocity) - вот тебе и постоянное движение с постоянной скоростью
2. Джойстик возвращает значение двух своих осей от -1 до 1 - по ним при помощи школьных формул можно высчитать угол поворота (гугл: как преобразовать декартовы координаты в полярные).
Но в теории ты можешь просто нормализовать этот вектор, скалярно умножить на скорость, и передавать сразу в velocity и в LookAt, без лишних вычислений
Но как я смотрю - ты это примерно и делаешь, просто AddForce лишний, кмк.
Либо наоборот - лишний velocity, ибо документация Unity рекомендует использовать только одно.
А ещё я не вижу, где выставляется значение _moveSpeed (и чем это отличается от runSpeed).
Если нигде, то оно будет всегда 0, и персонаж двигаться не будет.
В общем внимательно читай документацию и свой собственный код, и пытайся понять, как его должен воспринимать движок.