そのため、Unity は android で多くのリズム ゲームを実行しません。私はその理由を突き止め、課題として 1 つをプログラムすることにしました (基本はとにかく)。私の最も重要なハードルはユーザー入力です。入力はユニティのフレームレートに基づいていることがわかっているため、音楽ゲーム(私は推測)はボタンを押してからアクションまでの遅延をできるだけ小さくすることを好みます。
音楽を見ると、約 15 ~ 20 ミリ秒の遅延で、人間の耳には何かが「ずれている」と聞こえます。
Android Unity ゲームは 30 FPS で実行されると聞きました (60 FPS ではバッテリーが消耗するため)。おそらく気付かない 15 ミリ秒で計算すると、18 ミリ秒で災害が発生する可能性があります。常にこの 30FPS に到達すると仮定します。
ユーザーから入力を受け取ると、まったく同じフレームでその入力のサウンドを再生できます。ただし、18ms ずれている可能性があります。
Update() の代わりに OnGui() を使用して、マウスとキーボードから直接コントロールを取得し、その場でキーボードまたはマウスのクリックのイベントを取得する方法があります。問題は、Android ではおそらくこれが機能しないことです (これはゲームパッドでも機能しません)。特に OnGui() メソッドからサウンドを再生しようとすると、メソッドがまったく奇妙に聞こえます。
私の質問: あなたは何をしますか、なぜですか? 可能性のある 18 ミリ秒のオフをそのまま受け入れて、30 FPS に達したと仮定するか、更新が来るのを待つのではなく、直接入力を取得する信頼できる方法を探す必要がありますか?
あなたが私に与えることができる洞察に感謝します.私はこれに関する有用な記事をまだ見つけていません. -スマイリー
編集 Unity内のメトロノームでスペースバーをタップして、エディターで100FPS(フレームあたり10msである必要があります)で実行して、メトロノームを使用していくつかの基本的なテストを行いました。私が得た結果はひどいものでした。すばやくタップする: メトロノームのティックに 20 ミリ秒ほど近づいていますが、それ以上のものはありません。ビートをタップする: 目標ティックから少なくとも 200 ミリ秒ずれました。このリズムと混同していない限り、これは間違っています。
現在、Debug.Log を使用してテスト データをログに記録しています。これが原因である可能性があるかどうか(長い遅延が発生しますか?デバッグが最適化されていないことはわかっています)、それともタイミングが実際にそれほど悪いのでしょうか?
前もって感謝します、-スマイリー