cedec2013 photon network engine

75
iPhoneリアルタイムマルチプレイを実現! ~ Photon Network Engineを簡単に活用する方法 ~ AppBankGames Inc. 1

Upload: gmo-cloud-kk

Post on 10-Jun-2015

1.693 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Cedec2013 photon network engine

iPhoneでリアルタイムマルチプレイを実現!

~ Photon Network Engineを簡単に活用する方法 ~

AppBankGames Inc.

1

Page 2: Cedec2013 photon network engine

アジェンダ

2

Page 3: Cedec2013 photon network engine

アジェンダ• 本日は「Photon Network Engine」をUnityで使用してリアルタイムマルチプレイを実現させるお話をします

• 現在稼働中のサービスを実際に作った開発者が良かった点・苦労した点などをお話しします

• 「Photon Network Engine」を簡単に活用できる「Photon Cloud」についてご紹介いたします

3

Page 4: Cedec2013 photon network engine

アジェンダ

1. Photon Network Engineを採用した理由

2. サーバーサイドの実装

3. Unityクライアントサイドの実装

4. Photon Cloud

4

Page 5: Cedec2013 photon network engine

Photon Network Engineを採用した理由

1.

5

Page 6: Cedec2013 photon network engine

今回我々が作りたかったゲームダンジョンズアンドゴルフ

6

Page 7: Cedec2013 photon network engine

ダンゴル2012/12/3 リリース

ファンタジー本格ゴルフ!

無料!

7

Page 8: Cedec2013 photon network engine

ダンゴル2012/12/3 リリース

ファンタジー本格ゴルフ!

無料!

8

Page 9: Cedec2013 photon network engine

ダンゴル2012/12/3 リリース

ファンタジー本格ゴルフ!

無料!

9

Page 10: Cedec2013 photon network engine

ダンゴルのマルチプレイ• リアルタイム同期型マルチプレイ(ゴーストではありません)

• つまり自分も相手も同じホールを同時にプレイしたい

• 3G回線でもマルチプレイ可能にしたい

• オフライン時にはシームレスにソロプレイに移行したい

10

Page 11: Cedec2013 photon network engine

そんな夢みたいなゲームを作りたい

11

Page 12: Cedec2013 photon network engine

が、しかし・・・

• ネットワークゲームの作成経験者がほぼゼロ

• 予算も期間も限られている

• スマートフォンでリアルタイムマルチプレイという未知

12

Page 13: Cedec2013 photon network engine

これらの困難にどう立ち向かうか※クライアントサイドはUnityを使用する

13

Page 14: Cedec2013 photon network engine

3択―ひとつだけ選びなさい

(1) ハンサムな我々は自前で実装する

(2) Unity組込のネットワークエンジンが助けてくれる

(3) 実現できない。現実は非情である。

14

Page 15: Cedec2013 photon network engine

(1)ハンサムな我々は自前で実装する

(2) Unity組込のネットワークエンジンが助けてくれる

(3) 実現できない。現実は非情である。

15

Page 16: Cedec2013 photon network engine

リアルタイムマルチプレイを自前実装するには・・・

• TCP / UDPを生で扱ったり、NAT Holepunchingしたり、自前で効率的な通信プロトコルを作らなければならない

• 性能要求が極めて高い(1~2秒遅延したらクソゲー)

• オープンソースの製品はほぼ皆無、費用がかかる

• 今回はモバイル、3G回線で動作させなければならない

16

Page 17: Cedec2013 photon network engine

無理

17

Page 18: Cedec2013 photon network engine

(1)ハンサムな我々は自前で実装する

(2) Unity組込のネットワークエンジンが助けてくれる

(3) 実現できない。現実は非情である。

18

Page 19: Cedec2013 photon network engine

(1) ハンサムな我々は自前で実装する

(2)Unity組込のネットワークエンジンが助けてくれる

(3) 実現できない。現実は非情である。

19

Page 20: Cedec2013 photon network engine

UnityのNetworkクラス• 便利なAPIが揃っている

• 自動オブジェクト同期やRPC呼び出しをサポート

• ネットワークゲームの経験がなくても組めそう

