1. ホーム
  2. design-patterns

[解決済み] ゲームにおけるリプレイの概念的な仕組みについて教えてください。

2022-05-04 16:47:05

質問

リプレイがゲームにどのように実装されるのか、ちょっと気になりました。

当初は、ゲーム内で行われたすべてのプレイヤー/aiのアクションをコマンドリストとして記録し、ゲームを「再プレイ」してエンジンに通常通りレンダリングさせるだけだと考えていました。しかし、FPS/RTSゲームのリプレイを見てみると、パーティクルやグラフィック/オーディオのグリッチといったものまで、注意深く調べると一貫性があります(そして、それらのグリッチは一般的に が一貫している)。

では、どのように実現しているのでしょうか。カメラアングルが固定されたゲームでは、シーン全体のすべてのフレームをストリームに書き込んで保存し、そのストリームを再生するだけかもしれませんが、一時停止したりカメラを動かしたりできるゲームではそれでは不十分なようです。シーン内のすべてのものの位置を、すべての時点で保存しなければならないのです(違うか)。パーティクルのようなものでは、大量のデータをプッシュすることになり、プレイ中のゲームのパフォーマンスに大きな影響を与えるように思われます。

どのように解決するのか?

最初のお考えは正しかったと思います。 リプレイを作成するには、ユーザーから受け取ったすべての入力(それを受け取ったフレーム番号も含む)と、任意の乱数ジェネレータの初期シードを保存します。 ゲームをリプレイするには、保存したシードを使用してPRNGをリセットし、ゲームエンジンに(フレーム番号に同期した)同じ入力シーケンスを送ります。 多くのゲームでは、フレーム間の経過時間に基づいてゲームの状態が更新されるため、各フレームの長さも保存する必要がある場合があります。