Twitter @HigenekoTwitter #XNA
「さて」とセイウチはいった「ネットワークの話をしましょう」
(訳注:元ネタはルイス・キャロルのセイウチと大工から)
ネットワークゲームプログラマーには以下の三つの不死の敵がいます
以上の三つについて順に話しましょう。
レイテンシは物理的理由によって決まります。SFの世界では何十年もの昔に実現しているのに、物理学者は未だに光速を超える手段を発見していません。ですから、秒速30万キロ/秒を超える速度でデータを送ることができません。これは物理学者のせいです(そんなに難しいことなのか?)
十分に速いだろって?
僕はシアトルに住んでいて、同僚のイーライ(Eli)はニューヨークに住んでいた。その距離はおよそ4,000Km、光の速度で13ミリ秒掛かる。
僕は以前イギリスに住んでいたけど、イギリスからシアトルまでは7,800Km、光の速度で26ミリ秒掛かることになる。
60フレーム/秒のゲームの場合、各フレームは16ミリ秒毎に更新されるので、僕がイギリスの友達と遊んでる場合は2フレーム近い差(ラグ)が生じてしまう。
ちょっと待ってくれ、話はそれだけではないんだ
最悪ケースは?
どうやったら、家で再現できるの?
NetworkSession.SimulateLatency = TimeSpan.FromMilliseconds(200)
どうすればいいの?
ここまでがShawn Hargreaves氏の投稿の翻訳です。
ちなみに日本国内の場合は距離的問題は少ないと思います。例えば東京~札幌間の距離は850Kmで3ミリ秒となりますが、記事の中の通り、問題になるのはルーター間でレイテンシが大きな問題となるでしょう。
予測アルゴリズムですが、以下のサンプルが参考になると思います。
http://creators.xna.com/Headlines/developmentaspx/archive/2007/01/01/Network-Prediction-Sample.aspx
追記:
ゲーム中に表示されるPing値と、この記事で言及しているレイテンシとは違うものです。
行きと帰りが同じ速度と仮定すると0.2秒というレイテンシは0.4秒のPing値に相当することに注意してください。
PingBack from http://msdn.blogsforu.com/msdn/?p=4594
知りたかったことが分かりました!ありがとうございました!