Enviar búsqueda
Cargar
ポコロンダンジョンズとリアルタイム通信 -クライアント編-
•
6 recomendaciones
•
12,264 vistas
S
Suguru Shirai
Seguir
https://atnd.org/events/76070 の発表資料です
Leer menos
Leer más
Ingeniería
Vista de diapositivas
Denunciar
Compartir
Vista de diapositivas
Denunciar
Compartir
1 de 46
Descargar ahora
Descargar para leer sin conexión
Recomendados
ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
Suguru Shirai
組織にテストコードを書く文化を 根付かせるためにやってきたこと
組織にテストコードを書く文化を 根付かせるためにやってきたこと
Suguru Shirai
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
Suguru Shirai
Inside CyberAgent's Game Development
Inside CyberAgent's Game Development
Suguru Shirai
全世界135か国に配信したレーシングゲーム『ACR DRIFT』の制作秘話と技術基盤の構築について
全世界135か国に配信したレーシングゲーム『ACR DRIFT』の制作秘話と技術基盤の構築について
CROOZ, inc.
GCPでCI環境を構築する
GCPでCI環境を構築する
Toshihumi Anan
Oculus rift入門
Oculus rift入門
hima_zinn
スタートアップだからこそ使うAWS(第5回JAWS-UG Nagoya)
スタートアップだからこそ使うAWS(第5回JAWS-UG Nagoya)
Tomotsune Murata
Recomendados
ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
Suguru Shirai
組織にテストコードを書く文化を 根付かせるためにやってきたこと
組織にテストコードを書く文化を 根付かせるためにやってきたこと
Suguru Shirai
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
サイバーエージェントのゲーム事業のインフラからみたゲーム開発スタイルの変遷
Suguru Shirai
Inside CyberAgent's Game Development
Inside CyberAgent's Game Development
Suguru Shirai
全世界135か国に配信したレーシングゲーム『ACR DRIFT』の制作秘話と技術基盤の構築について
全世界135か国に配信したレーシングゲーム『ACR DRIFT』の制作秘話と技術基盤の構築について
CROOZ, inc.
GCPでCI環境を構築する
GCPでCI環境を構築する
Toshihumi Anan
Oculus rift入門
Oculus rift入門
hima_zinn
スタートアップだからこそ使うAWS(第5回JAWS-UG Nagoya)
スタートアップだからこそ使うAWS(第5回JAWS-UG Nagoya)
Tomotsune Murata
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D event
Miya Kohno
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
Tomoki Ando
メタバースのビジネスモデルと技術限界
メタバースのビジネスモデルと技術限界
Ryo Kurauchi
スマホでVRコンテンツを作る方法
スマホでVRコンテンツを作る方法
hima_zinn
gumiにおける、海外支社とのAtlassian製品利用事例
gumiにおける、海外支社とのAtlassian製品利用事例
知教 本間
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
gree_tech
大切な名前[Intro]公開版
大切な名前[Intro]公開版
infinite_loop
iOS6時代のTwitter / Facebook連携
iOS6時代のTwitter / Facebook連携
Masahiro Murakami
すごろくゲームでPlayFabの活用を検討
すごろくゲームでPlayFabの活用を検討
Shinya Nakajima
20210925_jazug_azure_what_to_do_first
20210925_jazug_azure_what_to_do_first
TomoakiOno
グリーにおけるAWS移行の必然性
グリーにおけるAWS移行の必然性
gree_tech
Rancher による社内向けテナントサービス基盤
Rancher による社内向けテナントサービス基盤
Keita Shimada
AzureDevOpsで始めるAndroidのCI/CD
AzureDevOpsで始めるAndroidのCI/CD
Shinya Nakajima
「Windows Azure」 の Mobile Services
「Windows Azure」 の Mobile Services
snicker_jp
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
Shuji Yamada
PlayFabとCognitiveを連携させて健全なゲーム運営を
PlayFabとCognitiveを連携させて健全なゲーム運営を
Shinya Nakajima
Microsoft Azure 概要
Microsoft Azure 概要
Yuki Igarashi
Azure PipelinesをサーバサイドのCI/CDに活用
Azure PipelinesをサーバサイドのCI/CDに活用
Shinya Nakajima
20180123 rancher meetupyokohama_minehiko_nohara
20180123 rancher meetupyokohama_minehiko_nohara
Minehiko Nohara
20170111 macnica networks-nohara_rancher_usecase
20170111 macnica networks-nohara_rancher_usecase
Minehiko Nohara
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
ksimoji
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Tomoaki Shimizu
Más contenido relacionado
La actualidad más candente
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D event
Miya Kohno
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
Tomoki Ando
メタバースのビジネスモデルと技術限界
メタバースのビジネスモデルと技術限界
Ryo Kurauchi
スマホでVRコンテンツを作る方法
スマホでVRコンテンツを作る方法
hima_zinn
gumiにおける、海外支社とのAtlassian製品利用事例
gumiにおける、海外支社とのAtlassian製品利用事例
知教 本間
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
gree_tech
大切な名前[Intro]公開版
大切な名前[Intro]公開版
infinite_loop
iOS6時代のTwitter / Facebook連携
iOS6時代のTwitter / Facebook連携
Masahiro Murakami
すごろくゲームでPlayFabの活用を検討
すごろくゲームでPlayFabの活用を検討
Shinya Nakajima
20210925_jazug_azure_what_to_do_first
20210925_jazug_azure_what_to_do_first
TomoakiOno
グリーにおけるAWS移行の必然性
グリーにおけるAWS移行の必然性
gree_tech
Rancher による社内向けテナントサービス基盤
Rancher による社内向けテナントサービス基盤
Keita Shimada
AzureDevOpsで始めるAndroidのCI/CD
AzureDevOpsで始めるAndroidのCI/CD
Shinya Nakajima
「Windows Azure」 の Mobile Services
「Windows Azure」 の Mobile Services
snicker_jp
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
Shuji Yamada
PlayFabとCognitiveを連携させて健全なゲーム運営を
PlayFabとCognitiveを連携させて健全なゲーム運営を
Shinya Nakajima
Microsoft Azure 概要
Microsoft Azure 概要
Yuki Igarashi
Azure PipelinesをサーバサイドのCI/CDに活用
Azure PipelinesをサーバサイドのCI/CDに活用
Shinya Nakajima
20180123 rancher meetupyokohama_minehiko_nohara
20180123 rancher meetupyokohama_minehiko_nohara
Minehiko Nohara
20170111 macnica networks-nohara_rancher_usecase
20170111 macnica networks-nohara_rancher_usecase
Minehiko Nohara
La actualidad más candente
(20)
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D event
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
メタバースのビジネスモデルと技術限界
メタバースのビジネスモデルと技術限界
スマホでVRコンテンツを作る方法
スマホでVRコンテンツを作る方法
gumiにおける、海外支社とのAtlassian製品利用事例
gumiにおける、海外支社とのAtlassian製品利用事例
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
大切な名前[Intro]公開版
大切な名前[Intro]公開版
iOS6時代のTwitter / Facebook連携
iOS6時代のTwitter / Facebook連携
すごろくゲームでPlayFabの活用を検討
すごろくゲームでPlayFabの活用を検討
20210925_jazug_azure_what_to_do_first
20210925_jazug_azure_what_to_do_first
グリーにおけるAWS移行の必然性
グリーにおけるAWS移行の必然性
Rancher による社内向けテナントサービス基盤
Rancher による社内向けテナントサービス基盤
AzureDevOpsで始めるAndroidのCI/CD
AzureDevOpsで始めるAndroidのCI/CD
「Windows Azure」 の Mobile Services
「Windows Azure」 の Mobile Services
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
ここにハマった!Dockerコンテナホスティング「Arukas」の裏側
PlayFabとCognitiveを連携させて健全なゲーム運営を
PlayFabとCognitiveを連携させて健全なゲーム運営を
Microsoft Azure 概要
Microsoft Azure 概要
Azure PipelinesをサーバサイドのCI/CDに活用
Azure PipelinesをサーバサイドのCI/CDに活用
20180123 rancher meetupyokohama_minehiko_nohara
20180123 rancher meetupyokohama_minehiko_nohara
20170111 macnica networks-nohara_rancher_usecase
20170111 macnica networks-nohara_rancher_usecase
Destacado
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
ksimoji
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Tomoaki Shimizu
Cocos2d-xの深層 Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層 Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
gree_tech
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Ryosuke Suto
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
gree_tech
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
Shumpei Shiraishi
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
dena_study
Destacado
(8)
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Cocos2d-xの深層 Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層 Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
Similar a ポコロンダンジョンズとリアルタイム通信 -クライアント編-
ポコロンダンジョンズを彩るアニメーションノウハウ
ポコロンダンジョンズを彩るアニメーションノウハウ
GameCreators,CyberAgent
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
俺とディスプレイ
俺とディスプレイ
Masayuki KaToH
ヴィジュアルエフェクト初級者講座
ヴィジュアルエフェクト初級者講座
RyousukeItai
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
GameCreators,CyberAgent
カンバンと朝会とわたくし
カンバンと朝会とわたくし
Drecom Co., Ltd.
ITWeekモバイル活用展登壇資料
ITWeekモバイル活用展登壇資料
altplus-lab
0529ue4meetup-ragdoll-hangon
0529ue4meetup-ragdoll-hangon
cota2n
Similar a ポコロンダンジョンズとリアルタイム通信 -クライアント編-
(8)
ポコロンダンジョンズを彩るアニメーションノウハウ
ポコロンダンジョンズを彩るアニメーションノウハウ
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
俺とディスプレイ
俺とディスプレイ
ヴィジュアルエフェクト初級者講座
ヴィジュアルエフェクト初級者講座
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
カンバンと朝会とわたくし
カンバンと朝会とわたくし
ITWeekモバイル活用展登壇資料
ITWeekモバイル活用展登壇資料
0529ue4meetup-ragdoll-hangon
0529ue4meetup-ragdoll-hangon
ポコロンダンジョンズとリアルタイム通信 -クライアント編-
1.
ポコロンダンジョンズと リアルタイム通信 -‐‑
クライアント編 -‐‑ Grenge 袴田 大貴
2.
自己紹介 • 袴田
大貴 (Hakamata Daiki) • 株式会社グレンジ所属 • ポコロンダンジョンズ クライアントエンジニア • リリース前から現在まで https://www.facebook.com/D.hakamata
3.
ポコロンダンジョンズ
4.
アプリ紹介 • なぞるパズルRPG パズルブロック「ポコロン」をなぞって主人公を動かし、 敵を攻撃してダンジョンを攻略! •
1000種を超える装備, モンスター • 最大4人の協力プレイ「共闘」
5.
6.
アジェンダ 1. 構成 2.
同期方法 3. 具体例 4. 確率で発生する事象 5. 待ち合わせ 6. 再接続と強制同期 7. まとめ
7.
1. 構成
8.
構成図 curl (h+ps)
WebSocket (wss) (詳細はサーバサイドの塚原さんの発表で…)
9.
リアルタイム通信 n プロトコル WebSocket
: ブラウザでは定番 UDP : MMOでよく使われる RUDP : UDPとTCPの良いとこどり HTTP : ポーリング n ミドルウェア Node.js : すべての処理を自前で実装, JavaScript Photon : クラウドあり, C#, WIndowsServer モノビットエンジン : クラウドあり, C++, LinuxServer
10.
クライアント構成 n ゲームエンジン Cocos2d-x
v3.2.0 n 使用言語
11.
ソケット通信 n iOS AZSocketIO [
SocketRocket, AFNetWorking ] n Android Socket.IO-Client for Java [ Java-WebSocket ] どちらも独自に改造済み
12.
AZSocket Socket.IO-‐‑Client for Java GRWebSocket ポコロンダンジョンズ 実装構成
13.
発生した問題 • バックグラウンド時の通信維持 •
ソケットライブラリのメモリリーク • ソケット切断後GC多発 • 特定端末(Nexusなど)専用対応 • 意図的な切断と偶発的な切断の区別 • 通信保証 (再送) • 再接続
14.
ソケット通信Libの改修 n iOS host,
port, pathによる接続先設定 SSL対応 切断/再接続処理 n Android SSL対応 SSLContextのプロトコル複数対応 切断処理 (GC多発) JNI/マルチスレッド対応 イベント名+JSONデータ送受信
15.
2. 同期方法
16.
同期方法 n クライアント分散方式 サーバが中継,
各クライアントが処理 n イベント同期 特定のイベントをトリガとして同期 演算に必要なデータを送受信 なぞった! 中継役
17.
その他の同期方法 n サーバ集中方式 入力をサーバに送信し、サーバが処理 結果を各クライアントに配信 n
リプレイ再生 クライアント側は演算せず、再生のみ n フレーム同期 毎フレームに同期を行う
18.
端末間の同期 • 盤面の色,
配置 • 敵の情報 • プレイヤー, 召喚モンスターの情報 • 被ダメ/与ダメ • ターン数 • ドロップ情報 全てをやり取りするとデータ量多い!
19.
端末間の同期 • ポコダン
は ターン制 → 他プレイヤーの操作を自端末で再現すればデータ量削減 (2, 4), (2, 5), (3, 6) をなぞった 再現します
20.
通信保証 受領通知が来るまで一定間隔で再送 サーバ→クライアントの場合も同様 ①送信 ②受領通知 • 端末間ではなく端末-サーバ間で保証
21.
3. 具体例
22.
部屋生成〜クエスト開始 ①部屋生成要求 ②接続確立&部屋情報同期 n
ホスト
23.
部屋生成〜クエスト開始 ①部屋一覧要求 ②部屋参加要求 n ゲスト ③接続確立&部屋情報同期
24.
クエストの流れ プレイヤーターン開始 なぞる A.スキル なぞったマスを 歩きながら攻撃 C.スキル 敵ターン開始 移動前行動 移動中行動 移動後行動
25.
クエスト中 (送信) n
ターンの操作権限者が送る情報 • プレイヤ番号 • 行動タイプ (なぞり/スキル/リタイア/コンティニュー) • コマンドインデックス (送信情報のシーケンシャル番号) • (なぞり情報) • (使用したスキル情報)
26.
プレイヤー : 2 コマンド
: 0 タイプ : なぞり始め なぞり : (1, 4) プレイヤー : 2 コマンド : 1 タイプ : なぞり中 なぞり : (2, 4) ・・・ プレイヤー : 2 コマンド : 5 タイプ : なぞり終わり
27.
クエスト中 (受信) n
なぞり始め 盤面を暗転 n なぞり中 なぞり情報を元に光るラインを再現 n なぞり終わり なぞりルートを確定 「送信者側の端末で起きた事象を自身の端末で再現」
28.
4. 確率で発生する事象は どうする?
クリティカル, 回避, 状態異常 etc…
29.
乱数(擬似乱数) 乱数生成器 シード値 :
A 乱数列 x1, x2, x3, x4, x5, … 乱数生成器 シード値 : B 乱数列 y1, y2, y3, y4, y5, … 同一のシード値で初期化すれば、同一の乱数列が得られる
30.
乱数同期 乱数生成器 乱数生成器 乱数生成器 乱数生成器 シード:X 全端末で同じ乱数列
31.
複数の乱数生成器 n 可能な限りズレを抑止するために乱数生成器は複数 キャラクター毎に専用の乱数生成器 演出用の非同期の乱数生成器
32.
乱数生成器 n メルセンヌ・ツイスター <random>ヘッダ 決定的 周期が長い 一様分布 高速 GRRandomUtility
とライブラリ化して使用
33.
OSとSTL n iOS libc++
(LLVM C++ standard library) n Android APP_STL := gnustl_static [Application.mk] C++標準ライブラリが異なるので、そのままではシード値 を同期しても生成される乱数列が異なる
34.
OSとSTL n AndroidをiOSに揃える NDKのリファレンス APP_STL
:= c++_static (cocos2d-x v3.2の推奨NDKバージョンは r9d ですが r10dを使用)
35.
5. 待ち合わせ
36.
待ち合わせ Ready Ready Ready 待ち合わせ開始をサーバに通知
37.
待ち合わせ AllReady AllReady AllReady 部屋の人数分揃ったらクライアントに通知
38.
6. 再接続と強制同期
39.
意図的/偶発的な切断 n 意図的な切断 専用のイベントをサーバに送信してから切断 これによって偶発的な切断と区別が可能 ・偶発的切断の発生件数検証 ・ゲーム内の通知メッセージ出し分け
40.
疎通ロスト判定 Verification Verification 1P
2P 3P 疎通確認データを送信
41.
疎通ロスト判定 VerificationResult 疎通を確認できたプレイヤーリストが返却 VerificationResult VerificationResult 疎通確認プレイヤーリスト 1P, 3P
42.
疎通ロスト判定 n 疎通ロストしたプレイヤーがターン操作権限を持ってい た場合、ターンをスキップする n
(共通の仕様として)スキップ3回で部屋からキック マナーの悪いプレイヤーの排除 安定した通信環境のプレイヤーのプレイを保護
43.
再接続 1. 偶発的切断発生 2.
一定時間、再接続を試みる 3. 再接続に成功したら、クエスト復帰 キャリア回線とWi-Fiの切り替わりなど瞬断は起こりうる 「通信は切れるもの」として対策をする
44.
強制同期 n 検証用の盤面情報を相互に送受信し、差異があった場合 はホスト権限者の盤面に強制的に揃える n
中断セーブデータ シングルプレイの仕組み クエスト情報をJSONに書き出しファイルに保存 シングルプレイで使用している中断セーブデータを流用 差異が生じたらホストのデータに全員ロールバック
45.
7. まとめ
46.
まとめ n 複数のプレイヤの情報を互いに送受信しつつ整合性を保 つ、のがリアルタイム通信によるゲームのキモ n
ゲーム性に合わせた技術/同期方式を選定するのが重要 n 通信時間がどうしても発生するので、データ量は可能な 限り削減する
Descargar ahora