合計 昨日 今日

アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)
日記
- 12月 2017
Amazonに載った (0)
   2017年12月17日(日) 12:33
AmazonTVアプリ作って申請してみた (1)
   2017年12月16日(土) 21:35
【悲報】お小遣い瀕死 (7)
   2017年12月16日(土) 03:07
ボーナスで自社製品を買う (2)
   2017年12月10日(日) 20:17
玉藤製と自宅製 (9)
   2017年12月03日(日) 22:01

+ 11月 2017
+ 10月 2017
+ 9月 2017
+ 8月 2017
+ 7月 2017
+ 6月 2017
+ 5月 2017
+ 4月 2017
+ 3月 2017
+ 2月 2017
+ 1月 2017
+ 12月 2016
+ 11月 2016
+ 10月 2016
+ 9月 2016
+ 8月 2016
+ 7月 2016
+ 6月 2016
+ 5月 2016
+ 4月 2016
+ 3月 2016
+ 2月 2016
+ 1月 2016
+ 12月 2015
+ 11月 2015
+ 10月 2015
+ 9月 2015
+ 8月 2015
+ 7月 2015
+ 6月 2015
+ 5月 2015
+ 4月 2015
+ 3月 2015
+ 2月 2015
+ 1月 2015
+ 12月 2014
+ 11月 2014
+ 10月 2014
+ 9月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 2月 2014
+ 1月 2014
+ 12月 2013
+ 11月 2013
+ 10月 2013
+ 9月 2013
+ 8月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 4月 2013
+ 3月 2013
+ 2月 2013
+ 1月 2013
+ 12月 2012
+ 11月 2012
+ 10月 2012
+ 9月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 4月 2012
+ 3月 2012
+ 2月 2012
+ 1月 2012
+ 12月 2011
+ 11月 2011
+ 10月 2011
+ 9月 2011
+ 8月 2011
+ 7月 2011
+ 6月 2011
+ 5月 2011
+ 4月 2011
+ 3月 2011
+ 2月 2011
+ 1月 2011
+ 12月 2010
+ 11月 2010
+ 10月 2010
フォロー
カテゴリー
日常
1 記事

オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 16:52

オンラインゲームの仕組みってどうなってるんだろう?
それは長きに渡って疑問に思っていたことでした。

昔LAN内で遊べるオンラインゲームもどきを作ったことあるのですが、
完全に遅延が無く、通信に障害が起きず、誰も切断しないという前提であり、誰か何か問題が起きると破綻する仕組みでした。

そこで、まずは先人の知恵を知ろうと、二つの本を読みました。

画像 これと 画像 これ

まず後者の本を300ページほど読んだ所なのですが、とても面白い!
土曜日曜と、ジュンク堂に入り浸って閉店まで読んでました(早く買って家で読めと)

前者の本は絶版なので、amazonで、後者の本は買って帰りました。

詳しいことは是非本を直接読んで欲しいのですが、現在読んで得たことを少し以下にまとめてみます。

============================================================================

オンラインゲームの仕組みには大きく分けて3通りある。

① 同期式

全てのプレイヤーが完全同期しており、それぞれがキーの入力状態を送り合って、それぞれのPCでシミュレートする。
全ての情報が揃うまで次のフレームの計算を行わない。

長所:実装が楽
短所:誰かの回線が遅いと全ての足を引っ張る

② 非同期式

それぞれのPC上で動作しているゲームの状態が異なることを認め、
一部不整合が生じても妥協して、定期的に全てのゲームの状態を強制的に合わせる。

長所:特定の回線に足を引っ張られることが無い
短所:実装が大変。敵が瞬間移動したり、ダメージを与えたのに与えなかったことになるなど不整合が生じる

③ ブラウザ式

多少遅延があっても問題ない種類のゲーム(RPG)で、全ての処理をサーバーで処理する。
クライアントはサーバーをブラウザする形でゲームを進行する。
MMOで利用されている。

