久々に開発系の話題として、ネットワーク処理に関する内容
- 2010/12/02 21:35
- カテゴリー:開発日誌
以前に書いた記事なので文章も余り覚えていませんが、
考察による間違い等があればご指摘ください。
それと興味のない方は、今回の記事はスルー推奨。
とりあえず今回の考察用記事へのURL。
「 ゲーム開発者向けカンファレンス : ネットワークゲームの仕組みとゲームデザイン 」
http://game.watch.impress.co.jp/docs/news/20100901_391007.html
※ 記事は、(株)セガ のオンラインゲーム開発の講演のレポート( Gamewatcht参照 )。
■ 前置き
少し前置きとして、自分の「 ドキドキ玉子王国 OnLine Battle 」は、
ネットワークの処理に関しては、自分で最適な処理を考えつつ試行錯誤を何度も行い、
実際に実装したので、あくまで自分の場合は独自の実装なので結構違う部分もありますが、
今回のような実際の企業の方の実装方法等の記事内容は興味があり、
非常にありがたく読ませていただきました。
※ ちなみに自分は、職業がプログラマーではなく、独学における知識で、
自分のネットワーク処理に関する内容は、2010年3月12日のブログ記事に少し記載。
■ 本題
それでは話を元に戻し、拝見させていただいた記事の内容は、
実際のゲーム内でのネットワーク処理の実装における話のようです。
主に「 バーチャファイター ( 2人用 ) 」 と 「 ファンタシースターオンライン( 複数人数 ) 」
の実装内容で記載されています。
UDPとTCP等の違い等は置いておいて、ゲームの実装内容を手短にまとめると、
■ バーチャファイター
・プレイ人数 : 2人。
・キー入力同期方式で、確実な同期。
※ データが届かない場合、確実な同期をさせる為、ゲーム処理の一時停止、
データが届いた時点で過去のフレームデータを用いてリカバリし処理を進める。
・アクション性が高く、キー入力データをUDPを用いて、1秒間に60回データ送信
(1/60フレーム)。それと、参照記事の図を見る限りでは、遅延は3フレームとの事。
でも海外とか距離のある場合は余裕でそれ以上の遅延があるとは思いますが。
※ 送信データは、移動・攻撃等をキー入力データ(bitのフラグ)として1byteに圧縮。
※ UDPの特性上、データ転送速度重視でデータが届かず失われる場合もあるので、
1回のデータ送信で、過去10フレーム分のデータを含めて送信。
それとUDPが一度も届かない場合も考慮して、1秒間に一度、確実なデータ送信で
過去60フレーム分のデータを含め送信。
■ ファンタシースターオンライン or ファンタシースターユニバース
・プレイ人数 : 複数人( 1~4人 )
・クライアント分散処理型で、確実な同期ではなく、重要な部分のみ( 結果等 )を同期。
・複数人数を考慮し、データ送信頻度を下げてデータ転送。
※ 重要となる位置データの同期は、方向ボタンを押した時点で6フレーム分先の
位置データをまず確定し、定期的( 1秒間に6回 )に転送するが、確定した位置
データとは別に違和感を無くす為の処置として、同期はとらない部分でも
自分は操作して移動可能。
これは操作してる側には快適さを与えるが、周りから実際に見ると、
次の確定位置まで線形補完移動する時に、本来いるべきではない位置から
6フレーム分の移動位置となるので、距離的な問題で若干ワープしたように見える。
※ 雑魚敵キャラは位置同期等は基本行わず、ダメージを与えた時や存在有無等の
結果データのみ同期。
ボスキャラは、攻撃の行動を10~30秒感覚に落としてデータ送信頻度抑制し、
その時点での位置やAI処理番号( 各クライアント側でAI駆動する為 )?等の
データ送信?。
まぁこんな感じで記事を考察しつつ纏めては見ましたが、若干分かりやすく
文章内容を噛み砕けたのでしょうか?(ーー;)。
と疑問に思いつつ、これくらいに。
後、ネットワークでの確実な同期とキー入力レスポンスは
どちらかを犠牲にしてトレードオフを行わないといけないので、
色々悩ましいところではあるけれど、自分は確実な同期での実装が好みです。
キーレスポンスで若干ラグを感じる時にストレスを感じる場合もあるけれど、
そのラグをいかにラグを感じないように隠せるか工夫するのが楽しいので。
※ 自分の製作した 「 ドキドキ玉子王国 OnLine Battle( オンライン対戦2~4人 ) 」
の推奨となるNetwork Type ( A or C )は、実際に確実な同期。
Type B は確実な同期はとらないのですが、設計ミスで遊ぶことすら駄目な欠陥。
今更ですが、「 ドキドキ玉子王国OnLine Battle 」は、
下記の自分のHP ( ケンジのありきたりなHP ) のコンテンツページにあります。
http://kenji-arikitari.main.jp/
※オンライン用のサーバは用意していませんので、遊ぶ為には、
Windows Live Messanger等で、知り合いを誘ってお遊びください。
詳細は、同梱しているヘルプファイルを参照して下さい。
※ オンライン対戦は、2~4人までです。
※ アップデートファイルは必ず適応させてください。
※ 遊ぶ時、遊ぶ方全てのバージョンチェックをホスト側でチェックしているので
全ての人が同じバージョンでお遊びください。
バージョンが違う方がいる場合、ゲームがいきなり終了します。
それを確認するには、ホストとして起動される方のドキドキ玉子王国の
ネットワークログフォルダ内のテキストを参照し、全てのプレイヤーの
バージョンを確認して下さい。