• 実験してみたところiPhone実機でも問題なく動作!

• 一見これでよさそうに見えるのだが・・・

20

Page 21: Cedec2013 photon network engine

うまくいかない

• 最大の問題点はクライアントのうち1台がホストにされてしまうという仕様

• 要するにDedicated Serverが存在しないためスマートフォンにホストをやらせなければならない

21

Page 22: Cedec2013 photon network engine

何がまずいか• ダンゴルのようなスマートフォンでリリースされるゲームの場合、ユーザーさんが3G回線で遊んでいるケースも考慮しなければならない

• SBMの3G上りは実測最高10KB/s程度 = 1KB/Frame (10FPS)

しかもブツブツ切れるとてもじゃないがホストにはなれない

22

Page 23: Cedec2013 photon network engine

(1) ハンサムな我々は自前で実装する

(2)Unity組込のネットワークエンジンが助けてくれる

(3) 実現できない。現実は非情である。

23

Page 24: Cedec2013 photon network engine

(1) ハンサムな我々は自前で実装する

(2) Unity組込のネットワークエンジンが助けてくれる

(3)実現できない。現実は非情である。

答え-③ 答え③ 答え③24

Page 25: Cedec2013 photon network engine

どうする?

• 3G回線でもマルチプレイをするために、Dedicated Serverが絶対に欲しい

• でもUnityのNetworkクラスの利便性は捨てがたい(特にネットワークゲームの経験のないチームには)

25

Page 26: Cedec2013 photon network engine

これらを満たすソリューションはないか?

26

Page 27: Cedec2013 photon network engine

そこでPhoton Network Engine27

Page 28: Cedec2013 photon network engine

Photon Network Engineの概要• Exit Gamesが開発した高速でスケーラブルなネットワークエンジン

• Photon Server is the fastest and easiest to use on-premise Network Engine to build scalable MMOGs, FPS or any other multiplayer game and application for PC, Mac, Browser, Mobile, Console and Cross-Platform. (公式Webより)

• 要するにすごいらしい

28

Page 29: Cedec2013 photon network engine

