Unityでオンラインゲーム等のマルチプレイゲームを実装する方法は、いくつかありますが、中でも代表的な方法として、photonやnode.jsなどを使用した方法があります。
今回はphotonを使用して、マルチプレイゲームを実装する方法について記載したいと思います。

*twitterアカウント
 

にほんブログ村 ゲームブログへ

にほんブログ村
 

/////////////////////////////
ユーザー登録
////////////////////////////
下記サイトよりPhoton Cloudを使用するためメールアドレスや在住国などを登録します。
登録したメールアドレスにPhoton Unity(PUN Wizard)で使用するAppIDについて連絡が来るので、このIDをPUN Wizardに登録します。
*PUN Wizard設定画面はUnityでAsset StoreからPhoton Cloud Unityをダウンロードしてインポートすれば自動的に開かれます。
 
////////////////////////////////////////
ルーム作成、ルーム参加 
//////////////////////////////////////// 
Photon Cloudは1つのマスターサーバーと複数のゲームサーバーから構成されます。クライアントはまずマスターサーバーのロビーへ接続し、そこでルームを作成したり、ルームへの参加を行うことが出来ます。
ルーム作成や参加失敗時の処理はUnity Script側でPhoton.MonoBehaviourを継承すると、
OnJoindeLobby(){}(ロビー参加時)、OnJoinedRoom(){}(ルーム参加成功時)、
OnPhotonRandomJoinFailde()(ルーム参加失敗時)などの関数が用意されているので、これらの関数を用いることで対応できます。
 
////////////////////////////
オブジェクト同期 
//////////////////////////// 
次の手順により、ネットワーク上でオブジェクトを同期させます。
1,PhotonNetwork.Instantiate()を使用して該当オブジェクトをインスタンス化します。
例:
PhotonNetwork.Instantiate("Prefabs/chara1", Vector3.zero, Quaternion.identity, 0);
2,同期させるオブジェクトに対してPhoton Viewを追加します。(InspectorビューのAdd component)
・PhotonViewのObserveに同期対象を指定します。 
3,既存の設定のままだと自プレイヤーと他プレイヤーが同じ動きをしてしまうため、photonView.isMineを使い、自プレイヤーと他プレイヤーを区別して制御します。
例:if(photon.View.isMine){
              自プレイヤーの処理
}
4,プレイヤーの動作をクライアント間で同期させるため、Photon.MonoBehaviorを継承したクラス内でOnPhotonSerializeViewというメソッドを使用し、stream.SendNext、
stream.SendReceiveNextを用いてキャラクターの状態などのデータ送受信を行います。

~~~~~~~~~~~~~~~~~~~~~~~~~~~
script記述例 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (stream.isWriting) {
 //データ送信
stream.SendInt(playerHP);
 stream.SendVector3(transform.position);
 stream.SendQuaternion(transform.rotation);
・・・・
//データ受信
int playerId = (int)stream.ReceiveNext();
playerHP = (int)stream.ReceiveNext();
 ・・・
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
5,RPC(リモートプロシージャコール)を使用してネットワーク上にあるオブジェクトのメソッドを呼びだします。使用する際はメソッド名の前に[RPC]として登録し、下記4ファイルにRPCとして使用するメソッド名を登録します。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
script記述例
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
[RPC]
Void _何かの関数() {
}
Assets / Photon Unity Networking/Resources
下にある4つのファイルに使用するメソッド名を登録します。
・photonServerSettings,
・photonServerSetting_local,
・photoServerSettings_photon_cloud,
・photonServerSettings_self-hosting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
photonServerSettingはメソッド名を登録するとき一回clearし、refreshした後unityを再起動します。
*photonServerSettings_local,photonServerSettings_photon-cloud,photonServerSettings_self-hostingの3つのファイルについてはテキストファイルで開いて直でメソッド名を登録する必要があります。