Enviar búsqueda
Cargar
Unityでオンラインゲーム作った話
•
2 recomendaciones
•
10,383 vistas
torisoup
Seguir
UnityとPhoton Cloudを組み合わせてゲームを作った話 https://peatix.com/event/323261
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 47
Descargar ahora
Descargar para leer sin conexión
Recomendados
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
エピック・ゲームズ・ジャパン Epic Games Japan
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
コールバックと戦う話
コールバックと戦う話
torisoup
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
Observableで非同期処理
Observableで非同期処理
torisoup
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
SEGADevTech
Recomendados
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
エピック・ゲームズ・ジャパン Epic Games Japan
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
コールバックと戦う話
コールバックと戦う話
torisoup
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
Observableで非同期処理
Observableで非同期処理
torisoup
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
SEGADevTech
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
historia_Inc
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について
エピック・ゲームズ・ジャパン Epic Games Japan
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
UnityTechnologiesJapan002
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
Toshiyasu Miyabe
Fortniteを支える技術
Fortniteを支える技術
エピック・ゲームズ・ジャパン Epic Games Japan
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
エピック・ゲームズ・ジャパン Epic Games Japan
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
エピック・ゲームズ・ジャパン Epic Games Japan
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
エピック・ゲームズ・ジャパン Epic Games Japan
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
Game Tools & Middleware Forum
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
エピック・ゲームズ・ジャパン Epic Games Japan
UE4とUnrealC++について
UE4とUnrealC++について
Masahiko Nakamura
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
Sugimoto Chizuru
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
エピック・ゲームズ・ジャパン Epic Games Japan
見よう見まねでやってみる2D流体シミュレーション
見よう見まねでやってみる2D流体シミュレーション
KLab Inc. / Tech
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
UnrealEngine の VR 事情
UnrealEngine の VR 事情
Masaaki Suga
Más contenido relacionado
La actualidad más candente
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
historia_Inc
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について
エピック・ゲームズ・ジャパン Epic Games Japan
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
UnityTechnologiesJapan002
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
Toshiyasu Miyabe
Fortniteを支える技術
Fortniteを支える技術
エピック・ゲームズ・ジャパン Epic Games Japan
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
エピック・ゲームズ・ジャパン Epic Games Japan
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
エピック・ゲームズ・ジャパン Epic Games Japan
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
エピック・ゲームズ・ジャパン Epic Games Japan
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
Game Tools & Middleware Forum
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
エピック・ゲームズ・ジャパン Epic Games Japan
UE4とUnrealC++について
UE4とUnrealC++について
Masahiko Nakamura
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
Sugimoto Chizuru
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
エピック・ゲームズ・ジャパン Epic Games Japan
見よう見まねでやってみる2D流体シミュレーション
見よう見まねでやってみる2D流体シミュレーション
KLab Inc. / Tech
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
La actualidad más candente
(20)
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
Fortniteを支える技術
Fortniteを支える技術
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
UE4とUnrealC++について
UE4とUnrealC++について
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
GPU最適化入門
GPU最適化入門
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
見よう見まねでやってみる2D流体シミュレーション
見よう見まねでやってみる2D流体シミュレーション
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
Similar a Unityでオンラインゲーム作った話
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
UnrealEngine の VR 事情
UnrealEngine の VR 事情
Masaaki Suga
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
Railsによるワイルドなソフトウェア開発
Railsによるワイルドなソフトウェア開発
Drecom Co., Ltd.
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜
Kazuki Morozumi
財布にやさしいRを使ったデータマイニング
財布にやさしいRを使ったデータマイニング
Ryoji Yanashima
ROS User Group Meeting #28 マルチ深層学習とROS
ROS User Group Meeting #28 マルチ深層学習とROS
Hiroki Nakahara
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
Takuya Nishimoto
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
Game Tools & Middleware Forum
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
Game Tools & Middleware Forum
Nishimoto 170603-mruby
Nishimoto 170603-mruby
Takuya Nishimoto
rogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさん
rogy01
PyCharm入門
PyCharm入門
Yuki Nagai
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところ
IGDA Japan
Io t,ai時代のソフトウェア
Io t,ai時代のソフトウェア
Toshiaki Kurokawa
私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
くみこみからひとこと
くみこみからひとこと
kishima7
DSPGraphを試してみた話
DSPGraphを試してみた話
Toru Nayuki
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
2017冬の開発合宿vrオンラインゲーム
2017冬の開発合宿vrオンラインゲーム
Syo Igarashi
Similar a Unityでオンラインゲーム作った話
(20)
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
UnrealEngine の VR 事情
UnrealEngine の VR 事情
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Railsによるワイルドなソフトウェア開発
Railsによるワイルドなソフトウェア開発
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜
財布にやさしいRを使ったデータマイニング
財布にやさしいRを使ったデータマイニング
ROS User Group Meeting #28 マルチ深層学習とROS
ROS User Group Meeting #28 マルチ深層学習とROS
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 OSAKA
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
PlayCanvas:2D機能とライブラリ組み込みのいろは - PlayCanvas運営事務局 - GTMF 2018 TOKYO
Nishimoto 170603-mruby
Nishimoto 170603-mruby
rogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさん
PyCharm入門
PyCharm入門
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところ
Io t,ai時代のソフトウェア
Io t,ai時代のソフトウェア
私とOSSの25年
私とOSSの25年
くみこみからひとこと
くみこみからひとこと
DSPGraphを試してみた話
DSPGraphを試してみた話
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
2017冬の開発合宿vrオンラインゲーム
2017冬の開発合宿vrオンラインゲーム
Más de torisoup
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
torisoup
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
UniTask入門
UniTask入門
torisoup
MagicOnion入門
MagicOnion入門
torisoup
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
torisoup
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
torisoup
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
torisoup
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
Photon Cloud ことはじめ
Photon Cloud ことはじめ
torisoup
アバター生放送支援アプリ「アバれぽ」
アバター生放送支援アプリ「アバれぽ」
torisoup
UniRx完全に理解した
UniRx完全に理解した
torisoup
UnityとNCMBでユーザ管理を実装してみた話
UnityとNCMBでユーザ管理を実装してみた話
torisoup
Task vs Observable
Task vs Observable
torisoup
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
UniRxでPUNを使いやすくする
UniRxでPUNを使いやすくする
torisoup
はじめてのUniRx
はじめてのUniRx
torisoup
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
torisoup
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
torisoup
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウ
torisoup
Más de torisoup
(20)
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
UniTask入門
UniTask入門
MagicOnion入門
MagicOnion入門
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
インタフェース完全に理解した
インタフェース完全に理解した
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
Photon Cloud ことはじめ
Photon Cloud ことはじめ
アバター生放送支援アプリ「アバれぽ」
アバター生放送支援アプリ「アバれぽ」
UniRx完全に理解した
UniRx完全に理解した
UnityとNCMBでユーザ管理を実装してみた話
UnityとNCMBでユーザ管理を実装してみた話
Task vs Observable
Task vs Observable
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
UniRxでPUNを使いやすくする
UniRxでPUNを使いやすくする
はじめてのUniRx
はじめてのUniRx
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウ
Unityでオンラインゲーム作った話
1.
オンラインゲームつくった話 @toRisouP
2.
誰? • とりすーぷ (
@toRisouP ) – Webエンジニア(プログラマ) – Unity、C#、Scala、Ruby、Python、PHPとかその辺触ってる • 最近はScalaが一番お気に入り • いろいろやってる – 同人ゲーム制作 – VR開発 – Qiita書く – 技術書執筆
3.
この秋、 ゲームをリリースしました
4.
ハクレイフリーマーケット • Windows向けの東方2次創作ゲーム • 最大6人までネットワーク対戦可能なパーティアクションゲーム •
ロビー機能あり、CPUあり
5.
ウリ • 物理演算をメインに使ったパーティゲーム – とりあえず物理演算をガバらせておけば面白くなるという発想 •
ガバガバ物理演算は偉大 – 大量の物理演算オブジェクトを同期しながら通信対戦できる • 今思うと狂気の沙汰
6.
使ってるもの • 使っているフレームワークとか – Unity
2017.2 – Photon Cloud – NCMB – ADX2 LE – Effekseer • 使ってるライブラリ – UniRx – Zenject – PhotonRx
7.
本題
8.
オンラインゲームつくるの すごくツライ
9.
PhotonCloudの仕様 • クライアントで状態を管理する – サーバサイドに状態はもたせられない –
サーバサイドにロジックはおけない – 誰か1人がマスタークライアントになる – クライアントサイドで全ての問題を解決しないといけない!
10.
発生した問題 • 動きがカクカクする • 通信の待ち時間でテンポが悪くなる •
帯域、メッセージ数がオーバーする
11.
発生した問題 • 動きがカクカクする • 通信の待ち時間でテンポが悪くなる •
帯域、メッセージ数がオーバーする
12.
オブジェクトの管理ルール • オブジェクトには親の概念がある – 同期オブジェクトにはPhotonViewコンポーネントがついている –
PhotonView.IsMine = true だと自分が管理(送信モード) – PhotonView. IsMine = false だと通信相手が管理(受信モード) 親 (IsMine=true) 子 (IsMine=false) 子 (IsMine=false) 子 (IsMine=false)
13.
図解 • 自分の世界 – IsMine
= true • 相手の世界 – IsMine = false 同期されている2つのオブジェクトがある
14.
図解 • 自分の世界 •
相手の世界 自分のオブジェクトが移動すると… アニメーション
15.
図解 • 自分の世界 •
相手の世界 移動後の座標を送信して 相手側の座標を書き換える
16.
図解 • 自分の世界 •
相手の世界 相手の世界の座標を上書きして同期
17.
図解 • 自分の世界 •
相手の世界 自分の世界ではキレイにアニメーションして移動したが、 相手の世界には結果しか送ってないので突然ワープしたように見える → 動きがカクカクする
18.
カクカクする問題 • 同期メッセージの送信頻度が低いのが原因 – 根本対策は同期頻度を上げるしかないが、 帯域やメッセージ数の制限で上げるにも限界がある →別アプローチで解決する必要がある
19.
解決策いろいろ • 同期頻度を単純に増やす方法 – これができたら苦労しない •
キー入力を送ってしまう方法 – 入力から一意に結果が決まるゲームシステムならかなり有効 • がんばってごまかす方法 – 補間・補外・エフェクト・アニメーションでごまかす • そもそも同期しない方法 – ローカルで演算可能ならそっちを優先して使う
20.
解決策いろいろ • 同期頻度を単純に増やす方法 – これができたら苦労しない •
キー入力を送ってしまう方法 – 入力から一意に結果が決まるゲームシステムならかなり有効 • がんばってごまかす方法 – 補間・補外・エフェクト・アニメーションでごまかす • そもそも同期しない方法 – ローカルで演算可能ならそっちを優先して使う 採用した方法 (というかこれしかできない)
21.
がんばってごまかす • 補間処理でなんとかんする – Vector3.Lerp
と Quaternion.Lerp を使う • 補間の割合を調整して違和感が少ないパラメータを見つける – 補間を強くする → 滑らかだが動きが鈍くなる – 補間を弱くする → 機敏だがカクカクが目立つ
22.
そもそも同期しない 相手の演算結果を待っているからラグが生じる ↓ 自分が演算して結果を送る側になれば ラグは起きない
23.
プレイヤの動向を観察してわかったこと • 「プレイヤは自キャラの周辺しかみてない」 – 正確には「自分の行動に対する周辺のリアクション」しか見てない •
自分が触ったオブジェクト • 自分が持ち上げたオブジェクト • 自分が投げたオブジェクトの挙動 – 少なくともここさえ滑らかに動いていれば、 他がカクカクしててもあまり気にならない
24.
やったこと • 自キャラが触れたオブジェクトの親権を奪う – 座標を受け取る側から送る側にしてしまう –
自キャラが触れた瞬間にIsMineをtrueに書き換えてしまう • (実際はIsMineに似た別のフラグ用意してそっちを書き換えているけどね)
25.
効果 • かなり効いた – 少なくとも自分の周辺だけはラグがなく動いてくれる •
実装は複雑化してしまった – メンテナンス困難な実装になっている – 親権のスイッチングコストも結構かかる
26.
発生した問題 • 動きがカクカクする • 通信の待ち時間でテンポが悪くなる •
帯域、メッセージ数がオーバーする
27.
テンポが悪くなる • 入力に対してプレイヤが機敏に反応してくれない – 原因は行動時に「通信」が発生するから •
特にこのゲームだと「アイテムを拾う」時に発生する – アイテムを拾えるかどうか?の判定に通信が発生するため
28.
解決策 • 通信時間をアニメーションでごまかす – アイテムを拾う時に、 「構える」→「持ち上げる」の2段階のアニメーションを再生する –
構えモーションの間に通信を終わらせてしまう
29.
アニメーション 構えモーション 構え→持ち上げ 構え→持ち上げ (構えが長めのキャラ) 構えモーション再生中に裏で通信しちゃうことで、 通信によるテンポの悪化をごまかす
30.
発生した問題 • 動きがカクカクする • 通信の待ち時間でテンポが悪くなる •
帯域、メッセージ数がオーバーする
31.
帯域とメッセージ数 • 帯域 – 秒間に通信するデータ量 –
小さければ小さいほうが当然良い – PhotonCloud的には通信したデータの総量の方が大事 • メッセージ数 – 座標等の同期、RPCの実行命令などの送受信回数
32.
制約 • 通信量 – 1ユーザあたり3GB/月まで –
オーバーすると追加料金 • メッセージ数 – 1部屋につき500メッセージ/秒 – オーバーしても今のところはペナルティなし
33.
メッセージ数の制約がヤバイ • 部屋に参加している人数倍して計算される – 6人部屋で1メッセージ送信すると、 送信1+受信5=6メッセージ消費してしまう –
6人部屋だと約83メッセージ/秒しか送れない • 60FPSだと1フレームあたり1~2メッセージしか送れない
34.
このゲーム同期対象が多すぎる • フィールド上のアイテムを同期すると一瞬で上限超える – こんな仕様のゲームでネットワーク対戦とかバカじゃないの…
35.
対策をうつ必要がある
36.
対策前の状態 • データ通信量 – 1試合あたりの総量6MB/人 •
メッセージ数 – 2000メッセージ/s/room – 規定値の4倍もいってた
37.
取った対策一覧 • 次の位置が確実に予測可能なものは同期しない • 動いていないオブジェクトは同期しない •
オンライン対戦時にはゲームのフレームレートを30に落とす • オブジェクトをシャーディングしてグループ単位でまとめて同期する
38.
取った対策一覧 • 次の位置が確実に予測可能なものは同期しない • 動いていないオブジェクトは同期しない •
オンライン対戦時にはゲームのフレームレートを30に落とす • オブジェクトをシャーディングしてグループ単位でまとめて同期する
39.
フレームレートを落とす • オンライン時のみ30FPSに落とす – メッセージ送信回数を60FPS時の半分以下にできる –
補間処理でごまかしやすくなる – 低スペックPCと挙動を揃えることが出来る – 割とメリットが大きかったので採用
40.
オブジェクトのグループ化 • オブジェクトの座標同期をグループ単位で行う – ようするにシャーディングして管理する
41.
グループ単位で分割するメリット • バラバラに送るよりメッセージ数を削減できる – 1メッセージ内に複数の座標データをまとめて送信できる •
挙動のチューニングができる – 「グループにわける数」 と 「何フレームごとに送信するか」の 組み合わせでカクカク度合いとメッセージ数のバランスを調整できる • 一斉に同期する時の違和感が消せる – 全オブジェクトが同じタイミングで動くと違和感が出る – バラバラに動いている感を出してごまかせる
42.
後はログを見ながら調整 • 違和感と帯域・メッセージ数のバランスを見て模索
43.
チューニング結果 • 帯域 – 対策前
1試合あたり6MB → 1試合あたり2MB 60FPS,グループ化なし,毎フレーム送信 30FPS,3グループ分割,2フレームごとに送信
44.
チューニング結果 • メッセージ数 – 1000~1900/s
→ 450~600/s
45.
なんとか規定値には収まった • まだところどころオーバーするけど… – 怒られたら直す 500メッセージ
46.
まとめ
47.
まとめ • オンラインゲーム制作はとにかく手間がかかる – 工数がオフラインゲーム開発の5~10倍になる(体感) –
技術的に実装困難なため諦めた仕様もいくつかある – 不具合発生時の原因調査にエスパー能力が必要 • まじめに作るとつらいところはできるだけ誤魔化す – プレイヤが不快に感じさえしなければよい – ガバ物理はむしろラグった方が面白いから助かった
Descargar ahora