2016-12-02 2 views
0

Я начал работать в Unreal Engine 4 и открыл самый простой учебник с C++ на своем веб-сайте. Так что это код, который они предоставляютсяДвижение EquationDeltaHeight = (Sin (RunningTime + DeltaTime) - Sin (RunningTime));

void AFloatingActor::Tick(float DeltaTime) 
{ 
    Super::Tick(DeltaTime); 

    FVector NewLocation = GetActorLocation(); 
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime)); 
    NewLocation.Z += DeltaHeight * 20.0f;  //Scale our height by a factor of 20 
    RunningTime += DeltaTime; 
    SetActorLocation(NewLocation); 
} 

И это объяснение того, что он должен делать: Код, который мы только что написали заставит FloatingActors Бобу вверх и вниз плавно, используя переменную RunningTime, которую мы создали для следить за нашим движением с течением времени.

И когда вы его скомпилируете, он делает это, но он ничего мне не говорит о том, как и почему он работает. Дело в том, что ошибки меня в качестве названия говорят уравнение движения:

DeltaHeight = sin (RunningTime + DeltaTime) - грех (RunningTime)

Если кто-нибудь может объяснить мне это было бы весьма признателен. То, что я прошу, было бы математическим/физическим объяснением этого уравнения или объяснением, откуда оно взялось. Почему так.

ответ

0

Эта функция управляет движением (особой высотой) символа таким образом, чтобы величина движения контролировалась через sine wave с течением времени. То есть, в момент 0 он начинает двигаться вверх относительно быстро, затем замедляет движение вверх до тех пор, пока он не перестанет двигаться вверх, а затем начинает двигаться вниз, ускоряется вниз, в конечном счете замедляя движение и снова поднимаясь вверх. Он продолжает периодически перемещаться вверх и вниз таким образом.

Итак, как работают эти функции, это то, что он вызывается периодически, а затем изменение времени между этим вызовом и последним является DeltaTime. Последний раз он назывался RunningTime. Так вычислить новую позицию:

FMath::Sin(RunningTime + DeltaTime) 

и старую позицию:

FMath::Sin(RunningTime) 

затем вычислить изменение в положении, принимая разницу:

float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime)); 
+0

Я понимаю, что это вычисление что я не понимаю, почему мы используем конкретное уравнение? Например, что я могу сделать: Float DeltaHeight = (FMath :: Sqrt (RunningTime + DeltaTime) - FMath :: Sqrt (RunningTime)); Итак, почему мы используем это конкретное уравнение? Например, почему новая позиция FMath :: Sin (RunningTime + DeltaTime)? – Saizaku

+0

Да, это новая позиция, которую эта функция пытается определить, это изменение положения. Таким образом, он находится в исходном положении. – zdan