長所:大きく遅延があっても整合性を常にサーバーが保っているので問題が起きない。
短所:通信量を最小限にする、操作頻度が低いゲームシステムにする、大きな遅延に耐えられるゲームシステム/設計にする必要がある。

============================================================================

本を読む前に私が作ろうとしていたのは「同期式」でした。
これはオンラインゲームの仕組みとして適切ではないと思っていましたが、本を読んで少人数であればアリかな?と思い、
実現可能性を検討してみることにしました。

まず、同期式で最も問題になるのは、「遅延」でしょう。
全てのデータが集まるまで次の計算をしないので、誰か一人でも遅い回線の人がいたら、全員のFPSが落ちてしまいます。
(30FPSで動作するゲームであれば、33[ms]以内に全ての計算を終える必要があります)

以下pingを使った遅延の測定結果をまとめてみました。

東京 - 東京  7ms
大阪 - 東京  19ms
札幌 - 京都  44ms
東京 - 東京  68ms(無線使用時)
東京 - 米国  163ms


距離があると遅延が増えていくことが見て取れますが、国内(札幌-京都)で既に33msを超えてしまっています。
無線は対象外にするとしても近くに住んでる人同士じゃないと遊べないんじゃダメですね。

筆者曰く、採用の基準として

025ms以内 → 同期式
100ms以内 → 非同期式
300ms以内 → ブラウザ式

を提案しています。
どうも非同期式を採用しないといけ無さそうです。

しかし、非同期式は「辻褄合わせ」が非常に難しそう。
次回の日記ではその辺について書いてみようと思います。
最後に編集したユーザー Dixq (管理人) [ 2011年6月26日(日) 17:16 ], 累計 3 回

コメント数: 19 閲覧数: 36904
コメント

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 16:53

別にまわしものじゃないですが、この本とても面白いのでオススメ!興味ある人はGoto amazon
http://www.amazon.co.jp/gp/product/4774 ... 1VAT738QQN
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby へろりくしょん on 2011年6月26日(日) 16:56

えっと、よく分かりませんが。 要約すると、私をとことんダメ人間にしたいという事でしょうか。
アバター
へろりくしょん
 
記事: 92
登録日時: 2010年10月17日(日) 07:23
お住まい: 福岡
日記: 日記を見る (98)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 17:00

> へろりーな

