ゲームに「早送り」機能を実装するにはどうすればよいですか?


15

http://fieldrunners.com/や他のTD ゲームのように、タワーディフェンスゲームの早送り機能を実装するにはどうすればよいですか?

Unity 3Dを使用しています。1秒あたりのフレーム数を減らすか、手動で設定した敵の速い動きやタワーの発射速度などを管理するものがありますか?


更新頻度を上げようとしましたか?あなたがフレームをスキップする必要があるかもしれません...
concept3d

回答:


7

ゲームに独立した更新タイムラインへの分割を必要とする複雑な、または計算量の多いシミュレーションがない場合、Update()UnityのTime.time値に基づいて関数のコードを作成し、コードでTimeの値を設定する簡単なアプローチを使用できます.timeScaleを任意に設定します。0 ==一時停止、1 =通常、テスト担当者はtimeScale> 1を設定して、処理を高速化することを好みます。

http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html


18

アプローチ:より高いシミュレーション率

ユーザーインターフェイスのタイミングは、レンダリングと同様に、実際のゲームループから分離する必要があります。たとえば、世界が4倍の速度で実行されているとします。基本(1倍)速度で、ゲームは1秒あたり30の更新を実行するとしましょう。

早送りモードでは、次のようになります。

  • ワールドロジックは、UIおよびレンダラーの更新ごとに4つの更新を実行します。これは、毎秒120の更新を実行する必要があることを意味します。したがって、ワールドモデル(データ)はこのレートで更新されます。
  • レンダラーとUIロジックは両方とも、1秒あたり30回の更新でポーリングまたは何でもし続けます。

言い換えれば、ゲーム全体の速度は速くありません。シミュレーション部分があります。

これから2つのことを推測できます。

  1. ターゲットプラットフォームで4倍速く簡単に実行できるように、ゲームロジックを十分にシンプルに保つ必要があります。または、ゲームプレイのさまざまな側面をより迅速に推定するためのメソッドを導入する必要があります。より単純なペースのシミュレーションを単純に使用した場合とは異なります。したがって、トレードオフは、正確さのための処理コストになります。以下のアプローチ2を参照してください。

  2. モデル、ビュー、コントローラー(MVC)であるワールドシミュレーションを簡単に高速化できるのは、懸念事項の分離です。ワールドデータ(M)、レンダリングロジック(V)、およびゲームロジック(C)がすべて混同されている場合、少なくとも大規模な片頭痛がなければ、これを行うことはできません。

アプローチ:時間デルタに基づく外挿

前述のように、特定の時間内に移動した距離に基づいてモーションを計算する必要があります。これは、ゲームの物理がシミュレーションで本質的に現実的であると仮定していますが、そうではない場合があります。これはかなり大きなトピックであり、かなり複雑です。知りたいかどうかについてさらに質問する必要があります。基本的に、物事を正しくするために計算を行います。衝突の相互侵入や、ここでは取り上げない他の多くの問題に対処する必要があります。

結論する

これにより、一般的な概要がわかります。言語の選択はあなた次第です。おそらくUnityでそれを行う方法を知っているか、知らないかのどちらかです。どの言語でもタイミングを合わせるには、詳細を理解する必要があります。Gafferの記事から始めて、Unity APIのドキュメントを確認することをお勧めします。


あなたが使用しようとしている場合は、より高いシミュレーション率のアプローチをし、サポートしたい減速を、あなたはおそらく、実際に持っている必要があり、非常に遅いベースシミュレーション速度が、その後、100のシミュレーションステップ/フレームのように、デフォルトでいることを実行します。
ボボボボ

9

一般的な原則として、ゲームロジックの更新は、ゲームのグラフィックスの更新から切り離す必要があります。つまり、ゲームプレイ、AI、ユニットの動きなどのシミュレーションを、ゲームのレンダリング速度に結び付けてはなりません。 。通常、メインのゲームループは、最後のゲームの更新から経過したリアルタイム時間を計算し、そのデルタタイムステップを個々のゲームロジックオブジェクトの更新ルーチンに送信します。

このようなシナリオでは、ゲームにタイムスケーリング(早送りを含む)を実装するのが簡単になります。ゲームロジックのタイムステップに、「早送り」または「減速」する時間を制御するスカラー値を単に乗算します。デフォルトでは、この値は1になります。たとえば、ユーザーが「早送り」キーを押すと、1.5に設定され、すべてのシミュレーションが50%速くなるように見えます。ただし、同じレートでレンダリングします。

私はUnityにあまり詳しくないので、以下の提案では間違っているかもしれませんが、Unityにはこれを実装するのに役立つかもしれない時間管理コンポーネントがあります。実際、すでにタイムスケールプロパティがあります。コンポーネントの説明は、クラスが物理オブジェクト用に設計されたことを暗示していますが、シナリオにも適用できる場合があります。


1
それは間違いなく彼のシーンに当てはまります。彼がする必要があるのは、Time.timeScaleを乗数に設定するだけで、すべてが高速になります。それは全面的な変更ですので、メニューの相互作用などのようなものがある場合、それらも高速になります。
テトラッド

thnx再びTetrad :)
Syed
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.