• ベストアンサー

通信対戦ゲームでの通信遅延について

例えば60FPSで動作する格闘ゲームでは、1/60秒に一度キー入力を受け付けて 画面を更新しますよね? これが通信対戦となると、1/60秒に一度自分のキー入力を相手に送信して 相手のキー入力を受信して画面更新しないと、正しく動かないと思うのです。 しかし、実際には1/60秒以内に相手からパケットをもらえる環境など 想定してたらまともに動かないとも思います。 何かごまかし方があるんじゃないかと思うんですが、そういったアルゴリズムについて キーワードでもいいので何か教えて頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

CEDEC2010で、セガの人がまさにその質問のパターンの通信対戦型格闘ゲームについて講演をしていました。 ここで解説されているのは、最初から、プレイヤーの入力が画面に反映されるまで(ネットワーク遅延分だけ)わざと遅延させる手法です。ごまかしというよりも、遅延の影響を最小限に抑えつつ公平なゲーム内容にするには、こういう形にならざるを得ないということでしょう。 2~3フレームというと 30~50msecですが、日本国内の状態の良い回線同士ならば、なんとかこの範囲に収まるのではないかと思います。海外だときついでしょう。

参考URL:
http://www.4gamer.net/games/105/G010549/20100905002/
jjk65536
質問者

お礼

参考URLが本当に参考になりました! UDPで送りつつ、パケットロス対策で過去のフレーム分も載せちゃうなんて 考えてもみませんでした。 基本的にはキー入力をストリーミング情報として扱う感じで、 でも音声ストリーミングのように大容量のバッファリングをさせず 数フレーム分のバッファリングで捌いてくのですね。 自分なりに理解できたと思います。 ありがとうございます。

その他の回答 (2)

  • monova
  • ベストアンサー率68% (68/100)
回答No.3

私の知識内で簡単に回答します。 >例えば60FPSで動作する格闘ゲームでは、1/60秒に一度キー入力を受け付けて >画面を更新しますよね? キー入力と言っても、1/60秒間だけキーを押している訳ではないですよね。 一般的には0.1秒感覚でON/OFF出来れば速いほうだと思います。 そもそも、1/60秒だとチャタリングと区別がつかない場合もあります。 したがって、「 キーのON/OFFは最低でも0.1秒間キーをONにしておかなければ有効としない 」 と、すれば良いのではないでしょうか? また、1/60秒毎にコマンド入力判定を行っているとは限りません。 60FPSというのは、描画速度での話です。 > しかし、実際には1/60秒以内に相手からパケットをもらえる環境など 1/60秒単位でのやり取りはそれ程厳しい環境ではないですよ。 P2Pなら尚更です。 とはいえ、常にベストな状態が維持できるとは限らないので現状では100ms ぐらいを想定して設計される事が多いのではないでしょうか? >もちろん入力がないフレームは送受信要らないと思いますが、例えば 普通は、入力がなくても「入力が無い」というデータを送受信をしています。 でないと、同期が取れなくなります。 >xフレーム目にユーザ1がガードを行い、x+1フレーム目にユーザ2がパンチを入力した際、 >xフレーム目のガード入力がx+1フレーム目の処理までにユーザ2に到達する必要がありますよね? この理屈だと、1/60秒でパンチがヒットする事になりませんか? 通常、コマンド入力からヒットまで速くて0.2~0.5秒ぐらいではないでしょうか? それで無ければ、モーションを見てガードやカウンターが不可能ですよね。 例えば、 人間の反応速度を考えると、コマンド入力完了から0.1秒後に技が発動しても 遅れているとは感じにくい(個人差はあるにしろ) 人間のキー入力時間は速くても0.1秒 ヒットの判定までに、最速でも0.2秒 コマンド入力は2フレーム毎に見る。 と、した条件を盛り込むとします。 それならば、100ms単位で同期をとって処理を行えば、それ程問題なくゲームが進行していきます。 (フレーム単位での同期が行いたいなら6フレーム程度での同期を行う) これでも、タイミングにより若干の問題が(ガードが間に合うはずなのにヒットした等) 発生するのですが、0.1sec単位では人間に知覚されづらいので余り問題にならないのです。 と、ここまで書いている間に、No.2さんが リンク付きで回答がありましたね。 このリンク先の説明で概ね解決するのでは無いかと思います。

