Скорость между старой и новой позицией - PullRequest
0 голосов
/ 04 декабря 2018

Я что-то здесь видел пост с получением скорости, сохраняя старый 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.
}

Он рассчитывает неправильно.Данные доступны только для положения объекта (без скорости и т. Д.).

1 Ответ

0 голосов
/ 04 декабря 2018

Требуется больше деталей, чтобы дать вам более точный ответ.Но я вижу в основном две проблемы.Вы не инициализируете объект 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.
}

Другое решение состояло бы в том, чтобы взять предыдущую позицию в качестве аргумента, но, как я уже сказал, это сложносказать, если мы не знаем, какую реализацию вы хотите.Это предложения , основанные на том, что кажется необходимым.

...