.NET CLR (C#)

Photon Network Engineの概要

Photon Core (C/C++)

Reliable UDP Websockets Binary TCP

Server Application

Server Application

Server Application

サーバー クライアント

Photon SDK(for each platforms)

ClientApplication

29

Page 30: Cedec2013 photon network engine

サーバー

• Windows Server向け製品として提供

• 通信はReliable UDPとTCPを使用、高速で安定

• ロードバランサー、ロビーマスターサーバー、NATホールパンチングを標準装備

30

Page 31: Cedec2013 photon network engine

クライアント

• 主要なプラットフォーム向けにSDKが提供されている

• コンソール・モバイル・Unityもサポート

31

Page 32: Cedec2013 photon network engine

料金体系

• 買い切りのPhoton Server

• 同接100人まで無料、無制限プラン$3,500

• SaaS型のPhoton Cloud

• 同接20人まで無料、同接1000人で$69/月

32

Page 33: Cedec2013 photon network engine

採用実績

• 2013年8月現在ではモバイル向けの実績も続々登場

33

Page 34: Cedec2013 photon network engine

ゴルフゲームの実績もある34

Page 35: Cedec2013 photon network engine

モバイルでの実績もある35

Page 36: Cedec2013 photon network engine

Photon 採用の決め手• Dedicated Serverが立てられる

• UnityのNetworkクラスのAPIがそのまま使用可能

• 小規模デベロッパーでも手が出るほど安い ($3,500)

• という選択肢がPhoton以外にUnity界隈に無い文句なしに素敵

36

Page 37: Cedec2013 photon network engine

これなら大丈夫そう!

ということで、ここからは実際の開発の話

37

Page 38: Cedec2013 photon network engine

サーバーサイドの実装2.

38

Page 39: Cedec2013 photon network engine

Photonサーバーを構築

• 先述の通りWindows環境が必要

• 今回は某社のクラウドサービス上に構築

• Photon ServerをインストールしてXML形式の設定ファイルを用意する(主にロードバランサの設定)

• 最後にWindowsサービスとしてPhoton Serverが動作するように設定

39

Page 40: Cedec2013 photon network engine

• Photon Server SDKで最初から用意されているサーバーアプリ

• ロードバランサを実装している

• MasterサーバーとGameサーバーをたてる必要がある

LoadBalancing Server

ゲームルームで実際にクライアントと通信

Masterサーバー:

Gameサーバー:

Gameサーバーの管理、負荷分散、ゲームルームの管理など

40

Page 41: Cedec2013 photon network engine

LoadBalancing ServerMasterサーバーは常にGameサーバーを監視しており、あとから動的にゲームサーバーを組み込むことが出来る

Photon Server(Master Server)

Photon Server(Game Server)

Photon Server(Game Server)

Photon Server(Game Server)

登録

41

Page 42: Cedec2013 photon network engine

LoadBalancing ServerMasterサーバーは常にGameサーバーを監視しており、あとから動的にゲームサーバーを組み込むことが出来る

Photon Server(Master Server)

Photon Server(Game Server)

Photon Server(Game Server)

Photon Server(Game Server)

監視・負荷分散

42

Page 43: Cedec2013 photon network engine

Photon Server(Master Server)

1台

Photon Server(Game Server)

1~2台ダンゴル Client

ダンゴルのPhotonサーバー構成

43

Page 44: Cedec2013 photon network engine

Photon Server(Master Server)

1台

Photon Server(Game Server)

1~2台ダンゴル Client

ダンゴルのPhotonサーバー構成

Game Server台数は負荷状況に応じて手動で増減

3G回線上でだいたい300ms ~ 1000ms程度

WiFiだと100ms ~ 200ms程度

44

Page 45: Cedec2013 photon network engine

Photon Server(Master Server)

Photon Server(Game Server)

Photon Server(Game Server)

Photon Server(Game Server)

ダンゴル Client

ダンゴル Client

ダンゴルのPhotonサーバー構成

ダンゴルクライアントからはまずはMaster Serverに接続されるマスターサーバーが負荷状況によりどのGame Serverを使うか判断する

45

Page 46: Cedec2013 photon network engine

Photon Server(Master Server)

Photon Server(Game Server)

Photon Server(Game Server)

Photon Server(Game Server)

ダンゴル Client

ダンゴル Client

ダンゴルのPhotonサーバー構成

Game Serverが決まったら、クライアント同士の通信はGame Serverを介して行われる

46

Page 47: Cedec2013 photon network engine

Photon Server(Master Server)

Photon Server(Game Server)

Photon Server(Game Server)

Photon Server(Game Server)

ダンゴルClient

ダンゴルAPIサーバー

ダンゴルのPhotonサーバー構成

ダンゴルではユーザーマッチング時に外部サーバーと連携する必要があり、一部サーバ実装がカスタマイズされています

47

Page 48: Cedec2013 photon network engine

苦労した点(サーバーサイド)

1. 情報が少ない

• 国内ではほとんど事例がないため、情報源はもっぱら英語

• 海外でもそこまで情報が多くないので、公式のフォーラムが唯一の情報源

※2013年8月現在、かなり改善してきている

48

Page 49: Cedec2013 photon network engine

苦労した点(サーバーサイド)

※Photon Cloudを使えば設定は考慮不要

2. Windowsでしか動作しない

• Linuxサーバーと比較すると、どうしても費用がかかる

• Linuxでのサーバー運用経験者しかいないため最初の設定に苦労

49

Page 50: Cedec2013 photon network engine

Unityクライアントサイドの実装

3.

50

Page 51: Cedec2013 photon network engine

1) 入室処理2) RPCの実装3) オフラインモードへの移行4) マルチプレイのテスト

Unityクライアントサイドの実装

51

Page 52: Cedec2013 photon network engine

入室処理

52

Page 53: Cedec2013 photon network engine

ダンゴル Client

(Unity)

Photon Serverクラスタ

ダンゴルAPI ServerクラスタLB

ダンゴルデータベース

53

Page 54: Cedec2013 photon network engine

ダンゴル Client

(Unity)

Photon Serverクラスタ

ダンゴルAPI ServerクラスタLB

