2016-12-02 9 views
0

私はUnreal Engine 4で作業を始め、Webサイトで最も基本的なC++のチュートリアルを開きました。だから、これは彼らがMovement EquationDeltaHeight =(Sin(実行時間+ DeltaTime) - Sin(実行時間));

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); 
} 

を提供するコードであり、これはそれが何をすべきかの説明です:私たちはちょうど書いた コードは、私たちが作成したRunningTime変数を使用して、スムーズに上下ボブにFloatingActorsの原因となります時間の経過とともに私たちの動きを追いかける

それをコンパイルすると、それは実行されますが、どのように動作するのか、なぜそれが動作するのかはわかりません。罪(RunningTime)

誰も私にこれを説明することができれば、それは非常に高く評価されるだろう -

DeltaHeight =罪(RunningTime + DeltaTime):私はタイトルの通りですバグ事は運動方程式を言います。私が求めているのは、この方程式の背後にある数学的/物理的な解説、またはこの方程式がどこから来たのかという説明です。それはなぜそれのようなものですか?

答えて

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