Движение в Unity 3D
Делаю движение танка WSAD в void FixedUpdate() отслеживаю нажатие клавиши и с помощью физической силы двигаю в стороны.
transform.Translate(Vector3.forward * Time.deltaTime * speedTank); - Нефизическое движение работает но при столкновении с стеной проходит сквозь, получается оно мне не подходит.
_rb.AddForce(Vector3.forward * speedTank, ForceMode.Acceleration); - Работает только по мировым координатом, и когда у меня камера смотрит в другую сторону (к слову камера накинута на персонажа танк и следит за ним сверху) управление сбивается, при нажатии W танк едет вверх по мировым координатам без учёта поворота.
public Rigidbody _rb; // Плеер
void FixedUpdate()
{
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
_rb.AddForce(0, 0, speedTank);
}
}
Вопрос: Как сделать физическое движение не в мировых координатах а с учётом куда смотрит камера игрока.
Вопрос 2: Как ограничить ускорение объекта, ибо если зажать клавишу юнит будет ускоряться почти до бесконечности, а мне нужно небольшое ускорение. С массой и графитацией игрался, как то криво всё получается.
P.S. Данную статью изучил, не помогает так как движение в мировых координатах Правильная реализация передвижения персонажа
Ответы (1 шт):
Ну примерно так ты сможешь понять куда камера смотрит
Vector3 forward = Camera.TransformDirection(Vector3.forward);
forward.y = 0;
forward = forward.normalized;
Потом обрабатываешь нажатие клавиш и меняешь velocity
if(Input.GetKeyDown(KeyCode.W))
{
_rb.velocity = forward * speedTank;
}
if(Input.GetKeyUp(KeyCode.W))
{
_rb.velocity = new Vector3(0, 0, 0);
}
Чтобы назад идти делаешь -forward, а по бокам ты берешь _camera.right и -_camera.right, где | _camera > Transform |, чтобы через Camera.main не обращаться.
Не знаю на счет правильности, но работать должно