Добрый день!
Прошу помощи в реализации движения двумерного объекта с инерцией (в космосе)
Реализация предполагает НЕ использовать встроенную физику Unity
Есть 2д объект, космический корабль:
[SerializeField] private float SpeedMove = 2f;
[SerializeField] private float SpeedRotate = 2f;
[SerializeField] private float Speedinertion = 1f;
[SerializeField] private float Retriatinertion = -0.2f;
Корабль может поворачиваться и двигаться только вперед (куда смотрит)
float rotation = this.transform.localEulerAngles.z;
rotation -= Input.GetAxis("Horizontal") * SpeedRotate;
Корабль может ускоряться до определенного ограничения, и если он не разгоняется, то накопленное ускорение постепенно падает (тормозится)
float tempMove = Mathf.Clamp(player.getMove() + (Input.GetAxis("Vertical") > 0 ? Input.GetAxis("Vertical") : Retriatinertion) * Speedinertion * Time.fixedDeltaTime, 0, 1);
player.setMove(tempMove);
player.setDirection(this.transform.up);
А вот как рассчитать накапливаемую инерцию никак не соображу. Я предполагаю, что результирующее перемещение должно складываться из двух векторов
вектора движения от ускорения :
Vector3 moveVector = player.getDirection() * SpeedMove * player.getMove() * Time.fixedDeltaTime;
и вектора движения от инерции ( который должен влиять на движение в случае смены направления или остановки ускорения) :
Vector3 inertionVector = player.getInertionDirection() * SpeedMove * player.getInertion() * Time.fixedDeltaTime;
т е результирующее перемещение должно выглядеть как то так:
this.transform.Translate(moveVector + inertionVector, Space.World);
Но как рассчитать корректные getInertionDirection (вектор направления инерции) и getInertion (величина инерции)?
Пока все что пробовал не приводит к желаемому результату.
Кажется, что это должно решаться не самыми сложными формулами векторной математики, но никак не найду нужные.
Спасибо за ответы!