Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

【GREE様社内勉強会】見せます!モノビットエンジンの裏の裏

GREE様社内勉強会セミナー資料です。

■講演内容
0,モノビットエンジンとは?
1,リアルタイム通信エンジンの紹介とアーキテクチャ解説
2,MOエンジンの紹介とアーキテクチャ解説
3,モノビットエンジンを使ったサーバ構成例

■対象
・リアルタイム通信を用いたゲーム制作に関わっている、もしくは、これから関わる予定のエンジニアの方
・リアルタイム通信技術に興味のあるエンジニアの方

  • Login to see the comments

【GREE様社内勉強会】見せます!モノビットエンジンの裏の裏

  1. 1. 見せます! モノビットエンジンの裏の裏 見せます! モノビットエンジンの裏の裏 本城 嘉太郎 安田 京人本城 嘉太郎 安田 京人 株式会社株式会社 2015/07/31 GREE様勉強会
  2. 2. ■モノビット社&講演者紹介■モノビット社&講演者紹介 2 ・株式会社モノビット 2005年年よりネットワークゲームの開発と運営を⾏行行っているゲーム制作会社です。 2013年年よりミドルウェア事業を開始。『モノビットエンジン』のブランドで リアルタイム通信エンジンやMOエンジンの販売を⾏行行っています。 ・講演者紹介 ・株式会社モノビット 2005年年よりネットワークゲームの開発と運営を⾏行行っているゲーム制作会社です。 2013年年よりミドルウェア事業を開始。『モノビットエンジン』のブランドで リアルタイム通信エンジンやMOエンジンの販売を⾏行行っています。 ・講演者紹介 <本城 嘉太郎郎> 神⼾戸出⾝身。モノビット社代表取締役。元ゲームプログラマ &ネットワークエンジニア。CEDECで4年年連続でネットワ ークゲームの運営企画やサーバ技術の講演を⾏行行っています 。そのうち2講演はトップクラスの評価を頂き、翌年年の CEDEC  AWARDの選考委員を務めました。 <本城 嘉太郎郎> 神⼾戸出⾝身。モノビット社代表取締役。元ゲームプログラマ &ネットワークエンジニア。CEDECで4年年連続でネットワ ークゲームの運営企画やサーバ技術の講演を⾏行行っています 。そのうち2講演はトップクラスの評価を頂き、翌年年の CEDEC  AWARDの選考委員を務めました。 <安⽥田 京⼈人(Kyoto Yasuda)> 株式会社モノビットミドルウェア事業部部⻑⾧長 ・IT系企業でSE兼PGとして2年年勤務。 ・6年年間⼤大⼿手デベロッパーでコンシューマーゲームプログラマーとしてアク ションゲームを中⼼心に様々なジャンルのゲーム開発に携わる。 ・オンラインゲームの知識識を⾝身に付けるため株式会社モノビットに⼊入社。 現在はモノビットエンジンの開発指揮とエヴァンジェリストとしても活動。 <安⽥田 京⼈人(Kyoto Yasuda)> 株式会社モノビットミドルウェア事業部部⻑⾧長 ・IT系企業でSE兼PGとして2年年勤務。 ・6年年間⼤大⼿手デベロッパーでコンシューマーゲームプログラマーとしてアク ションゲームを中⼼心に様々なジャンルのゲーム開発に携わる。 ・オンラインゲームの知識識を⾝身に付けるため株式会社モノビットに⼊入社。 現在はモノビットエンジンの開発指揮とエヴァンジェリストとしても活動。
  3. 3. ■もくじ 0,モノビットエンジンとは? 1,リアルタイム通信エンジンの紹介とアーキテクチャ解説 2,MOエンジンの紹介とアーキテクチャ解説 3,モノビットエンジンを使ったサーバ構成例 3
  4. 4. 0,モノビットエンジンとは?0,モノビットエンジンとは? 4
  5. 5. ■モノビットエンジンとは?■モノビットエンジンとは? モノビット社が提供するネットワークミドルウェア製品群です。 <モノビットエンジン製品リスト> 1.ネットワークゲームフレームワーク ⇒  いろいろなゲームのバックエンド システムで利利⽤用されているLAMPフレームワークです。 2 .リアルタイム通信エンジン ⇒  本格的オンラインゲームを作成できる 通信ミドルウェア。Unity版を無料料公開中。 3 .MOエンジン for  Unity   ⇒  MO、MOBA系ゲームに特化した いわゆる「MOゲームツクール」です。 モノビット社が提供するネットワークミドルウェア製品群です。 <モノビットエンジン製品リスト> 1.ネットワークゲームフレームワーク ⇒  いろいろなゲームのバックエンド システムで利利⽤用されているLAMPフレームワークです。 2 .リアルタイム通信エンジン ⇒  本格的オンラインゲームを作成できる 通信ミドルウェア。Unity版を無料料公開中。 3 .MOエンジン for  Unity   ⇒  MO、MOBA系ゲームに特化した いわゆる「MOゲームツクール」です。 5
  6. 6. 6 ■ネットワークゲームフレームワークについて■ネットワークゲームフレームワークについて
  7. 7. 7 ■ネットワークゲームフレームワークについて■ネットワークゲームフレームワークについて
  8. 8. ■最近リリース■最近リリース ・ランページ ランド ランカーズ(SQUARE  ENIX) ■ネットワークゲームフレームワークの採用実績■ネットワークゲームフレームワークの採用実績 8
  9. 9. 1,リアルタイム通信エンジンの紹介と アーキテクチャ解説 1,リアルタイム通信エンジンの紹介と アーキテクチャ解説 9
  10. 10. 10 ■リアルタイム通信エンジンについて■リアルタイム通信エンジンについて <モノビット・リアルタイム通信エンジン> モノビットリアルタイム通信エンジンとは、 本格的なオンラインゲーム制作を前提に設計・開発された ⾼高機能なリアルタイム通信ミドルウェアです。 シンプルなターン制のゲームから、 ⾼高速レスポンスが求められるマルチプレイのアクションゲーム ⼤大規模なサーバシステムが必要なMMORPGまで あらゆるジャンルのオンラインゲームを スムーズに開発することができます。 <モノビット・リアルタイム通信エンジン> モノビットリアルタイム通信エンジンとは、 本格的なオンラインゲーム制作を前提に設計・開発された ⾼高機能なリアルタイム通信ミドルウェアです。 シンプルなターン制のゲームから、 ⾼高速レスポンスが求められるマルチプレイのアクションゲーム ⼤大規模なサーバシステムが必要なMMORPGまで あらゆるジャンルのオンラインゲームを スムーズに開発することができます。
  11. 11. ■リアルタイム通信エンジンについて■リアルタイム通信エンジンについて 11
  12. 12. ツールにより⾃自動⽣生成された通信制御プログラム ■リアルタイム通信エンジン■リアルタイム通信エンジン 12 クライアントプログラム お客様が 開発する部分 リアルタイム通信エンジン が提供する部分 クライアントSDK Webサーバ連携モジュール データ同期システム Virtual Network機能 通信コード ⾃自動⽣生成ツール KVS連携モジュール 独⾃自プロトコル l 各プラットフォームごと のSDKにより、RPC通信 コードを⾃自動⽣生成 l ⾼高速PRC⾃自動⽣生成ツール により通信処理理を⾃自動⽣生 成 l 暗号化、および圧縮も⾃自 動的に実施 l C++、C#⾔言語によるゲ ームサーバコードの記述 が可能 l マッチングサーバを完全 に独⾃自カスタマイズ可能 l 安価なLinuxサーバで動作 l ほぼ全てのクラウドやオ ンプレミス環境にインス トール可能 l コンソールゲーム機から ゲームエンジンまで、豊 富なプラットフォームに 対応 l プロトコルは、TCP、 UDP、Reliable  UDPに対 応 l マッチングやバトルな ど、さまざまなサンプル プログラムをソースコー ドごと提供 l PHPやRubyなどWeb系 サーバとのデータ連係機 能搭載 l 過去のWeb系ゲームサー バ資産が利利⽤用可能 リアルタイム通信エンジン コアモジュール エリアサーバ バトルサーバ データサーバ チャットサーバ マッチングサーバ サーバロジック実装インターフェース CentOS系Linux系サーバで動作 ゲームサーバ構成例例
  13. 13. ■リアルタイム通信エンジンの採用実績■リアルタイム通信エンジンの採用実績 13 そのほか、 MMORPGやRTS、MOBAなどが現在開発中です! そのほか、 MMORPGやRTS、MOBAなどが現在開発中です!
  14. 14. ■システムの前提条件 •クラウドで運⽤用 • 仮想マシンなので⽐比較的性能が低い • 突然落落ちる、通信が途絶える • IPアドレスがころころ変わる •グローバルIPアドレスはできるだけ節約 •いつでもサーバを増やせるように ■システムの前提条件 •クラウドで運⽤用 • 仮想マシンなので⽐比較的性能が低い • 突然落落ちる、通信が途絶える • IPアドレスがころころ変わる •グローバルIPアドレスはできるだけ節約 •いつでもサーバを増やせるように ■リアルタイム通信エンジンの設計コンセプト■リアルタイム通信エンジンの設計コンセプト 14
  15. 15. バトル バトル バトル ・・・ リレー リレー リレー ・・・ GSv1 ・・・ GSv2 ・・・ GSv3 ・・・ GSv4 ・・・ DB DB ・・・ データ データ ・・・ データベースデータベース バックエンドバックエンド ゲームサーバゲームサーバ フロントエンドフロントエンド 1台ずつ固定IP アドレスを持つ ■実際のゲームサーバ構成■実際のゲームサーバ構成 15
  16. 16. ■「サーバは落落ちてもサービスは落落ちない」 •サーバが落落ちてもすぐに復復帰できるように •落落ちたサーバだけに影響を限定して、サービス全 体に波及しないように •クラウドなので「マシンは落落ちる」前提で ↓ サーバの処理理単位をプロセス内で分離離、 仮想プロセス的なIDを持たせるようにした ↓ 『VirtualNetwork機能』 ■「サーバは落落ちてもサービスは落落ちない」 •サーバが落落ちてもすぐに復復帰できるように •落落ちたサーバだけに影響を限定して、サービス全 体に波及しないように •クラウドなので「マシンは落落ちる」前提で ↓ サーバの処理理単位をプロセス内で分離離、 仮想プロセス的なIDを持たせるようにした ↓ 『VirtualNetwork機能』 ■可用性、安定性の向上■可用性、安定性の向上 16
  17. 17. バトル ・・・ バトル ・・・ リレー リレー リレー ・・・ GSv1 ・・・ GSv1 ・・・ GSv2 ・・・ GSv2 ・・・ DB DB ・・・ データ ・・・ データベース バックエンド ゲームサーバ フロントエンド データ ・・・ プロセス 仮想プロセス ■可用性、安定性の向上■可用性、安定性の向上 17
  18. 18. ■『VirtualNetwork機能』効果1 •IDで通信できる →物理理的なサーバの場所を気にしなくてよくなった •仮想プロセスはいつでも作ったり消したり出来る →特定の仮想プロセスに依存しなくなるので、 同じ種類のサーバの増減が容易易になった →どんなタイミングでもシステムに参加できるので 再起動が容易易になった →MOゲームの特性に合わせて 接続ユーザ数に応じた ルームを起動・終了了可能になった ■『VirtualNetwork機能』効果1 •IDで通信できる →物理理的なサーバの場所を気にしなくてよくなった •仮想プロセスはいつでも作ったり消したり出来る →特定の仮想プロセスに依存しなくなるので、 同じ種類のサーバの増減が容易易になった →どんなタイミングでもシステムに参加できるので 再起動が容易易になった →MOゲームの特性に合わせて 接続ユーザ数に応じた ルームを起動・終了了可能になった ■可用性、安定性の向上■可用性、安定性の向上 18
  19. 19. ■ 『VirtualNetwork機能』効果2 • システム全体が仮想プロセスの消失を前提にしている →落落ちたマシン、プロセスだけに影響を限定できる • クライアントはリレーを介してIDで通信している →ルーム移動やバトル前後で、接続し直さなくてもIDの 変更更だけで通信するサーバを切切り替えられる ■ 『VirtualNetwork機能』効果2 • システム全体が仮想プロセスの消失を前提にしている →落落ちたマシン、プロセスだけに影響を限定できる • クライアントはリレーを介してIDで通信している →ルーム移動やバトル前後で、接続し直さなくてもIDの 変更更だけで通信するサーバを切切り替えられる リレー GameSv GameSv ■可用性、安定性の向上■可用性、安定性の向上 19
  20. 20. ClientClientClientClient BattleBattle MySQLMySQL LoginLogin CommunicationCommunication AreaArea BattleBattle RelayRelay ClientClient BattleBattle Linuxのプロセス MySQLMySQL ClientClientDataDataDataData LoginLogin AreaArea CommunicationCommunication BattleBattle BattleBattle RelayRelay Battle 子プロセス Battle 子プロセス 同種のプロセスは全て複数起動 ・負荷の分散 ・プロセスが落ちても サービスを継続可 ・追加起動もできる バトルは 直接クライアントと接続 ■プロセス管理は?■プロセス管理は? 20
  21. 21. ロビー/ギルド ルーム ロビー/ギルド ルーム 『ProcessUnit』『ProcessUnit』 Areaサーバの例 Process Unit ユーザデータの管理理 他のエリアサーバ との調停 外部Webサーバとの やり取り ロビー/ギルド ルーム ・各PUはユニークなIDを持つ。 ・そのIDを宛先として、PU間で メッセージを送れる。 ・1PUを1スレッドとして並列列実⾏行行する。 (シングルスレッドモードでのビルド も可能) ・各PUはユニークなIDを持つ。 ・そのIDを宛先として、PU間で メッセージを送れる。 ・1PUを1スレッドとして並列列実⾏行行する。 (シングルスレッドモードでのビルド も可能) ・SQLのクエリ実⾏行行リクエスト ・外部Webサーバへのリクエスト ・SQLのクエリ実⾏行行リクエスト ・外部Webサーバへのリクエスト PUの他にスレッド⽣生成する物PUの他にスレッド⽣生成する物 PUを派生 ■プロセス管理は?■プロセス管理は? 21
  22. 22. ■クラウドであることの利利点 スケールアウト(増設)、スケールアップ(スペック増強) が容易易 ↓ Webサーバと同じように「増やせば良良い」と考える ↓ 仮想プロセス構成を活⽤用し、サーバ種別ごとに負荷に応じて 台数を増減 ■クラウドであることの利利点 スケールアウト(増設)、スケールアップ(スペック増強) が容易易 ↓ Webサーバと同じように「増やせば良良い」と考える ↓ 仮想プロセス構成を活⽤用し、サーバ種別ごとに負荷に応じて 台数を増減 ■負荷分散は?■負荷分散は? 22
  23. 23. • リレーサーバ • 多数のクライアントが接続してくる • 複数台のリレーサーバをクライアントに選択させる • ⾃自然分散に期待する • ゲームサーバ、バトルサーバ、データサーバ • 最も負荷の軽いサーバを選択(データ量量、ユーザ数少ないなど) • ラウンドロビン • ⾜足りなさそうだったらプロセスを増やす 仮想プロセス構成により負荷分散をリアルタイムサーバでも 実現。いくらでも増減できるので、コストバランスも最適化 できる。 • リレーサーバ • 多数のクライアントが接続してくる • 複数台のリレーサーバをクライアントに選択させる • ⾃自然分散に期待する • ゲームサーバ、バトルサーバ、データサーバ • 最も負荷の軽いサーバを選択(データ量量、ユーザ数少ないなど) • ラウンドロビン • ⾜足りなさそうだったらプロセスを増やす 仮想プロセス構成により負荷分散をリアルタイムサーバでも 実現。いくらでも増減できるので、コストバランスも最適化 できる。 ■負荷分散は?■負荷分散は? 23
  24. 24. 『データ同期システム』『データ同期システム』 簡単に⾔言えば、サーバ -‐‑‒ サーバ間や、サーバ -‐‑‒ クライアント間で ⾃自動的に構造体の同期を取ることができるシステム。 簡単に⾔言えば、サーバ -‐‑‒ サーバ間や、サーバ -‐‑‒ クライアント間で ⾃自動的に構造体の同期を取ることができるシステム。 DataData CommunicationCommunication AreaArea BattleBattle ・どこに誰のユーザデータがあるか の管理理が容易易 ・ユーザデータ移動の⼿手順を 簡略略化できる ・フロントエンドサーバが落落ちても DBへのデータ保存を保証する ・どこに誰のユーザデータがあるか の管理理が容易易 ・ユーザデータ移動の⼿手順を 簡略略化できる ・フロントエンドサーバが落落ちても DBへのデータ保存を保証する Master Slave ここで 書き換えたら… …マスターと 他のスレーヴで同期 利利点利利点 ■データ同期システムとは?■データ同期システムとは? 24
  25. 25. ■ユーザデータの保全 • ユーザデータはすべて「データサーバ」で保持 • DBへのユーザデータ保存・更更新もすべてデータサーバ • 他のゲームサーバは、データサーバのコピーを扱う ↓ データサーバが落落ちたらユーザデータを失う? →複雑なことをしないので落落ちたことがありません ■ユーザデータの保全 • ユーザデータはすべて「データサーバ」で保持 • DBへのユーザデータ保存・更更新もすべてデータサーバ • 他のゲームサーバは、データサーバのコピーを扱う ↓ データサーバが落落ちたらユーザデータを失う? →複雑なことをしないので落落ちたことがありません ■可用性、安定性の向上■可用性、安定性の向上 25
  26. 26. パケットの暗号化/圧縮/分割パケットの暗号化/圧縮/分割 ・攻撃やチート⾏行行為を防ぐ為には、暗号化が必要 ・圧縮と分割もやっている ・攻撃やチート⾏行行為を防ぐ為には、暗号化が必要 ・圧縮と分割もやっている パケット ⽣生成 分割 圧縮(lz4など) 暗号化 暗号化 通信 結合 解凍 復復号化 サーバ クライアント ※ クライアントからサーバへの通信も同様。 サーバ間は非暗号化、非圧縮も設定可能。 ※ クライアントからサーバへの通信も同様。 サーバ間は非暗号化、非圧縮も設定可能。 ゲームの 受信処理理 ■パケットの暗号化,  圧縮,  分割■パケットの暗号化,  圧縮,  分割 26
  27. 27. 27 2,MOエンジンの紹介 とアーキテクチャ 2,MOエンジンの紹介 とアーキテクチャ ■MOエンジンについて■MOエンジンについて
  28. 28. 28 ■MOエンジンについて■MOエンジンについて
  29. 29. ■MOエンジンについて■MOエンジンについて 29
  30. 30. ■モノビットMOエンジン構成図■モノビットMOエンジン構成図 UnityクライアントUnityクライアント MOエンジン本体(DLL)MOエンジン本体(DLL) スクリプトデータスクリプトデータ Unity描画機能Unity描画機能 リソースリソース モデル・モーション・サウンド・エフェクト リアルタイム通信エンジン(DLL)リアルタイム通信エンジン(DLL) バトルサーバ(Linux)バトルサーバ(Linux) MOエンジン本体(DLL)MOエンジン本体(DLL) スクリプトデータスクリプトデータ リアルタイム通信エンジン(DLL)リアルタイム通信エンジン(DLL) マッチングサーバマッチングサーバ (SQLite & C++) WebサーバWebサーバ ⾮非同期ゲーム制御 MOバトルシーンMOバトルシーン バトル以外の画⾯面バトル以外の画⾯面 画⾯面制御処理理画⾯面制御処理理 ・マイページ ・合成 ・ショップ ・etc… http⾮非同期通信http⾮非同期通信 独⾃自プロトコル独⾃自プロトコル マッチング処理理 (DLL) マッチング処理理 (DLL) 独⾃自プロトコル独⾃自プロトコル <全体構成図><全体構成図> 30
  31. 31. MOエンジン本体MOエンジン本体 スクリプトエンジン 当たり判定ルーチン 通信処理理 キャラクター制御 地形配置制御 スクリプトデータスクリプトデータ キャラクター制御関連 敵配置情報 アクション ゲーム進⾏行行制御 地形設定 モーション エフェクト モデル ステージ制御関連 ゲーム制御関連 背景モデル 背景アタリ アタリ設定 ※キャラクター制御はプレイヤーおよびエネミーで共通です。 勝敗判定 スコア制御 ステージエディタステージエディタ アニメーション コンバータ (FBX2ANM) 地形配置 キャラ配置 アタリ設定ゲーム進⾏行行制御 <開発環境について> ・クライアント側 Unity5 ・サーバ側 Monoもしくは、 .Net Framework(2.0or3.5)と、 ご提供するツール⼀一式 <開発環境について> ・クライアント側 Unity5 ・サーバ側 Monoもしくは、 .Net Framework(2.0or3.5)と、 ご提供するツール⼀一式 オブジェ配置情報AI サウンド イベント制御 静的オブジェクト制御 AI駆動エンジン シーン制御 キャラクターエディタ AIエディタ オブジェ配置 イベント配置 <スクリプトデータとエンジンの関係><スクリプトデータとエンジンの関係> <ツール類> ■モノビットMOエンジン機能概要■モノビットMOエンジン機能概要 31
  32. 32. ■モノビットMOエンジンとは?■モノビットMOエンジンとは? MOエンジンは、 専⽤用スクリプトで駆動するMOタイプのゲーム制作ツールです。 モノビット独⾃自開発のMO-‐‑‒Scriptを使⽤用。 「命令令」や「グラフィック」、「サウンド」を組み合わせることで ゲームの制作を可能とします。 MOエンジンサーバでは、MO-‐‑‒Scriptで プレイヤーや敵のアクション、イベント、ルールなどを設定することで ゲーム全体を制御・調停することができます。 MOエンジンは、 専⽤用スクリプトで駆動するMOタイプのゲーム制作ツールです。 モノビット独⾃自開発のMO-‐‑‒Scriptを使⽤用。 「命令令」や「グラフィック」、「サウンド」を組み合わせることで ゲームの制作を可能とします。 MOエンジンサーバでは、MO-‐‑‒Scriptで プレイヤーや敵のアクション、イベント、ルールなどを設定することで ゲーム全体を制御・調停することができます。 32
  33. 33. ■モノビットMOエンジンとは?■モノビットMOエンジンとは? MO-‐‑‒Scriptは、提供される各種GUIツールで作成・編集を⾏行行う事によっ て⽣生成されます。 また、プレイヤーキャラクタのレベル、ゲーム進⾏行行など動的に変更更され るデータはKVS(Key Value Store)を介してゲームに反映されます。 ツールの出⼒力力で実現できない処理理は、MO-‐‑‒Script⾃自体を編集することで 実現可能となります。 MO-‐‑‒Scriptは、提供される各種GUIツールで作成・編集を⾏行行う事によっ て⽣生成されます。 また、プレイヤーキャラクタのレベル、ゲーム進⾏行行など動的に変更更され るデータはKVS(Key Value Store)を介してゲームに反映されます。 ツールの出⼒力力で実現できない処理理は、MO-‐‑‒Script⾃自体を編集することで 実現可能となります。 33
  34. 34. ■MO-Scriptとは?■MO-Scriptとは? <MO-‐‑‒Scriptとは> MOエンジン⽤用に開発された、キャラクタ制御やAI、UIの制御 アウトゲームのフロー制御などに使⽤用できる軽量量スクリプト⾔言語です。 <特徴> ・アセンブラライクな記述のシンプルで軽い⾔言語 ・プラットフォームに依存しない ・プロジェクト毎に⾃自由にコマンド追加可能 ・コルーチンとしての動作が前提となっており、時系列列的な記述をそのまま縦に 書く事ができる ・グルーコード実装はLuaに⽐比べて僅かな⼿手間で済む ・バイナリコードはリソースとして扱えるため、プログラム実⾏行行中に修正して コンパイルしたバイナリコードのリロードが可能 ・定型部分のマクロ化やサブルーチン化、コマンド化により プランナ・デザイナでも容易易にスクリプトを組める環境の 構築が可能 <MO-‐‑‒Scriptとは> MOエンジン⽤用に開発された、キャラクタ制御やAI、UIの制御 アウトゲームのフロー制御などに使⽤用できる軽量量スクリプト⾔言語です。 <特徴> ・アセンブラライクな記述のシンプルで軽い⾔言語 ・プラットフォームに依存しない ・プロジェクト毎に⾃自由にコマンド追加可能 ・コルーチンとしての動作が前提となっており、時系列列的な記述をそのまま縦に 書く事ができる ・グルーコード実装はLuaに⽐比べて僅かな⼿手間で済む ・バイナリコードはリソースとして扱えるため、プログラム実⾏行行中に修正して コンパイルしたバイナリコードのリロードが可能 ・定型部分のマクロ化やサブルーチン化、コマンド化により プランナ・デザイナでも容易易にスクリプトを組める環境の 構築が可能 34
  35. 35. ■MOエンジンのツールについて■MOエンジンのツールについて MOエンジン同梱されているツール類MOエンジン同梱されているツール類 キャラクタエディタキャラクタエディタ AIエディタAIエディタ ステージエディタステージエディタ 各種マスタエディタ 各種マスタエディタ各種マスタエディタ 35
  36. 36. ■MOエンジンの準備(セットアップ)■MOエンジンの準備(セットアップ) プレイヤープレイヤー エネミーエネミー 背景背景 • アセット• アセット • アニメーターと アニメーターコントローラー • アニメーターと アニメーターコントローラー プレイヤープレイヤー エネミーエネミー スタンドアローンのゲームと同様にアセットとアニメーションの設定スタンドアローンのゲームと同様にアセットとアニメーションの設定 36
  37. 37. ■データ作成(1)■データ作成(1) キャラクタエディタでキャラクタの アニメーション制御スクリプトを作成 キャラクタエディタでキャラクタの アニメーション制御スクリプトを作成 AIエディタでエネミーの 思考ルーチンスクリプトを作成 AIエディタでエネミーの 思考ルーチンスクリプトを作成 37
  38. 38. ■データ作成(2)■データ作成(2) Unity上の背景をそのままゲームで使⽤用Unity上の背景をそのままゲームで使⽤用 ステージ⽤用プレハブデータとして保存ステージ⽤用プレハブデータとして保存 38
  39. 39. ■データ作成(3)■データ作成(3) サーバでステージのコリジョンデータも管理理サーバでステージのコリジョンデータも管理理 コリジョン⽤用オブジェクトコリジョン⽤用オブジェクト背景オブジェクト背景オブジェクト 経路路探索索⽤用プローブオブジェクト経路路探索索⽤用プローブオブジェクト 39
  40. 40. ■データ作成(4)■データ作成(4) ゲームオブジェクト出現位置の配置ゲームオブジェクト出現位置の配置 プレイヤー/エネミー/イベントオブジェクト/静的オブジェクトの 出現ポイントをマウスでマップ上に配置 プレイヤー/エネミー/イベントオブジェクト/静的オブジェクトの 出現ポイントをマウスでマップ上に配置 40
  41. 41. ■データ作成(4)■データ作成(4) ステージ関連データの保存ステージ関連データの保存 プレハブの保存プレハブの保存 プレイヤー出現情報等の保存プレイヤー出現情報等の保存 コリジョンデータの保存コリジョンデータの保存 41
  42. 42. ■データ作成(4)■データ作成(4) キャラクタなどの動的オブジェクト管理理もツールで設定可能キャラクタなどの動的オブジェクト管理理もツールで設定可能 動的オブジェクト管理理⽤用 マスタ作成エディタ 動的オブジェクト管理理⽤用 マスタ作成エディタ イベント管理理⽤用 マスタ作成エディタ イベント管理理⽤用 マスタ作成エディタ プレイヤーキャラクタ管理理⽤用 マスタ作成エディタ プレイヤーキャラクタ管理理⽤用 マスタ作成エディタ バレット(弾)管理理⽤用 マスタ作成エディタ バレット(弾)管理理⽤用 マスタ作成エディタ イベント管理理⽤用 マスタ作成エディタ イベント管理理⽤用 マスタ作成エディタ 42
  43. 43. ■作成したデータをサーバに反映■作成したデータをサーバに反映 サーバ処理理を⾼高速化! MO-‐‑‒Scriptをバイナリデータに変換 サーバ処理理を⾼高速化! MO-‐‑‒Scriptをバイナリデータに変換 サーバプログラムのあるディレクトリ配下にファイルを置くだけサーバプログラムのあるディレクトリ配下にファイルを置くだけ moe_̲for_̲unity └─server └─BattleServer └─bin └─Data ├─collision ←  コリジョンデータ ├─master ←  マスタデータ └─script ←  MO-‐‑‒Scriptデータ └─event 43
  44. 44. ■ゲーム稼働■ゲーム稼働 サーバ起動サーバ起動 ゲームスタートゲームスタート 44
  45. 45. ■MOエンジンのサーバについて■MOエンジンのサーバについて Redis ServerRedis Server Battle   Server Battle   Server Battle Information Server Battle Information Server クライアントクライアント WEB ServerWEB Server Matching Server Matching Server Battle   Server Battle   Server Battle   Server Battle   Server Battle   Server Battle   Server × n <MOエンジン概念念図><MOエンジン概念念図> 45
  46. 46. ■マッチングサーバ■マッチングサーバ MOエンジンのマッチングサーバは、 モノビットリアルタイム通信エンジンを⽤用いてC++で実装され ており 設定された条件でプレイヤーのマッチング処理理を⾏行行います。 例例えば、レベルでのマッチング等 さまざまな条件をSQLiteを⽤用いて記述する事が出来ます。 MOエンジンのマッチングサーバは、 モノビットリアルタイム通信エンジンを⽤用いてC++で実装され ており 設定された条件でプレイヤーのマッチング処理理を⾏行行います。 例例えば、レベルでのマッチング等 さまざまな条件をSQLiteを⽤用いて記述する事が出来ます。 46
  47. 47. Group BGroup BGroup AGroup A ■バトルインフォメーションサーバ■バトルインフォメーションサーバ バトルサーバの管理理を⾏行行うサーバです。 バトルサーバのリストを保持し、死活監視を⾏行行います。 その他、バトルサーバにユーザーデータの受け渡しも⾏行行います。 また、別パッケージとなっているリアルタイム通信エンジンとの ネットワーク共有をも実現させます。 バトルサーバの管理理を⾏行行うサーバです。 バトルサーバのリストを保持し、死活監視を⾏行行います。 その他、バトルサーバにユーザーデータの受け渡しも⾏行行います。 また、別パッケージとなっているリアルタイム通信エンジンとの ネットワーク共有をも実現させます。 Battle   Server Battle   Server Battle Information Server Battle Information Server Battle   Server Battle   Server × n Battle   Server Battle   Server Battle   Server Battle   Server Group A List Group B List 47
  48. 48. ■バトルサーバ■バトルサーバ バトルサーバはお客様のニーズに合わせ リアルタイムに増減することが可能です。 その際、サービスを⼀一旦停⽌止するなどの メンテナンス・インフォメーションが不不要となり サービスそのものに影響を与える事がありません。 バトルサーバはお客様のニーズに合わせ リアルタイムに増減することが可能です。 その際、サービスを⼀一旦停⽌止するなどの メンテナンス・インフォメーションが不不要となり サービスそのものに影響を与える事がありません。 Group BGroup B Group AGroup A Battle   Server Battle   Server Battle   Server Battle   Server … Battle   Server Battle   Server Battle   Server Battle   Server Group CGroup C Battle   Server Battle   Server Battle   Server Battle   Server Battle   Server Battle   Server Battle   Server Battle   Server … Battle   Server Battle   Server Battle   Server Battle   Server … Battle   Server Battle   Server Battle   Server Battle   Server 48
  49. 49. ■ MOエンジンとリアルタイム通信エンジン■ MOエンジンとリアルタイム通信エンジン MOエンジンとリアルタイム通信を組み合わせて、 いろいろなゲーム仕様を実装できます。 MOエンジンとリアルタイム通信を組み合わせて、 いろいろなゲーム仕様を実装できます。 リアルタイム通信エンジンリアルタイム通信エンジン MOエンジンMOエンジン 49
  50. 50. 3,モノビットエンジンを 用いたサーバ構成例 3,モノビットエンジンを 用いたサーバ構成例
  51. 51. ■何故C++か リアルタイム通信を⾏行行うゲームでは、サーバ側で多くの処理理を⾏行行う必要があるので、 サーバプログラムの実⾏行行速度度が⼤大変重要。そのため、 WEB⾔言語より数⼗十倍の実⾏行行効率率率を持つC++⾔言語でサーバー側の処理理を記述する事により、 素早い通信を実現し、なおかつサーバー台数を⼤大幅に削減可能。(C#でも記述可能) ■何故WEB系⾔言語とC++を両⽴立立させるのか リアルタイム通信が必要ない部分を実装が容易易なWEB⾔言語で実装し、 処理理負荷の⾼高いバトル部分をC++⾔言語で実装することにより、 ⽣生産性と実⾏行行効率率率の両⽅方いいとこ取りしたサーバー構成が実現可能。 ■何故C++か リアルタイム通信を⾏行行うゲームでは、サーバ側で多くの処理理を⾏行行う必要があるので、 サーバプログラムの実⾏行行速度度が⼤大変重要。そのため、 WEB⾔言語より数⼗十倍の実⾏行行効率率率を持つC++⾔言語でサーバー側の処理理を記述する事により、 素早い通信を実現し、なおかつサーバー台数を⼤大幅に削減可能。(C#でも記述可能) ■何故WEB系⾔言語とC++を両⽴立立させるのか リアルタイム通信が必要ない部分を実装が容易易なWEB⾔言語で実装し、 処理理負荷の⾼高いバトル部分をC++⾔言語で実装することにより、 ⽣生産性と実⾏行行効率率率の両⽅方いいとこ取りしたサーバー構成が実現可能。 ■リアルタイムサーバ リアルタイム通信エンジンでバトルサーバを構成し、RPCを⽤用いた独⾃自プロトコルによる完全同期な 通信が可能 ■リアルタイムサーバ リアルタイム通信エンジンでバトルサーバを構成し、RPCを⽤用いた独⾃自プロトコルによる完全同期な 通信が可能 WEB系言語WEB系言語 MatchingMatching BattleBattle クライアントプログラムクライアントプログラム ⾮非同期+リアルタイム系ゲーム(リアルタイムレイド系、4⼈人など同時対戦系) リアルタイム処理理の必要のない画⾯面を⾮非同期のNetwork  Game  Frameworkで構成し、 ゲーム本編ではリアルタイム通信エンジンを⽤用いたリアルタイムマッチングを⾏行行い、 完全同期型の遊びを提供するネットワークゲーム。 ・カードゲームのリアルタイムレイドイベント ・「モンスターストライク」等のリアルタイム共闘型のゲーム ・「ドラゴンポーカー」のような複数⼈人で⼀一緒に遊ぶカードゲームやボードゲーム系 ⾮非同期+リアルタイム系ゲーム(リアルタイムレイド系、4⼈人など同時対戦系) リアルタイム処理理の必要のない画⾯面を⾮非同期のNetwork  Game  Frameworkで構成し、 ゲーム本編ではリアルタイム通信エンジンを⽤用いたリアルタイムマッチングを⾏行行い、 完全同期型の遊びを提供するネットワークゲーム。 ・カードゲームのリアルタイムレイドイベント ・「モンスターストライク」等のリアルタイム共闘型のゲーム ・「ドラゴンポーカー」のような複数⼈人で⼀一緒に遊ぶカードゲームやボードゲーム系 ■非同期+リアルタイムサーバが最近の主流!■非同期+リアルタイムサーバが最近の主流! 51
  52. 52. クライアントプログラム LoadBalancer LoadBalancer Web App x N Web Res x N Web Admin / 監視ソフト用 ポート 443 ポート 80 ポート 80 監視ソフト用 DB KPI用 DB InternetInternet Memcached Matching (C++) x N ポート 任意 Battle (C++) x N ポート 任意 ■マッチングサーバとバトルサーバ リアルタイム通信エンジンを⽤用いて、C++、C#で実装しRPC通信を⾏行行う。 ■WEBサーバとリアルタイムサーバの通信 リアルタイム通信エンジンとNetwork  Game  Frameworkの通信⽤用のプラグインを使 ⽤用する事で、WEBサーバとリアルタイムサーバ間で双⽅方向通信が可能。 ■マッチングサーバとバトルサーバ リアルタイム通信エンジンを⽤用いて、C++、C#で実装しRPC通信を⾏行行う。 ■WEBサーバとリアルタイムサーバの通信 リアルタイム通信エンジンとNetwork  Game  Frameworkの通信⽤用のプラグインを使 ⽤用する事で、WEBサーバとリアルタイムサーバ間で双⽅方向通信が可能。 C++C++ マスターデータDB (Master / Slave) ログ保存DB (Master / Slave) バックアップ ユーザーデータDB (Master / Slave) バックアップ バックアップ ■非同期+リアルタイムサーバ構成例■非同期+リアルタイムサーバ構成例 52
  53. 53. ログイン直後からゲーム画⾯面に他のプレイヤーの姿が表⽰示され、 リアルタイムに話しかけたり⼀一緒に遊んだり出来るような、 完全同期型のオンラインゲームサーバ ・MO系タイトル。 ・MMORPG系タイトル。 ログイン直後からゲーム画⾯面に他のプレイヤーの姿が表⽰示され、 リアルタイムに話しかけたり⼀一緒に遊んだり出来るような、 完全同期型のオンラインゲームサーバ ・MO系タイトル。 ・MMORPG系タイトル。 ■完全リアルタイム系は?■完全リアルタイム系は? 53
  54. 54. リレーサーバ インターネット バトルサーバ DB ゲームサーバ ゲームサーバ ゲームサーバ ×N×N ×N×N ■MOでのゲームサーバの概念図■MOでのゲームサーバの概念図 44
  55. 55. リレーサーバ インターネット バトルサーバ DB ゲームサーバ ゲームサーバ ゲームサーバ ×N×N ×N×N ■バックエンドサーバ バトル以外のすべての処理理(ビジュアルロビー、チャット、シ ョップ、マッチングなど)を⾏行行うサーバ。DBとクライアントを 除き、全て単⼀一のプロセスとして起動。 ■リレーサーバ クライアントからの通信を受け取り、適切切なゲームサーバに 分配するサーバ。 複数起動しており、負荷の分散を⾏行行うと同時に ユーザー数の増減によってゲームサーバの台数を調整できる事 が可能となる。 ■バトルサーバ バトル本編を処理理する専⽤用サーバ。 バトルインスタンスを個別のプロセスとし て⽣生成。 リアルタイムバトルは特に処理理が重いため 別サーバとして独⽴立立。 通信量量も多いので、リレーサーバを経由せ ず直接クライアントと通信する。 ■サーバの開発環境 すべてのサーバプログラムをC++⾔言語で記述。 ■MOでのゲームサーバの概念図■MOでのゲームサーバの概念図 45
  56. 56. クライアントプログラム Web Admin / 監視ソフト用 ポート 443 監視ソフト用 DB マスターDB (Master / Slave) KPI用 DB ユーザーDB (Master / Slave) ログ保存DB (Master / Slave) InternetInternet マッチング x N ポート 任意 バトル x N ポート 任意 リレー x N ポート 任意 ゲームサーバ(オ ークション・ショッ プ・エリア etc…) ポート 任意 ログインサー バ ポート 任意 ■ゲームサーバ 全てリアルタイム通信エンジン(C++)で実装しRPCで通信 を⾏行行う。 ■ゲームサーバ 全てリアルタイム通信エンジン(C++)で実装しRPCで通信 を⾏行行う。 データキャッシ ュサーババックアップ バックアップ バックアップ ■MOでのゲームサーバ構成例■MOでのゲームサーバ構成例 46
  57. 57. エリアサーバA エリアサーバB DB バックエンドサーバ (オークション、チャット) クライアント クライアント クライアント クライアント 1ワールド1ワールド エリアサーバ N… ■MMOでのゲームサーバ概念図■MMOでのゲームサーバ概念図 47
  58. 58. エリアサーバA エリアサーバB DB バックエンドサーバ (オークション、チャット) クライアント クライアント クライアント クライアント 1ワールド1ワールド エリアサーバ N… ■エリアサーバについて 1エリア=1サーバで構築。 1エリアとは、町、フィールドの1区域、ダンジョンなど。 ■エリアサーバのスペック MMOは全ての処理理を1プロセスで実⾏行行するため、 1サーバ当たりのCPU速度度とメモリ容量量が重要。 CPUが速ければ速いほど、メモリも多ければ多いほど多くのユーザー を捌ける。 ■1サーバあたりの収容⼈人数の⽬目安 1サーバ当たり、⼤大体200〜~3000⼈人まで、 処理理内容によって⼤大きく変わる。 例例えば敵の出現しない町の中などは、 フィールドよりもCPU負荷が軽くなる為、 より多くのユーザーを処理理できる。 ■エリアサーバの処理理内容 ・全ユーザの管理理(移動、当たり判定、戦闘、死亡、etc…) ・全エネミーの管理理(AI、移動、当たり判定、戦闘、ポップ、 etc…) ・ショップ、オークション、トレード、etc… ただし、⼀一部の処理理はバックエンドサーバに逃がすこともある 。 ■クライアントとエリアサーバの通信 多くの通信が発⽣生するため、リレーサーバ等を介さず、 エリアサーバと多数のクライアントが直接通信を⾏行行う ■MMOでのゲームサーバ概念図■MMOでのゲームサーバ概念図 48
  59. 59. クライアントプログラム Web Admin / 監視ソフト用 ポート 443 監視ソフト用 DB KPI用 DB InternetInternet エリア.2 ポート 任意 エリア.3 ポート 任意 エリア.1 ポート 任意ポート 任意 ログインサー バ ポート 任意 バックエンドサー バ (オークション・シ ョップ・チャット etc…) ■ゲームサーバ MOの構成とほぼ同様。 ■ゲームサーバ MOの構成とほぼ同様。 データキャッシ ュサーバ マスターDB (Master / Slave) ユーザーDB (Master / Slave) ログ保存DB (Master / Slave) バックアップ バックアップ バックアップ ■MMOでのゲームサーバ構成例■MMOでのゲームサーバ構成例 49
  60. 60. •以上です! •次回は『CEDEC2015』で、60分でMOゲームを ゼロから作り上げるデモを行います! •以上です! •次回は『CEDEC2015』で、60分でMOゲームを ゼロから作り上げるデモを行います! 60
  61. 61. ご静聴ありがとうございました! ・お気軽にお問合せください contact@monobit.co.jp 来⽉月からセミナーも開催していきます! モノビットリアルタイム通信のダウンロードはこちらから http://www.monobitengine.com/dl_rtc.html モノビットMOエンジンのダウンロードはこちらから http://www.monobitengine.com/dl_moe.html Facebook モノビットエンジン助け合い所 https://www.facebook.com/groups/monobitengineusers/ Twitter https://twitter.com/monobit_engine 来⽉月からセミナーも開催していきます! 61

×