jjk65536
質問者

お礼

回答ありがとうございます。 > この理屈だと、1/60秒でパンチがヒットする事になりませんか? スーファミのストIIとかだと、弱パンチの繰り出しモーションとかなくて いきなりあたり判定だったような記憶があったので。 そのようなケースを想定したのですが、記憶違いかもしれませんね。 6フレーム(=100msec)程度であれば問題にならないということですね。 たしかに100msec程度の遅延は僕には気付けない世界だと思います。 一つ疑問が解決しました。 ありがとうございます。

  • nak777r
  • ベストアンサー率36% (49/136)
回答No.1

>これが通信対戦となると、1/60秒に一度自分のキー入力を相手に送信して 相手のキー入力を受信して画面更新しないと、正しく動かないと思うのです。 そうでしょうか? どういう動きを開始したか(技の開始、歩き始めた、ガード始めた等) ガードした 食らった 後は、定期的に、自分の座標と自分の体力ゲージの値を送り 相手の座標と相手の体力ゲージの値をもらう 両方の座標がわかっていれば空振りなのもわかるし 1/60秒毎に送信するタイミングはあるでしょうが 基本動作の開始時さえ分かればよいので、 1/60秒毎常にデータを送っている訳では無いと思いますよ

jjk65536
質問者

お礼

No2さんの参考URLを見て、やっとnak777r様の言っていることが やっと理解できました。 理解力が足りなくって申し訳ないです。 > 1/60秒毎常にデータを送っている訳では無いと思いますよ これについては回答者様によって意見が異なるようですが、おそらく どちらでも実装可能そうですね。 信頼性を取るか、パフォーマンスを取るかみたいな話になるのかな、と 思います。 色々勉強になりました。 ありがとうございます。

jjk65536
質問者

補足

回答ありがとうございます。 もちろん入力がないフレームは送受信要らないと思いますが、例えば xフレーム目にユーザ1がガードを行い、x+1フレーム目にユーザ2がパンチを入力した際、 xフレーム目のガード入力がx+1フレーム目の処理までにユーザ2に到達する必要がありますよね? そうでないとユーザ2側の画面ではパンチがヒットしてしまう。 ということは、ユーザ2側ではxフレーム目でのガードの有無を受信しないと x+1フレーム目の描画ができません。 そこで画面が止まってしまうのはマズイと思うのですが… (上記はユーザ1とユーザ2のキャラクタが密着しているものとします) 根本的に考え方が間違ってるはずなんですが、正解がなんなのかわからないのです。

