私は後で "再生"の動きを追跡するためにコマンドパターンを使用しています。私がこれをすると、アクションは正しく再生されますが、遅くなります。私はコルーチンとUpdate()
の両方を試しましたが、問題は解決しません。ユニティ|コマンドパターン再生タイミングの差
私が最初ICommand
年代のリストを保持している実行者PlayerControl
を持っています。
//Properties
private List<ICommand> oldCommands = new List<ICommand>();
private int updateIterationTracker = 0;
すべての呼び出されたコマンドについて、コマンドをリストに追加します。
//If Input moves up, invoke the move up command
if (dirVector.y > 0)
{
oldCommands.Add(dirUp); //Add the command to the list of commands
dirUp.Execute();
}
いくつかの時点で、「リプレイ」がトリガされ、私はoldCommands
のコマンドを反復。
この機能は機能します。移動入力が行うのと同じように、移動するコマンドを起動すると実行されます。
private void IterateUpdateOnReplay(){
if(iteration < oldCommands.Count){
transform.position = replayStartPosition;
}
oldCommands[iteration].Execute();
iteration++;
}
私はこれをコルーチンでも行っています。
再生は正しい順序で動きを実行し、動きが発生する可能性がありますが、シーケンス全体の実行に要する時間は最初の記録時よりも長くなります。 再生時間が長くなります。
質問:
1)が正しいペースで再生するための非常に多くのコマンドを追加する最初のキャプチャ
oldCommands.Add(dirUp); //Add the command to the list of commands
です、実行時間によって減速?
2)この遅延を引き起こす別の問題が、私が気づいていないことはありますか?
ポジションを保存したいゲームオブジェクトに対してサンプリングを実行し、クラスにデータを保存する必要がありますか?毎秒30回ですか?どのように滑らかにしたいのかによって異なります。後でループして再生し、保存されたクラスの時間を遅らせることができます。 [ここ]から開始してください(http://stackoverflow.com/a/40732139/3785314)。 – Programmer
コマンドパターンのポイントに逆らっていませんか?クラスのすべてのデータを格納するのではなく、同じコマンドを同じ順序で呼び出して、再生を同じにする必要があります。 – Ryanthehouse