協力・対戦ゲームを支える Photonの最新情報、 Mecanimにネイティブ対応した PUNの実力 Photon 運営事務局 シニアテクニカルアドバイザー 並木 健太郎 テクニカルアドバイザー 山本 昇平 COPYRIGHT 2014 @ UNITY TECHNOLOGIES 自己紹介:並木 • Photon運営事務局の「並木」です • ゲーム業界に関わり始めたのは ここ数年です… • ずーっと通信、ネットワークと 関わってきました – 最初は組込み開発者として携帯電話や Bluetoothプロトコルスタックを作ってました – GMOクラウドに入社してからは、主に専用サーバーのホ スティングサービス開発に従事 自己紹介:山本 • Photon運営事務局 山本昇平 • Photonのエンジニアとして、 サポート業務から営業・イベント まで幅広く活動中 • Oculus Ri3・Gear VRに傾倒中 • 趣味はアニメ鑑賞 アジェンダ • • • • • • 協力・対戦ゲームの市場感 マルチプレイのゲームを作るには Photonのご紹介 PUNのご紹介 PUN 1.5xを使ったMecanim同期デモ Photonの最新情報 協力・対戦ゲームの市場感 マルチプレイゲームの数 2013/8 2014/2 2015/2 • • iOS 21 40 59 Android • 単純にマルチプレイか 45 どうかの判断で見ると、 両プラットフォームで増 45 加傾向 62 日本の週間ランキング上位100位の アプリをマルチプレイゲームかどうか カウント 弊社調査による • 直近では半数以上に なっている 協力・対戦の割合 iOS 協力 対戦 両方 • どちらのプラットフォー 2014/2 1 6 33 ムも、協力プレイだけの 2015/2 ゲームというのは少な 5 24 30 Android 2014/2 2015/2 い • 日本においても対戦 協力 対戦 両方 ゲームは増えてきてい 1 19 25 る 6 27 29 簡単に市場感のまとめ • もう言う間でもないですが… 協力・対戦ゲームの市場は盛り上がってます • 協力はもちろん、対戦も増えてます • マルチプレイという要素はスタンダードに マルチプレイのゲームを作るには マルチプレイって…? • 複数のプレイヤーが同時に同じゲームを楽し むこと • プレイヤー同士を繋いでデータのやりとりが 必要なので、リアルタイムに情報の同期を行 う必要がある 同期すべきデータ • ゲームの内容にはよりますが… – 各キャラクタの位置・状態 • プレイヤー、敵、その他いろいろ… – イベント情報 • キャラクタ同士の衝突、攻撃とか… – ゲーム全体の状態 • ゲームの進行状態、残り時間、ボスキャラの状態… キャラクタの位置・状態 • 全プレイヤー内のキャラク タの位置や状態は同期して いないとだめ • Unity的な言い方をすれば、 各インスタンスのTransform、 Animatorのステータスを同 期させる • あまり意識せず、自分のイ ンスタンスと同様に同期し ているのが理想 Player A Player B Player A 同期 同期 Player A Player B Player B イベント情報 • ゲームの重要な要素 • よくあるのは衝突判定 の結果とか • イベントを誰が発生さ せるのかとか、何を送 るのかとかをよく整理し ておく必要がある 通知 Player A 通知 AJack Player B Enemy Player A Player C ゲーム全体の状態 • 同じゲームをしている人 すべてが共有すべき情 報 • 例えば、ゲームの進行状 態とか、残り時間とか • レイドバトルのような場合 は敵キャラの状態とかも ここで管理する方法も Stage: B Remain Pme: 0:36 Boss HP: 89 Boss Player B Player A Player B Player C Player C Player A どこで処理を実装するか • 日本のディベロッパーは、ソーシャルゲーム の癖?でついサーバー側で…と考えがちです が、なるべくクライアント側で実装を勧めます • サーバー側でなんでもやると、通信のタイム ラグやサーバーの負荷を気にしたりとか、結 構大変だったりします マルチプレイゲームのまとめ • 肝はデータの同期 • 同期させる対象、事象を整理しておく • 送信元や送信先、内容、頻度などを考えて、そ れぞれに適した同期の方法を決める • ゲームを始めるまでのロビーやマッチメイキング のお話もありますが、それは別の機会に… Photonのご紹介 Photonとは • 先ほどお話したマルチプレイ を実現するために必要な機能 を一通り持っているツール • サーバーとクライアントSDKを セットで提供 • クライアント(=プレイヤー)間の 通信を簡単に実現するための システム • サーバーは接続性を確保す るためのもので、基本的に処 理を行うのはクライアント Photon SDK SDK SDK Client Client Client Photonでできること • いっぱいあるんですが…ポイントは リアルタイム通信 に必要な機能に絞っている • ストレージとかリーダーボードとかそういう機 能は持っていません Photonの主な機能 • ロビー – 名前付ロビー – マッチメイキング – プレイヤー検索 • ルーム – 人数制御・表示制御 – カスタムプロパティ • 同期関連 – オブジェクト同期 – イベント通知 – RPC (PUN) • WebHooks/WebRPC • オフラインモード Photonの特徴 • サーバー経由なので接続性が高い – P2Pにありがちな問題は発生しない • 独自技術による信頼性と低レイテンシーの両方を確 保 • クロスプラットフォーム対応で異なるプラットフォーム 間でも利用可能 • UnityからはAsset Storeからダウンロードするだけで SDKの利用が可能 – 詳細は後ほどご案内します Photonの開発メンバー • 開発元はドイツ・ハンブルクの Exitgames社 • トップもエンジニアのエンジニア集団 • World Golf Tourの ノウハウを Photonに活用 Photonのラインナップ サーバー構築・運用が不要なクラウドサービス クラウド系基本サービス、迷ったらまずはこれ ターンベース、低トラフィック向け Unity向け、サーバー・機能はRealPmeと全く同等 チャットに特化 サーバーにインストールして使うミドルウェアサービス PUNのご紹介 PhotonのNaPve SDK • クロスプラットフォームでどのプラットフォーム でも基本的には同じ形のAPI • Photonのすべての機能を使えます – ロビー、マッチメイキング、ルーム作成・入室 – イベント発生、受信処理 PUNとは • Photon Unity Networkingの略 • NaPve SDKをベースにPhotonをUnityで使いやす い形にしたAPI (NaPve SDKの上位API) • Unity Networking互換で移行も容易 • サーバーはRealPmeと全く同等(というかそのも の) • Asset Storeからインポートするだけで利用可能 PUNならではの特徴 • 簡単なクラス構造 • 簡単なオブジェクト同期 • RPCによる簡単なイベント同期 簡単なクラス構造 • NaPve SDKではSDKのクラスを派生させて、そ こに必要なコードを追加して、メインクラスか ら呼び出す、という構造 • PUNでは接続処理とかはStaPcなクラスのメ ソッドを呼び出すだけで簡単にできます • 後のデモで簡単にお見せします 簡単なオブジェクト同期 • NaPve SDKではオブジェクト同期もイベント発生・受信 で処理するので、簡単ながらコードが必要 • PUNではインスタンスにクラスをアタッチするだけで Transform/RigidBodyを同期させることが可能 – コーディングなしでクラスの設定だけでできます – シリアライズのコードを書けばそれ以外のデータの同期も 簡単にできます • 同期のタイミングはPUNが面倒を見るので勝手にやっ てくれます RPCによる簡単なイベント通知 • 通常のイベント通知でも難しくなく利用できま すが、RPCならより簡単に利用可能 • RPCなら、[RPC]属性を付けたメソッドを作成し て、そのオブジェクトに対してRPCメソッドでメ ソッド名を名前で渡して呼び出すだけ PUNで簡単にオンラインゲーム • 最初にご説明したオンラインゲームに必要な 機能はすべてそろってます – キャラクタの位置・状態 : オブジェクト同期 – イベント情報 : イベント通知、RPC – ゲーム全体の状態 : ルームのカスタムプロパティ • ロビーやマッチメイキングもあります PUN 1.5xを使ったMecanim同期デモ PUN 1.5x • 2014年12月にPUNが1.50として大きくバージョ ンアップ • Mecanimにもネイティブ対応! – 同期するComponent別にクラスが分割 – MecanimのAnimatorにも対応して、コーディング なしでステータス遷移に対応 実際に利用したプロジェクトのデモ • PUN 1.5xとユニティちゃんを使ってキャラクタ の動き・状態を複数台で同期させるデモ • 接続処理部分以外はほとんどコーディングな しでできていています • 本日はあまりお時間がないため、出来上がっ たプロジェクトをベースにご説明します Assetのインポート • ユニティちゃんとPUNの Assetをインポート • PUNは無償のFree版を 使ってください フォルダ準備・スクリプトコピー • 自前で作るものを置く フォルダを作成 – Demos • Resources (Prefab置き場) • Scene (シーン置き場) • Scripts (スクリプト置き場) • PUNのデモを削除 シーン準備・Prefab化 • ベースとなるシーンを開く – UnityChan/Scenes/ LocomoPon • ユニティちゃんをPrefab化 – Hierarchyのunitychanを Demos/Resourcesフォルダ へ持っていってPrefab化 • Hierarchyのunitychanは 削除 Photon Viewなどの追加・設定 • Prefab化したunitychanに Photonのスクリプトを追加 – Photon View – Photon Transform View – Photon Animator View • Photon ViewのObserved Componentsに下記2つを追 加 – Photon Transform View – Photon Animator View Photon Transform Viewの設定 • 下記2つをチェック入れる – Synchronized PosiPon – Synchronized RotaPon • Synchronized PosiPon設定 – Interpolate OpPon: Lerp – Lerp Speed: 3 • Synchronized RotaPon設定 – Interpolate OpPon: Lerp Photon Animator Viewの設定 • Animatorのパラメータが自 動的に表示されます • パラメータの同期を継続的 に行うか不連続で行うか設 定できる • 基本的に数値的なものは ConPnuous、Bool型は Discreteで • ここのパラメータは画面で PUNの接続設定 • PUN Wizardを開いて、 接続設定を行う • 今回はPhoton RealPme を利用、取得したAppID を設定 • リージョンはjpを設定 接続スクリプトの作成 • 接続スクリプトをつける オブジェクトを作成 – PhotonController • 接続用スクリプトを新規 に作成 – RandomMatchmaker.cs • エディタで開く 接続スクリプト:冒頭部分 • StaPcなPhotonNetwork クラスで接続制御 • ConnectUsingSefngs() メソッドでPUN Wizardで 設定した情報で接続 public class RandomMatchmaker : MonoBehavior { public GameObject photonObject; void start() { } PhotonNetwork. ConnectingUsingSettings("0.1"); 接続スクリプト:ルーム入室・作成 • Photonへの接続が完了すると OnJoinedLobby()が呼ばれる • JoinRandomRoom()で入室 – 既存のルームにランダムに入 室 • OnPhotonRandomJoinFailed() は入室失敗時のコールバック • 入室に失敗=ルームがない、 ということになるので、 CreateRoom()でルームを作成 void OnJoinedLobby() { PhotonNetwork.JoinRandomRoom(); } Void OnPhotonRandomJoinFailed() { PhotonNetwork.CreateRoom(null); } 接続スクリプト:ゲーム開始 • unitychanのPrefabを Photonを使ってインスタ ンス化 • 自分のインスタンスだ けカメラのスクリプトを 有効化 void OnJoinedRoom() { PhotonNetwork.Instantiate( photonObject.name, new Vector3(0f, 1f, 0f), Quaternion.identity, 0 ); GameObject mainCamera = GetObject.FindWithTag("MainCamera"); mainCamera.GetComponent<ThirdPersonCamera>() .enabled = true; } 接続スクリプト:設定 • 接続のためのオブジェ クトに作成したスクリプ トを追加 • スクリプトのPhoton Objectにunitychan Prefabを設定 ユニティちゃんスクリプト変更 • ユニティちゃんのスクリ プト UnityChanControlscript WithRigidBody.cs を編集 ユニティちゃんスクリプト変更 • 継承元を Photon.MonoBehavior に変更 • FixedUpdate()メソッドを 変更 – 自分自身のインスタンス でない場合は何もしない Public class UnityChanControlscriptWithRigidBody : Photon.MonoBehavior { ... void FixedUpdate() { if (!(photonView.isMine)) { return; } ... } メインカメラの調整 • メインカメラのThird Person Cameraスクリプ トを最初の段階では無 効化する • 自分のインスタンスに 合わせて動かすために スクリプトで有効化する シーンを保存して完成! • 完成したシーンを自分 で作ったフォルダ内に 保存 • これで完成! 実行してみましょう! デモまとめ • Mecanimを使ったキャラクタの同期が、スクリプト なしでできます! • 接続処理はさすがにコーディングが必要ですが、 PUN内のデモにも接続処理のサンプルはいっぱ いあるので、そちらも参考にしてください – 今回のベースは Demos/MarcoPolo-‐Tutorial/RandomMatchmaker.cs Photonの最新情報 今年のアップデートは… • Photon Serverメジャー バージョンアップ! – V3 -‐> V4 VOICE • Photon Voice リリース! Photon Server V4 • • • • HTTP(S)サポート Turnbasedの新機能をServerでも実装 アプリ構造をリニューアル カウンタ関連リニューアル HTTP(S)サポート • トランスポートとしてHTTP(S)が利用可能に • HTTP(S)しか通らないような厳しいネットワーク環 境でも利用する事が可能 • もちろん従来からのUDP/TCP/Websocketもサ ポート • HTTP(S)しか通らない環境向けにご利用ください Turnbasedの新機能実装 • Turnbasedで実装されていた新機能 – Webhooks/WebRPC • イベント発生時に外部のWebサービスを呼び出す • これによりPhoton Serverに手を入れることなしにサーバー 側のロジックカスタマイズも可能 – クラウドセーブ • ルームの情報をサーバーに一時的に保存する機能 • ルーム全員が抜けてもゲームの状態をキープできる アプリ構造のリニューアル • Lite/LoadBalancingの2つから、 MMO/LoadBalaningの2つに • Pluginサポート – 今まではカスタマイズする際にはアプリ全体をカスタ マイズする必要があったが、Pluginの開発だけでカス タマイズの対応も可能に – PluginならPrivate Cloudへの移行も容易 – 今まで通り全体のカスタマイズもできます カウンタ関連リニューアル • いままでは独自のカウンタとWindowsのパ フォーマンスカウンタを併用 • V4よりパフォーマンスカウンタに集約 • Windows標準機能を柔軟に利用することが 可能 • いままでのDashboardは廃止 Photon Voice • • • • • • クラウド系の新サービス RealPmeをベースに音声通信の機能を搭載 ルームベース、APIもRealPmeに準拠 1対1のほか、グループでの通話も対応 プッシュトーク、継続的な通話のいずれにも対応 CODECにはTeamSpeakを採用 VOICE リリーススケジュール • Photon Server V4 – RC(Release Candidate)1が近日リリース予定 – 正式版は夏前〜夏頃リリース予定 • Photon Voice – 5月にEarly Access開始予定 – 正式版は夏前リリース予定 • テスト版へのアクセスに興味がある方はお問い 合わせください 国内利用事例紹介 聖剣伝説 RISE of MANA • • • • ゲームの種類 3DアクションRPG 同時プレイヤー 最大30名 対応デバイス iOS,Android リリース元 SQUARE ENIX • 聖剣伝説RISE of MANAのレイドバ トルにて、Photon Serverが利用さ れています! • リアルタイム通信の部分について は非常に簡単に実装できました! とコメントいただいています イメージを表示できません。メモリ不足のためにイメージを開くことができないか、イメージが破損している可能性があります。コン ピューターを再起動して再度ファイルを開いてください。それでも赤い x が表示される場合は、イメージを削除して挿入してくださ い。 ©2014 SQUARE ENIX CO., LTD. All rights reserved. 62 ファミスタ ドリームマッチ • • • • ゲームの種類 対戦野球ゲーム 同時プレイヤー 2名 対応デバイス iOS, Android リリース元 Bandai Namco Entertainment • あのファミスタがスマホになって、 ネットワーク対戦に対応! • リアルタイム対戦の部分で Photon Serverを利用されていま す リトルノア • • • • ゲームの種類 同時プレイヤー 対応デバイス リリース元 RTS 最大5名 iOS,Android BlazeGames • クライアント間通信部分にPhoton Serverを利用されています クロススピリッツ • • • • ゲームの種類 同時プレイヤー 対応デバイス リリース元 RTS 最大5名 iOS,Android Trifort • クライアント間通信部分にPhoton Serverを利用されています トゥモローアイランド • ゲームの種類 無人島体験アドベンチャーゲーム • 同時プレイヤー 最大5名 • 対応デバイス iOS,Android • リリース元 Trifort • 無人島を体験できる、MMO • クライアント間通信部分にPhoton Serverを利用されています テラバトル • • • • ゲームの種類 同時プレイヤー 対応デバイス リリース元 パズルRPG 最大3名 iOS,Android MISTWALKER • 協力プレイの部分において、 Photon RealPmeを利用されてい ます 最後に 今後のイベント予定 • 4/23(木)、4/27(月)にワークショップ開催 – 弊社(渋谷・セルリアンタワー)にて – 今後も定期的に開催します • 5/19(火)にPhoton勉強会開催予定 – LT登壇者も募集しております • 6/中旬に企業向けセミナーも開催予定 – 詳細は決まり次第お知らせします お問い合わせ • ブース出展(Room1前)しておりますので、 お気軽にお立ち寄りください • メールアドレス – [email protected] まとめ • マルチプレイのゲームは難しくありません! • Photonを使えばより簡単に作れます • すべて無料からお使いいただけるので、ぜひ お試しください! ありがとうございました! [email protected]
© Copyright 2024 ExpyDoc