Я хочу проверить, какова скорость игроков по его текущему «форварду»
Прежде всего
Inertia += transform.TransformDirection(Vector3.forward) * Input.GetAxis("Thrust") ;
transform.Translate(Inertia * Time.deltaTime);
можно просто записать как
Inertia += transform.forward * Input.GetAxis("Thrust");
transform.position += Inertia * Time.deltaTime;
Тогда вы можете Project
общий вектор Inertia
на вектор transform.forward
Проецирование вектора на другой вектор.
Чтобы понять векторную проекцию, представьте, что onNormal
лежит на линии, указывающей в ее направлении. Где-то вдоль этой линии будет ближайшая точка к вершине вектора. Проекция просто onNormal
масштабируется таким образом, что достигает этой точки на линии.
, а затем принимает magnitude
Возвращает длину этого вектора (только чтение).
Длина вектора является квадратной root из (x*x+y*y+z*z
).
Затем вы можете умножить его на Dot
Для нормализованных векторов Dot возвращает 1, если они указывают точно в одном направлении, -1, если они указывают в совершенно противоположных направлениях и ноль, если векторы перпендикулярны.
var forwardSpeed = Vector3.Project(Inertia, transform.forward).magnitude * Vector3.Dot(Interia.normalized, transform.forward));