名前が迷走してやいませんか(笑

それは興味あるってことですかい?
オンラインゲームの設計面白そうですね、それ用にサーバーも契約しちゃいましたし、突っ走りますよ♪
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby ISLe on 2011年6月26日(日) 17:11

同期式は一歩ずつ前へという考え方で
非同期式は何秒後かにはここにという考え方なんですけど、
海外のパソコンゲームはネットに繋がる前から非同期式の考え方で作られたものが多かったんですよね。
日本ではスプライトを搭載したハードウェアで作られたアーケードゲームが一世を風靡したために異なる文化を辿ることになったわけです。

(追記)
非同期式は、不整合は発生しない、という前提のシステムですよ。
不整合が発生しても救済しない、という言い方のほうが分かりやすい?
最後に編集したユーザー ISLe [ 2011年6月26日(日) 17:15 ], 累計 2 回
ISLe
 
記事: 2593
登録日時: 2010年10月16日(土) 22:47
日記: 日記を見る (19)

Re: オンラインゲームを作る (part.1)

パーマリンクby SAI on 2011年6月26日(日) 17:21

オンラインゲームとな!?
花映塚龍神録ですね、わかります。

>敵が瞬間移動したり、ダメージを与えたのに与えなかったことになるなど不整合が生じる
これってモンハンそのままだw
Alea jacta est !
アバター
SAI
 
記事: 115
登録日時: 2010年10月24日(日) 12:26
お住まい: はひほーひ
日記: 日記を見る (247)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 17:23

> ISLeさん

> 不整合が発生しても救済しない、という言い方のほうが分かりやすい?

はい、そのつもりで書きました。
ただ、不整合が生じるのは致し方ないという書き方でした。
著者曰くお互いに遅延が発生して不整合が起きることは仕方がないから、
不整合が生じた時にはお互いに損が少ない方向に強制的に修正するよう書かれていました。
遅延がこれだけ生じるからには不整合が生じてしまうことは致し方ないですね。

サーバー側が状態を全て管理しているとレスポンが悪くなってしまうでしょうし、「完全な解」はないんですかね。
オンラインゲームやってても敵が瞬間移動したり、いない敵が居たりすることもありますし・・。
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby へろりくしょん on 2011年6月26日(日) 17:24

学生時代に、ネトゲにハマってしまい廃人寸前まで行った事があるのです。 ネトゲは人を廃にするゲームです。

ネトゲの仕組みについてはよく分かりませんので、適当ですが。
遅延によりユーザ毎が保持するデータがバラバラになるリスクを受け入れた上で、それに関しては無責任を貫くというスタンスを取る事を前提にすれば実装は大分楽になるんじゃないですか。
それだったら、ゲームの状態を集中管理出来るブラウザ型の方が簡単に出来るんじゃないかなとか思ったり。

今回の名前は、「へろりおーね」と「へろりーな」が最終候補に残りましたが、脳内評議会の投票により、へろりーなに決定致しました。
今後とも変わらぬご愛顧をお願い申し上げます。
アバター
へろりくしょん
 
記事: 92
登録日時: 2010年10月17日(日) 07:23
お住まい: 福岡
日記: 日記を見る (98)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 17:25

> SAIさん
> 花映塚龍神録ですね、わかります。

ずっと前からボンバーマン(もどき)のオンライン対戦作りたかったんですよね~、まだ何を作るかは決まってないですが、
ボンバーマン(もどき)を作るなら、アクション性が必要になるので、設計が難しくなりそうです。
テラリア的なものなら、ある程度なんとかなるかも。

> これってモンハンそのままだw

あ~やっぱそうなんですね。
モンハンってアドホックですよね?アドホックでもそんな遅延あるのかぁ・・。
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 17:29

> へろりーな

何その私。
FF11を1万時間プレイした私にも完全に同じ事が言えます。。

> 遅延によりユーザ毎が保持するデータがバラバラになるリスクを受け入れた上で、それに関しては無責任を貫くというスタンスを取る事を前提にすれば実装は大分楽になるんじゃないですか。

強引かつ的確な(?)方法ですね。
アクションは辻褄合わせること無く端から実行してしまって、定期的に修正する方が良いのですかね。
ただその「辻褄合わせ」が非常に難しそう・・。
全てのデータを定期的に送信するとすごいデータ量になってしまいそう。
その辺はまだ勉強が必要そうです。

> 今後とも変わらぬご愛顧をお願い申し上げます。

次何になるか期待しておきますw
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby TororoShinku on 2011年6月26日(日) 17:29

モンハンフロンティアの通信は少し古いタイプで、
いまから新しくすることが難しいため、
そのままにしてあるみたいな事を聞いたことがあります。
ソースは俺です(笑
Thank you for reading this.
アバター
TororoShinku
 
記事: 67
登録日時: 2010年10月16日(土) 20:20
お住まい: 伊勢神宮のある美し国
日記: 日記を見る (59)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 17:35

> Tororoさん

聞いたことがある = ソースは俺 はちょっと違いやしませんか(笑
昔から自社で持っている仕組みを使いまわしているということですね。
ということは今現在考えられるもっと良い仕組みがあるということでしょうか。
う~んこの辺は現役のプログラマー、デザイナーじゃないと難しそうですね。
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby ISLe on 2011年6月26日(日) 18:58

対戦ボンバーマンは同期式じゃないと無理じゃないですかね。
対戦格闘ゲームとかは専用の高速回線でシステム組んでますよ。

モンハンとかハンターが直接他のハンターに影響を与えるようにはなってないですよね。
非同期式の場合、極端な話、オンラインで繋がっているクライアントが同時進行してなくても良いのですよ。
最終的に縦軸さえ合えば良いわけで、横軸が揃っている必要はないのです。
タイムパラドックスとかジレンマとかの話の好きなひとがシステム設計したら良いものができそうな気がします。
ISLe
 
記事: 2593
登録日時: 2010年10月16日(土) 22:47
日記: 日記を見る (19)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月26日(日) 19:11

> ISLeさん

ですよね~・・。
スト4ってオンライン対戦出来るじゃないですか、あれが出来てるんだから出来るだろうと思ってたんですが、
あれって対戦相手決める時に近い地域にいる人と合わせてるみたいですね。
遅延が影響するゲームを全国規模で実行するのは難しそうです;
同期式でも非同期式でも難しそうですね、ボンバーマンは。

無理やり同期式にするとして、遠くに住んでる人はごめんなさいするシステムだとすると私が真っ先にハミゴになりそうです・・(苦笑
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby ISLe on 2011年6月26日(日) 23:57

Dixq (管理人) さんが書きました:あれって対戦相手決める時に近い地域にいる人と合わせてるみたいですね。

何のゲームだったか忘れましたけど、ロビーで対戦相手探すときにケータイのアンテナみたいに回線品質が表示されるのがあった覚えがあります。
プロバイダの組み合わせとかでわりと遠くても遅延がない場合があるらしいです。
ISLe
 
記事: 2593
登録日時: 2010年10月16日(土) 22:47
日記: 日記を見る (19)

Re: オンラインゲームを作る (part.1)

パーマリンクby MoNoQLoREATOR on 2011年6月27日(月) 14:06

非同期型の場合、キャラクタの位置と押されているキーの情報、時間 を送受信すれば瞬間移動することはなくなりま・・・せんでした。まあ、少しはマシになると思います。
アバター
MoNoQLoREATOR
 
記事: 284
登録日時: 2011年2月11日(金) 22:30
お住まい: 名古屋
日記: 日記を見る (182)

Re: オンラインゲームを作る (part.1)

パーマリンクby aquashooting on 2011年6月27日(月) 18:05

オンラインゲームといえばHALOが思いつくけど
あれ作れたら最強ですね(笑)
アバター
aquashooting
 
記事: 67
登録日時: 2011年4月13日(水) 20:00
日記: 日記を見る (3)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月27日(月) 19:52

> ISLeさん

なるほど、今使ってるサーバーの遅延調べています。
結果見てまた考えてみようと思います。

> Monoさん

そうですね定期的にデータの同期は取らないといけないと思います。

> aquaさん

FPSゲームですか?
リアルタイム性が高いゲームはなかなか難しそうですね。
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

Re: オンラインゲームを作る (part.1)

パーマリンクby ISLe on 2011年6月27日(月) 22:36

Dixq (管理人) さんが書きました:なるほど、今使ってるサーバーの遅延調べています。
結果見てまた考えてみようと思います。

既存のオンラインゲームでロビーはマッチング機能で、対戦相手を選ぶとP2Pになるものがほとんどだと思います。
なのでロビーに表示される回線品質は、ユーザー同士が直接接続したときのものです。
サーバーが遅くても対戦は快適にできる可能性十分あります。
ISLe
 
記事: 2593
登録日時: 2010年10月16日(土) 22:47
日記: 日記を見る (19)

Re: オンラインゲームを作る (part.1)

パーマリンクby Dixq (管理人) on 2011年6月27日(月) 22:59

> ISLeさん

他の日記と被りますが、TCPで接続するのが一般的だと思っていたので、ポート解放の必要があることから、P2Pは想定していませんでした。
P2P形式になったとしても、リレーサーバーを使う予定でした。
ただリレーサーバーを使うと遅延が問題になりますね・・アクション性が高いゲームだとリレーサーバーは使えないかもしれません。
アバター
Dixq (管理人)
管理人
 
記事: 1559
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (573)

オンラインデータ

登録ユーザー: なし