関連するQ&A

  • DOJAで赤外線通信による2人対戦ゲームを作りたいのですが

    DOJA3.0をベースに、ドコモ携帯用iアプリゲームを作成中ですが、難問につまずきました。 DOJAには赤外線通信APIというものがあって、2台の携帯でデータやり取りが出来る・・・この機能を生かし、携帯電話2台を向かい合わせて二人で対戦するリアルタイムゲーム(スポーツや格闘モノなど。プレイ中相手方のキー入力状態を通信で絶え間なく監視するタイプのもの)を作ってみたいのです。しかし・・・ int op; ServerObexConnection c=null; c=(ServerObexConnection)Connector.open( //通信準備(サーバ側) "obex:/irserver",Connector.READ_WRITE,true); c.accept(); ・ ・ if (op==ObexConnection.DISCONNECT)c.close(); c.accept()(クライアント側はconnect)で赤外線ポートに通電したあとc.close()を実行するまでの間、ずっと「通信中」というダイアログが画面全体に現れ、描画キャンパスを覆ってしてしまいます。 セキュリティのため強制動作しているのでしょうが、これでは肝心のゲーム画面が全く見えません。 c.close()で通信を終えるとダイアログは消えゲーム画面が見えるようになります。しかし再接続すると、通信確認ダイアログが開きます。まさか1フレーム動作毎にダイアログを開いたり閉じたりというゲームを作るわけにはいかないでしょう。 対戦ボードゲーム(オセロや将棋など)の場合でも、一手打つたび毎回ダイアログを表示するソフトは実用にならないでしょう。 赤外線通信対戦ゲームのサンプルが載っている書籍のリストによると、ゲーム開始直後に通信でデータ交換をし、その後切断してプレイ終了まで再接続はしない、というものでした。 DOJAの通信は、もしかしてこれが限界なのでしょうか?ダイアログを非表示にする・うまくごまかす方法などはないのでしょうか。データ受け渡しスピードや精度は高かったので、ケータイは赤外線通信対戦リアルタイムゲームが作れる性能は充分と思うのですが・・ 赤外線通信といえば、ゲームボーイの通信対戦ケーブルが無線になったようなもの・・・と思っていたのですが、そのようなアプリを作るのは無理なのでしょうか? DOJA(または、携帯用iアプリ作成)の詳しいプログラミング情報交換ができる掲示板・携帯のデータ通信アプリ作成方法に詳しいWEBなどわずかな情報でもよいです。かなり悩んでおりますので、どうかよろしくお願いします。

  • The★Table Games のオセロで通信対戦中の嫌がらせ(?)について教えて下さい

    The★Table Games のオセロで通信対戦中に、明らかに意図的に時間制限を超えて打たれることがあります。 またそういう相手の場合、相手がパスをすると画面がフリーズして数秒~数十秒間操作ができなくなったりします。 類似(?)ケースとして、「わるいね」というフレーズとともに通信エラーにさせられることも多々あります。 大変不快です。 一体どうやっているのでしょうか? 時間や通信関係を操作することが可能なのでしょうか? アプリを供給しているサイト側ではこの件に近いものとして「相手が通信を切った場合に画面が固まる機種が存在する」という旨のケースが挙げられているのですが、特定の相手(やさしくしての人に多く見受けられる)から被害を受けているので、少し違う感じがします。 お分かりになる方ぜひよろしくお願いします。

  • ゲーセンで対戦を申し込まれたら?

    先日友達に美容室に付き合ってくれと言われ同行したのですが、パーマをかけることになり2時間ほどヒマができたので近くにあったゲーセンに一人で行きました。 私(女)はゲーム好きですがRPGとかの家でできるゲームしかできないんです。ゲーセンによくある格闘ゲームやレーシングゲームは苦手なので、仕方なく麻雀をすることにしました。 でもゲーセンにある麻雀って脱衣ものしかないでしょ?恥ずかしかったですが麻雀は大好きなのでプレイしていました。するといきなり画面が変わり「挑戦者が現れました。対戦をしますか?」となりました。私は初めてのことにビックリして断ったのですが、それから数分後にまた対戦を申し込まれました。断りましたけど。 脱衣麻雀という性質上、からかわれているのかな?と思いました。帰り際にチラっと対戦を申し込んできた人の顔を見たのですが、ごく普通のサラリーマンでした。私の考えすぎでしょうか? みなさんは、対戦を申し込まれたらどうしてますか? それと、何度も申し込まれて断ったら相手に失礼になるのでしょうか?麻雀はとてもおもしろかったのでまたゲーセンに行きたいのですが、ゲーセン内での「暗黙の了解」とか「ルール」があれば教えてください。

  • オンラインゲームの導入・維持費用について

    こんばんは。 現在主流になりつつあるオンラインゲームを自己所有することはできないのでしょうか。 また、できたとしたときの初期費用や毎月の電気、通信費はどの程度掛かるものでしょうか。 ご存知の方、いらっしゃいましたらお教え下さい。 ちなみに、私がこの質問にあたって想定しているゲームは、麻雀格闘倶楽部系やMJ系、三国志対戦、BBH系などです。 記録を残すためだけの通信ゲームではありません。 よろしくおねがいします。

  • PS3[ソウルキャリバー4]通信対戦中のラグの解消方法がわかりません

    お世話になります。 私は最近PS3のソウルキャリバー4にハマっていて、この前初めて通信対戦に繋げたのですが、対戦中のタイムラグがかなりの高確率(8割くらい)で私の方だけに起こり勝負にならず一方的に負けてしまい、かなり困っています。 検索で調べたら「Ping値が5だと大丈夫。4は微妙。3以下はラグりまくる。」と書いてあったのですが何の事だかさっぱりわからず結局解決する方法は見つからず教えてgooに質問させていただきました。 どれくらいのタイムラグかというとセッションの検索はふつうに出来るのですが、キャラクター選択画面に変わるとすでタイムラグが発生しており、対戦中も最後まで私がボタンを押してもキャラが一秒程度遅れて反応するので勝負になりません。ごく稀にいい時はキャラ選択画面から対戦最後まで安定して反応します。 最後に私の速度(環境)は ・ベイ・コミュニケーションズ ケーブルインターネット URL・http://baycom.jp/net/cable/ ・通信速度(下り) 最大10Mbps ベストエフォート型 ・通信速度(上り) 最大 1Mbps ベストエフォート型 ・有線接続 ・PS3の接続テストではNATタイプが1と出ました。 速度方はそれなりに安定しているようです。 ソウルキャリバー4は私の大好きなゲームでいろいろ方と対戦したいと思い購入しました。いったい何が原因でタイムラグが発生しているのかさっぱりわかりません。何が何でも解決させたい問題ですので、わかる方いたらどんな情報でも良いので教えて下さい。 よろしくお願いします。

  • Liveupdateのエラー

    Notion Antivirus2004の更新をするため、更新延長キーを購入後に、延長キーの入力をしようとしたのですが、Liveupdateをクリックすると LU1899 この製品またはコンポーネントを更新できませんでしたと出てしまいまい、入力の画面にいけません。延長キー購入後、14日以内に入力を済ませないと無効になってしまいますので、早急なお返事をお願いします。

  • 乃木坂オーディション※至急※

    乃木坂オーディションを受けます。 まずプロフィールを入力します。そこまでは出来ます。でも次にプロフィール確認画面に行く時、そこが出来て連絡先入力画面に行く時、この2つに行く時(当たり前ですが)サイトのフォーム(?)が更新されて次の画面に行きますよね。でも通信が悪くなっていけないんです💦もう何時間も格闘しています💦時間が本当にありません。助けてください💦💦🙇‍♀️🙏

  • 自作ネットワークゲームを作るには

    対人ネットワークゲームを作成しようと考えています といってもゲーム内容は七並べやばばぬき程度のもの(カードを作成し、それを手札に配り、画面上で移動させられればよい)です。 最大の問題と考えているのは誰か別の人とネットワーク接続すること、およびほぼ無料で作成、設置できること、そしてできればプライベートIPアドレス同士でも対戦できることです。 対戦は知り合い同士で行うことができればよいです。 また通信は完全にリアルタイムではなく、1秒間隔くらいで相手のデータを受け取れれば問題ないです。 このようなゲームを作成するにはどのような言語を選択しするのが妥当でしょうか。 プログラム経験はC言語を最初のところだけ(ifとかforとか配列など)学んだ程度です。 よろしくお願いします。

  • リアルタイムでゲーム相手を探す方法

    対戦型スマホゲームアプリを作ってます。 プレーヤーが、ゲームアプリの外で、一緒にプレイする相手を探せる方法を提供したいです。ゲーム内では探せない仕様です。プレーヤーは、ルーム名を知っているだけで、入室できます。ただし、ルームを作った人がそのアプリ画面を開いている状態でなくてはならないので、10秒以内くらいに相手を探す必要があります。いったん始まったら、途中入室できません。 SNSやウェブでそのような仕組みは作れませんか?ウェブにチャット画面をつければいいですかね? もしくはプレーヤーが、ツイッターで、そのアプリ名ハッシュタグをつけて、一緒にプレイする人募集~みたいな投稿をするとか?

  • 入力を急いでしなければならない。

    自作PC MBはギガバイトのGA-6OXT(-A) CPUはセレロン1.0G です。 XPのUPG盤をクリーン・インストールしようとしています。 BIOSが立ち上がり、CDを読み、青い画面になるのですが、 表示が切り替わり、何かキーを入力するときに、5秒(?)以内に入力しないとそのまま固まってしまいます。…98のディスクを5秒以内に交換して「Ent」キーを押せません。 BIOSの設定のときも、ブートの順番を変更するときに、すぐに→キーが使えなくて困りました。 何か良い解決策はありませんでしょうか?

専門家に質問してみよう