Я что-то здесь увидел пост с получением скорости, сохранив старый pos для UNITY, некоторый код:
void TestVelocity(Vector3& Pos, Vector3 &Result)
{
Vector3 PreviousPos;
if (GetTickCount() >= velupd)
{
velupd = GetTickCount() + 100//random timer for test;
Vector3 Diff = Pos - PreviousPos;
float Len = sqrtf(Diff .x * Diff .x + Diff .y * Diff .y + Diff .z * Diff .z);
if (Len >= 0.01)
{
Result = (Diff / Len);
}
}
PreviousPos = Pos.
}
Он рассчитывает неправильно. Данные доступны только для положения объекта (без скорости и т. Д.).
Чтобы получить более точный ответ, потребовалось бы больше деталей. Но я вижу в основном две проблемы. Вы не инициализируете PreviousPos объект, и мне кажется, что вы хотите, чтобы это продолжалось, верно?
Предполагая, что Vector3 класс имеет минус (—) перегрузка оператора, так что вы можете сделать эту операцию, вы можете сделать это.
void TestVelocity(Vector3& Pos, Vector3 &Result)
{
static Vector3 PreviousPos; //Initialize here the initial position to zero with your constructor
if (GetTickCount() >= velupd)
{
velupd = GetTickCount() + 100//random timer for test;
Vector3 Diff = Pos - PreviousPos;
float Len = sqrtf(Diff .x * Diff .x + Diff .y * Diff .y + Diff .z * Diff .z);
if (Len >= 0.01)
{
Result = (Diff / Len);
}
}
PreviousPos = Pos.
}
Другое решение состоит в том, чтобы принять предыдущую позицию в качестве аргумента, но, как я уже сказал, трудно сказать, если мы не знаем, какую реализацию вы хотите. Это предложения основанный на том, что кажется необходимым.
Других решений пока нет …