05:34更新フォローするこの記事は2014年11月時点のものです。現在とは異なる場合があるのでご了承ください。Photon運営事務局です。今回はPhotonとUnityを使って作る際に一番最初に読んで頂きたい記事となっています。UnityのCubeを使って簡単なネットワークの同期を行います。ボリュームが大きくなっていますが、最後まで読んで頂ければ幸いです。Realtimeとは、クラウド形式のリアルタイム同期に特化したネットワークエンジンのサービスです。これを利用することによって、今流行りの同時対戦ゲームがサーバを用意せず、容易(ダジャレではないです)に作ることが可能です。Android/iOSネイティブだけじゃなく、UnityやMarmaladeといったゲームエンジンにも対応しています。PhotonとUnityを用いてネットワーク同期の基礎を解説します。Networking(通称PUN)の2種類のSDKがあります。UnityでPhotonを使う場合ですと、PUNが取っ付き易いのでおすすめです。つきまして、ここではPUNを使ってオブジェクトを同期する方法について説明します。SDKとPUNの違いはこちらの記事をご参照ください。Realtimeは無料のアカウントを取得するとすぐに利用できます。アカウントの取得は下記URLからメールアドレスを登録するだけです。https://www.photonengine.com/ja/Realtime完了すると、登録したメールアドレスにURLが記載されていますので、そちらを押下し登録を完了してください。ダッシュボードからAppIDを取得します。1アプリケーションに対して1つAppIDを発行することが出来ます。https://www.photonengine.com/ja/dashboard/realtimePUNを用意するまず、Unityで適当なプロジェクトを作成します(例:photon-demo-01)。Storeからダウンロードできます。Free」と入力し検索を行ってください。何種類か表示されると思いますが、ここでは無償版の下記のエメラルドグリーンの物を利用します。Storeからインポートを行います。Networking/Demosのチェックは外して、インポートを行わないようにしてください。Networking」のフォルダが作成されていることを確認してください。Wizardを用いる方法です。Wizardを使うと、GUIで直感的に接続設定が可能です。それでは設定を行いましょう。Wizardの小窓が表示されます。これらのウィンドウについては下記の通りです。Networkingに変換しますDocumentationAPIのドキュメントやフォーラムなどを表示します(英語)接続先の設定を行うので、ここではSettingsの横の[Setup]を押下してください。画面が変わり、画像のような画面になると思います。この画面ではPhotonネットワークに接続するための必要な情報を設定します。今回の場合、設定する内容は下記の2つです。AppIdに、はじめに取得したAppIDを入力します。Regionはここでは[best]を選択します。完了すると[Save]ボタンを押下してください。[Success]の確認ダイアログが出れば完了です。Photonネットワークに接続するスクリプトを作るPhotonを利用し、オブジェクトの同期を行うためにはルームに入室し、ルーム内でPhotonが用意しているメソッドを用いて、インスタンスの生成を行う必要があります。簡単な例として一つの部屋に全員が入る仕組みで説明いたします。Manager」という名前の空のオブジェクトを作成し、下記のスクリプトを付与してください。}}スクリプトの解説を行います。4行目はPhoton.MonoBehaviourを継承しています。PhotonのMonoBehaviourを継承することによって、オーバーライドされたメソッドを呼び出すことが可能となります。11行目でPhotonNetwork.ConnectUsingSettings(“0.1′′);を利用してPhotonに接続を行っています。Wizardで設定された接続情報を元にPhotonに接続します。Networking/Resources/PhotonServerSettings」というファイルが作成されます。ConnectUsingSettingsではこの設定ファイルを元に接続を行うメソッドとなっています。引数にてゲームバージョンを指定することが可能です。同一のバージョン間でのみ接続が可能になっています。バージョンはstring文字列で設定できます。14行目でSendRateの設定を行っています。SendRateの設定が無い状態ですとカクついて見えるため、今回は秒間30回としてセットしています。20行目からはロビーに接続すると呼ばれるオーバーライドメソッドです。今回のサンプルでは、Photonに接続するとまずはじめにこのメソッドが呼ばれます。23行目では、PhotonNetwork.JoinRandomRoom()を用いてランダムでルームに入室しています。今回のサンプルではルームが1つしかないため、この方法で入室しています。29行目からは、ランダムで部屋に入室できなかった場合のオーバーライドメソッドです。1人目は必ず入室に失敗するので、ルームを作成するようにしています。32行目でルームを作成しています。CreateRoomメソッドではルーム名を設定することが可能です。入室時に一意するために利用可能ですが、今回は利用しません。38行目からは、ルームの入室に成功した場合のオーバーライドメソッドです。ルームに入室すると、40行目のPhotonNetwork.Instantiateメソッドを用いて実際にCubeオブジェクトを生成しています。第1引数でインスタンス化するPrefabの名前をしています。この時、場所はどこでも構わないのですが、Resourcesフォルダ直下にPrefabを配置してやる必要があります。第2引数ではVector3型のposition、第3引数ではQuaternion型のrotationを指定します。第4引数ではPhotonViewのグループ番号を設定しますが、ここでは0としておきます。49行目では現在のPhotonのステータスを表示しています。ゲームを実行するとGameウィンドウの左上に表示されると思います。ここまでのオーバーライドメソッドを整理すると下記の通りです。内容OnJoinedLobby()ロビーに接続すると呼ばれるメソッドOnPhotonRandomJoinFailed()ランダムで部屋に入室できなかった場合呼ばれるメソッドOnPhotonRandomJoinFailed()ルームに入室成功した場合呼ばれるメソッドその他のPhotonで利用できるオーバーライドメソッドについては、別のブログ記事にて解説したいと思います。これらのメソッドやPhotonNetworkの詳細については、PUNに包含されているAPIリファレンスをご覧下さい。デモシーンの作成ここで一度、デモシーンを作るための操作を行います。はじめにHierarchyからPlaneを作成します。PlaneのTransformは下記のように設定しておいてください。lightを適当な位置に追加しておいてください。最後にCubeを作成します。CubeのTransformは下記の通り設定してください。設定が完了するとCubeをResourcesフォルダ直下にPrefabとして置いておいてください。Prefab化が完了すると、Hierarchy内のCubeは削除しても構いません。Cubeは操作できるようにするので、下記のコードを作成します。スクリプト名はGameControllerと設定しておいてください。このスクリプトの説明は今回は割愛します(次回以降説明予定)。}}GameControllerのスクリプトはPrefab化したCubeオブジェクトに付与しておいてください。これで、CubeをWASDキーで操作することが可能となります。ここまでのHierarchyは画像のようになっているかと思います。PhotonViewの設定を行うPhotonViewスクリプトとは、UnityのNetworkViewを元にしたPhotonのコンポーネントです。Photonでオブジェクトの同期を行うには、Photonのネットワーク上で同期を行うオブジェクトにPhotonViewスクリプトを付与してやる必要があります。これを利用すると、オブジェクトの位置や傾き、キャラクターのアニメーションなどがそれぞれの画面で同一の動作を行えるようになります。それでは、実際にCubeのPrefabにPhotonViewスクリプトを付与してみましょう。すると画像のように表示されるかと思います。IDPhotonViewのID番号Observe同期させたいオブジェクトこれらのパラメータは下記の通りです。runtimeと表示されているかと思います。これらは実行時にパラメータが設定されます。Observeに同期させたい対象をドラッグ&ドロップすると、その対象がネットワーク上で同期されるようになります。位置を同期させたい場合はTransformをドラッグ&ドロップします。スクリプトを同期させることも可能です。この場合は一旦オブジェクトにスクリプトを付与し、その付与されたスクリプトをさらにObserveにドラッグ&ドロップすると完了です。ここではTransformの値をドラッグ&ドロップしてみましょう。すると、ObserveのにTransfromのアイコンとCubeと表示されたかと思います。optionとSerializationが追加されているのを確認してください。optionの詳細については下記の通りです。Photonでの信頼性レベルについて設定が可能です。Changeを使用することをおすすめします。Compressedをご利用ください。説明Off同期は行われません。Compressed最後の状態と現在の状態の差が送信され、変更が無い場合は何も送信されませんUnreliableすべて送信されます。転送量が大きくなりますが、パケット損失の機会が減ります。ChangeUnreliableですが、変更があった場合のみ送信しますSerializationの詳細については下記の通りです。スケールをネットワークを通して渡すことが可能です。RotationPositionとRotationをシリアライズしますAllTransformのすべてをシリアライズします以上で設定は完了です。実行するとCubeのPrefabが表示されていると思います。WASDで操作可能ですので、複数ウィンドウで実行しCubeの位置が正しく同期されていることを確認してみてください。ここまでの作ったサンプルプロジェクトは下記にあります。StoreからPUNをインポートし、AppIdの設定後、当サンプルプロジェクトをインポートしてください。Japan/ScenesのフォルダのMainシーンが今回の記事と同等の内容になっていますので、是非一度ご覧になってお試しください。FreeとPUN+の違いについてPUNで到達保証の設定を行うPhoton逆引きリファレンスコメント0件のコメントログインしてコメントを残してください。