ダンゴルデータベース

API Server から部屋名を受け取る

54

Page 55: Cedec2013 photon network engine

ダンゴル Client

(Unity)

Photon Serverクラスタ

ダンゴルAPI ServerクラスタLB

ダンゴルデータベース

指定した部屋名の部屋に入る / 作る

55

Page 56: Cedec2013 photon network engine

入室処理

1.APIサーバーに部屋名を要求

2.Photon サーバーに接続

3.部屋名を指定して Join

• Join に失敗したら新しい部屋を作成して再度 Joinを試みる

4.入室処理完了したら PhotonNetwork.Instantiate でキャラ生成

56

Page 57: Cedec2013 photon network engine

57

Page 58: Cedec2013 photon network engine

RPCの実装

58

Page 59: Cedec2013 photon network engine

Photon のデータ送信方法はふたつState Synchronization と RPC(Remote Procedure Calls)

ダンゴルでは RPCのみ使用※3G回線上で State Synchronization はちょっと無理がある

RPCの実装

59

Page 60: Cedec2013 photon network engine

1) Photon.MonoBehaviour を継承したクラスにRPCを実装2) PhotonView と実装したクラスをキャラのプレハブにアタッチ3) RPCを呼び出すコードを実装4) あとはひたすらテスト

RPCの実装

60

Page 61: Cedec2013 photon network engine

RPCの引数としてオブジェクトを送りたいときどうするか?

↓今回はJSONを採用

• JSON にすることで通信量は増えるが、実装・変更が簡単• JSON パーサはLitJSON を使用より高速化したい場合は PhotonPeer.RegisterType というのがあるらしいが、ダンゴルでは使ってない

RPCの実装

61

Page 62: Cedec2013 photon network engine

オフラインモードへの移行

62

Page 63: Cedec2013 photon network engine

モバイルのマルチプレイではオフラインモードは必須Photon には標準でオフラインモードが実装されているネットワークが切断されると自動的にオフラインモードに移行

PhotonNetwork.offlineMode = true; //Enable offline mode.

オフラインモードへの移行オフラインモード = シングルプレイモード

63

Page 64: Cedec2013 photon network engine

マルチプレイのテスト

64

Page 65: Cedec2013 photon network engine

受信側をシミュレートするためのデバッグの仕組みを作る

マルチプレイのテスト

65

Page 66: Cedec2013 photon network engine

66

Page 67: Cedec2013 photon network engine

open -na /Applications/Unity/Unity.app

Unity をたくさん開く (Mac OS Xの場合)

マルチプレイのテスト

これで1台のマシンでマルチプレイのテストが可能になる

67

Page 68: Cedec2013 photon network engine

68

Page 69: Cedec2013 photon network engine

Good Unity の Network クラスとの差異が少ないので実装が楽。

Badまだまだ Photonの情報が少ない。オフラインモード突入時の挙動がお行儀悪いので注意。※結局Photonクライアントのコードを書き換えて対応

クライアントまとめ

69

Page 70: Cedec2013 photon network engine

Photon Cloud

4.

70

Page 71: Cedec2013 photon network engine

サービスの比較

クラウドサービス申し込めば即利用可能

サーバーSDKが提供される自前でサーバーを用意する

必要がある

71

Page 72: Cedec2013 photon network engine

サービスの比較

サーバーサイドの実装は最初から用意されているものを使用する

SDKのソースが公開されているので、独自の実装を追加することができる

72

Page 73: Cedec2013 photon network engine

サービスの比較

サーバー構築・維持管理が不要料金も大抵の場合は割安

カスタマイズ不可、提供機能のみ

サーバーに独自処理を追加できるインフラのカスタマイズも可能

サーバの維持管理と費用が必要

73

Page 74: Cedec2013 photon network engine

まとめ• Photon Network Engine + Unityの組み合わせは強力ですうまくやれば素人集団でも比較的お手軽に立派なリアルタイムマルチプレイゲームを作ることができます

• Unityでリアルタイムマルチプレイを実現したい人には大変オススメです!

74

Page 75: Cedec2013 photon network engine

Thank you for watching.

75