Download - iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
![Page 1: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/1.jpg)
iPhoneでリアルタイムマルチプレイを実現!
~ Photon Network Engine ~
AppBankGames Inc.
![Page 2: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/2.jpg)
![Page 3: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/3.jpg)
ユニークな環境
初期メンバーのほぼ全員がゲームを作ったことがないゲーム会社!!
オフィスがユニーク!和室!アーロンチェア!全員MacBookPro!!
•
•
![Page 4: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/4.jpg)
![Page 5: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/5.jpg)
![Page 6: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/6.jpg)
アジェンダ
小野将司 (Game Creator)
![Page 7: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/7.jpg)
アジェンダ
本日は「Photon Network Engine」をUnityで使用してリアルタイムマルチプレイを実現させるお話をします
現在稼働中のサービスを実際に作った開発者達が良かった点・苦労した点などをお話しします
•
•
![Page 8: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/8.jpg)
アジェンダPhoton Network Engineとは?Photon Network Engineを採用した理由サーバーサイドの実装Unityクライアントサイドの実装まとめ
1.
2.
3.
4.
5.
![Page 9: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/9.jpg)
Photon Network Engineとは?1.
小野将司 (Game Creator)
![Page 10: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/10.jpg)
そもそも「マルチプレイ」って何?
![Page 11: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/11.jpg)
格闘ゲームの通信対戦
モンハンとかぶつ森とか
MMORPG
•
•
•
ソーシャルカードゲーム
3DSのすれちがい通信
チェスなどのターン制ゲーム
•
•
•
リアルタイム
非同期
![Page 12: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/12.jpg)
非同期は比較的カンタン
広くインターネットを支えているHTTPとWeb系技術で大体の非同期なマルチプレイは作れる
性能要求が低め(1~2秒遅延しても誰も気にしない)
オープンソースの製品が多く費用が抑えられる
•
••
![Page 13: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/13.jpg)
リアルタイムは難しい
TCP / UDPを生で扱ったり、NAT Holepunchingしたり、自前で効率的な通信プロトコルを作らなければならない
性能要求が極めて高い(1~2秒遅延したらクソゲー)
オープンソースの製品はほぼ皆無、費用がかかる
•
••
![Page 14: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/14.jpg)
そんな難しいリアルタイムマルチプレイをお手軽に
![Page 15: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/15.jpg)
そこでネットワークエンジン
![Page 16: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/16.jpg)
Photon Network Engine
![Page 17: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/17.jpg)
Photon Network Engineの概要Exit Gamesが開発した高速でスケーラブルなネットワークエンジン
Photon Server is the fastest and easiest to use on-premiseNetwork Engine to build scalable MMOGs, FPS or any othermultiplayer game and application for PC, Mac, Browser,Mobile, Console and Cross-Platform. (公式Webより)
要するにすごいらしい
•
•
•
![Page 18: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/18.jpg)
.NET CLR (C#)
Photon Network Engineの概要
Photon Core (C/C++)
Reliable UDP Websockets Binary TCP
ServerApplication
ServerApplication
ServerApplication
サーバー クライアント
Photon SDK(for each platforms)
ClientApplication
![Page 19: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/19.jpg)
サーバー
Windows Server向け製品として提供
通信はReliable UDPとTCPを使用高速で安定(らしい)
••
![Page 20: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/20.jpg)
クライアント
主要なプラットフォーム向けにSDKが提供されている
もちろんUnityもサポート
••
![Page 21: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/21.jpg)
採用実績
2013年4月現在ではiOS/Android向けの実績も続々登場!•
![Page 22: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/22.jpg)
Photon Network Engineを採用した理由
2.
小野将司 (Game Creator)
![Page 23: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/23.jpg)
と、その前に
![Page 24: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/24.jpg)
ダンゴル2012/12/3 リリース
ファンタジー本格ゴルフ!
無料!
![Page 25: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/25.jpg)
ダンゴル2012/12/3 リリース
ファンタジー本格ゴルフ!
無料!
![Page 26: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/26.jpg)
ダンゴル2012/12/3 リリース
ファンタジー本格ゴルフ!
無料!
![Page 27: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/27.jpg)
マルチプレイリアルタイム同期型マルチプレイ(ゴーストではありません)
つまり自分も相手も同じホールを現在プレイしている
3G回線でもマルチプレイ可能
オフライン時はシームレスにソロプレイに移行する
•
•
•
•
![Page 28: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/28.jpg)
そんな夢みたいなゲームを作りたい
![Page 29: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/29.jpg)
が、しかし・・・
ネットワークゲームの作成経験者がほぼゼロ
予算も期間も限られている
スマートフォンでリアルタイムマルチプレイという未知
•••
![Page 30: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/30.jpg)
これらの困難にどう立ち向かうか
![Page 31: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/31.jpg)
リアルタイムマルチプレイの実現手法を考える
UnityのNetworkクラスを使用する既存のネットワークゲーム用エンジンをプラグインで自前でSystem.Net.Socketを使って実装する
A.
B.
C.
![Page 32: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/32.jpg)
UnityのNetworkクラスを使用する既存のネットワークゲーム用エンジンをプラグインで自前でSystem.Net.Socketを使って実装する
A.
B.
C.
リアルタイムマルチプレイの実現手法を考える
![Page 33: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/33.jpg)
UnityのNetworkクラス
便利なAPIが揃っている (Synchronization, RPC call, etc...)
ネットワークゲームの経験がなくても組めそう
実験してみたところiPhone実機でも問題なく動作!
一見これでよさそうに見えるのだが・・・
••••
![Page 34: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/34.jpg)
うまくいかない
最大の問題点はクライアントのうち1台がホストにされてしまうという仕様
要するにDedicated Serverが存在しないためスマートフォンにホストをやらせなければならない
•
•
![Page 35: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/35.jpg)
何がまずいかダンゴルのようなスマートフォンでリリースされているゲームの場合、ユーザーさんが3G回線で遊んでいるケースも考慮しなければならない
SBMの3G上りは実測最高10KB/s程度 = 1KB/Frame(10FPS)しかもブツブツ切れるとてもじゃないがホストにはなれない
•
•
![Page 36: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/36.jpg)
どうする?
3G回線でもマルチプレイをするために、Dedicated Serverが絶対に欲しい
でもUnityのNetworkクラスの利便性は捨てがたい(特にネットワークゲームの経験のないチームには)
•
•
![Page 37: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/37.jpg)
調べてみる
![Page 38: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/38.jpg)
ありました
![Page 39: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/39.jpg)
Photon 採用の決め手Dedicated Serverが立てられる (Windowsだけど)
UnityのNetworkクラスとAPIがほぼ一致している
小規模デベロッパーでも手が出るほど安い ($3,500)
という選択肢がPhoton以外にUnity界隈に無い文句なしに素敵(・・・に見える)
••••
![Page 40: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/40.jpg)
実績も一応あるようだ
![Page 41: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/41.jpg)
実績も一応あるようだ
![Page 42: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/42.jpg)
これはもう使わない手がない!ということで、ここからは実際の開発者の話
![Page 43: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/43.jpg)
サーバーサイドの実装3.
江口達郎 (Game Creator)
![Page 44: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/44.jpg)
Photonサーバー概要
クラウドサービス申し込めば即利用可能
サーバーSDKを提供自分でサーバーを用意す
る必要がある
![Page 45: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/45.jpg)
Photonサーバー概要
サーバー実装を修正できない
SDKのソースが公開されているので、独自の実装を追加することが出来る
![Page 46: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/46.jpg)
Photonサーバー概要
月額課金同時接続1000人で$69/月
買い切り無制限接続で$3,500
![Page 47: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/47.jpg)
Photonサーバー概要
サーバーを用意したくない、手軽に始めたい
デベロッパーにオススメ
サーバーに独自の処理を組み込みたい、同時接続が多い
デベロッパーにオススメ
![Page 48: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/48.jpg)
Photonサーバー概要・Windows環境で動作
Windowsサーバーをたてる必要あり
・用意されているアプリケーションが豊富LoadBalancer, MMO, Lobby, Chat,
etc...
![Page 49: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/49.jpg)
Photon Server SDKで最初から用意されているサーバーアプリ
ロードバランサを実装している
MasterサーバーとGameサーバーをたてる必要がある
•
••
LoadBalancing Server
ゲームルームで実際にクライアントと通信
Masterサーバー:
Gameサーバー:
Gameサーバーの管理、負荷分散、ゲームルームの管理など
![Page 50: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/50.jpg)
LoadBalancing ServerMasterサーバーは常にGameサーバーを監視しており、あとから動的にゲームサーバーを組み込むことが出来る
Photon Server(Master Server)
Photon Server(Game Server)
Photon Server(Game Server)
Photon Server(Game Server)
登録
![Page 51: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/51.jpg)
LoadBalancing ServerMasterサーバーは常にGameサーバーを監視しており、あとから動的にゲームサーバーを組み込むことが出来る
Photon Server(Master Server)
Photon Server(Game Server)
Photon Server(Game Server)
Photon Server(Game Server)
監視・負荷分散
![Page 52: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/52.jpg)
Photon Server(Master Server)
Photon Server(Game Server)
Photon Server(Game Server)
Photon Server(Game Server)
ダンゴル Client
ダンゴル Client
ダンゴルのPhotonサーバー構成
ダンゴルクライアントからはまずはMaster Serverに接続されるマスターサーバーが負荷状況によりどのGame Serverを使うか判断する
![Page 53: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/53.jpg)
Photon Server(Master Server)
Photon Server(Game Server)
Photon Server(Game Server)
Photon Server(Game Server)
ダンゴル Client
ダンゴル Client
ダンゴルのPhotonサーバー構成
Game Serverが決まったら、クライアント同士の通信はGame Serverを介して行われる
![Page 54: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/54.jpg)
Photon Server(Master Server)
Photon Server(Game Server)
Photon Server(Game Server)
Photon Server(Game Server)
ダンゴルClient
ダンゴルAPIサーバー
ダンゴルのPhotonサーバー構成
ダンゴルではユーザーマッチング時に外部サーバーと連携する必要があり、一部SDKに手が入っています
![Page 55: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/55.jpg)
手を入れた箇所
![Page 56: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/56.jpg)
手を入れた箇所
protected override void ExecuteOperation(LitePeer peer, OperationRequest operationRequest,SendParameters sendParameters) { switch (operationRequest.OperationCode) { case (byte)OperationCode.CreateGame: this.HandleCreateGameOperation(peer, createGameRequest, sendParameters); System.Net.WebClient wc = new System.Net.WebClient(); ... byte[] resData = wc.UploadValues(url, ps); ... case (byte)OperationCode.JoinGame: this.HandleJoinGameOperation(peer, joinGameRequest, sendParameters); System.Net.WebClient wc = new System.Net.WebClient(); ... byte[] resData = wc.UploadValues(url, ps); }}
ゲームルームを作る箇所と参加する箇所
追加
追加
![Page 57: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/57.jpg)
手を入れた箇所
protected override int RemovePeerFromGame(LitePeer peer, LeaveRequestleaveRequest) { if (this.IsDisposed) { // Send room member count to API server. System.Net.WebClient wc = new System.Net.WebClient(); ... byte[] resData = wc.UploadValues(url, ps); }}
ゲームルームから抜ける箇所
追加
![Page 58: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/58.jpg)
苦労した点(サーバーサイド)
1. 情報が少ない国内ではほとんど事例がないため、情報源はもっぱら英語
海外でもそこまで情報が多くないので、公式のフォーラムが唯一の情報源
••
GMOクラウドのPhoton情報日本語化に期待!
![Page 59: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/59.jpg)
苦労した点(サーバーサイド)
Photon Cloudを使えば設定は考慮不要
2. Windowsでしか動作しない
サーバーと言えばLinux、ですよね、、?
Linuxでのサーバー運用経験者しかいないため最初の設定に苦労
••
Photon Serverは結構イバラの道です。。
![Page 60: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/60.jpg)
まとめ(サーバーサイド)
サーバー持ちたくなかったり、Photon Server SDKを改造する必要が無ければ、Photon Cloudはとても良い選択肢
Photon Serverに手を出すと多少苦労することになると思う
今のところトラブル無くサーバーは動き続けています!!
•
••
![Page 61: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/61.jpg)
Unityクライアントサイドの実装
4.
松本一輝 (Game Creator)
![Page 62: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/62.jpg)
1) 入室処理2) RPCの実装3) オフラインモードへの移行4) マルチプレイのテスト
Unityクライアントサイドの実装
![Page 63: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/63.jpg)
入室処理
![Page 64: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/64.jpg)
ダンゴル Client(Unity)
Photon Network EngineServerクラスタ
ダンゴルAPI ServerクラスタLB
ダンゴルデータベース
![Page 65: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/65.jpg)
ダンゴル Client(Unity)
Photon Network EngineServerクラスタ
ダンゴルAPI ServerクラスタLB
ダンゴルデータベース
API Server から部屋名を受け取る
![Page 66: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/66.jpg)
ダンゴル Client(Unity)
Photon Network EngineServerクラスタ
ダンゴルAPI ServerクラスタLB
ダンゴルデータベース
指定した部屋名の部屋に入る / 作る
![Page 67: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/67.jpg)
入室処理APIサーバに部屋名を要求Photon サーバに接続部屋名を指定して Join
Join に失敗したら部屋作成入室処理完了したら PhotonNetwork.Instantiate でキャラ生成
1.
2.
3.
4.
5.
![Page 68: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/68.jpg)
入室処理function Start(){ PhotonNetwork.ConnectUsingSettings("v1.0");}
function OnConnectedToPhoton(){ PhotonNetwork.JoinRoom(roomName);}
function OnJoinedRoom(){ InstantiateLocalPlayer();}
function OnPhotonJoinRoomFailed(){ PhotonNetwork.CreateRoom(roomName, true, true, 4);}
![Page 69: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/69.jpg)
入室処理
function InstantiateLocalPlayer(){ var prefabName : String = “Birdie”; //prefab name in Resource Folder. var position : Vector3 = Vector3.zero; var rotation : Quaternion = Quaternion.identity;
PhotonNetwork.Instantiate(prefabName, position, rotation, 0);}
![Page 70: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/70.jpg)
![Page 71: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/71.jpg)
RPCの実装
![Page 72: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/72.jpg)
Photon のデータ送信方法はふたつState Synchronization と RPC(Remote Procedure Calls)
ダンゴルでは RPCのみ使用※モバイル通信で State Synchronization はちょっとキビシイかも ^^;
RPCの実装
![Page 73: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/73.jpg)
1) Photon.MonoBehaviour を継承したクラスにRPCを実装2) PhotonView と実装したクラスをキャラのプレハブにアタッチ3) あとはひたすらテスト
RPCの実装
![Page 74: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/74.jpg)
namespace Photon{ public class MonoBehaviour : UnityEngine.MonoBehaviour { public PhotonView photonView { get { return PhotonView.Get(this); } } new public PhotonView networkView { get { return PhotonView.Get(this); } } }}
RPCの実装
![Page 75: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/75.jpg)
public function OnShot(status : ShotStatus){ var json : String = JsonMapper.ToJson(status); photonView.RPC("RpcPlayerShot", PhotonTargets.Others, json);}
@RPCfunction RpcPlayerShot(json : String){ var shotStatus : ShotStatus = JsonMapper.ToObject.<ShotStatus>(json); var player : PlayerController = GetComponent.<PlayerController>(); player.Shot(shotStatus);}
RPCの実装
![Page 76: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/76.jpg)
送信側は送信先を指定する(基本はPhotonTargets.Others)送信側と受信側でパラメータを一致させるオブジェクトをそのまま送りたいときはJSONを使う
JSON にすることで通信量は増えるが、変更が簡単 JSON パーサはLitJSON を使用より高速化したい場合は PhotonPeer.RegisterType というのがあるらしいが、ダンゴルでは使ってない
•
•
••••
RPCの実装
![Page 77: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/77.jpg)
オフラインモードへの移行
![Page 78: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/78.jpg)
モバイルのマルチプレイではオフラインモードは必須Photon には標準でオフラインモードが実装されているネットワークが切断されると自動的にオフラインモードに移行
PhotonNetwork.offlineMode = true; //Enable offline mode.
オフラインモードへの移行オフラインモード = シングルプレイモード
![Page 79: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/79.jpg)
マルチプレイのテスト
![Page 80: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/80.jpg)
受信側をシミュレートするためのデバッグの仕組みを作る
マルチプレイのテスト
![Page 81: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/81.jpg)
Demo
![Page 82: iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine](https://reader033.vdocuments.mx/reader033/viewer/2022061207/5483f7c1b07959240c8b4a68/html5/thumbnails/82.jpg)
open -na /Applications/Unity/Unity.app
Unity をたくさん開く
※Mac のみ。Windows は分かりません ^^;