イントロダクション
はじめに
Photon Unity Networking(PUN)は、マルチプレイヤーゲーム対応のUnityパッケージです。
柔軟性の高いマッチメイキングによってプレイヤーはルームに入室し、ルーム内のオブジェクトはネットワーク上で同期されます。RPC、カスタムプロパティ、または「低いレベル」のPhotonイベントなどの機能があります。信頼性が高く(オプション)、高速な通信が専用のPhotonサーバーによって実現されます。このため、クライアントは1対1で接続する必要はありません。
PUNはUnity対応の、ほぼすべてのプラットフォームへエクスポート可能です。また、PUNには2つの種類があります:
PUN FREE
無償パッケージで多数のデモ、あらかじめ作成されたスクリプトやリファレンスドキュメントが含まれています。 ほぼすべてのプラットフォームへエクスポート可能です。
PUN PLUS
PUN FREEと同じ内容のほか、Photon Cloudの100CCUプラン(約40,000MAU、12ヶ月間有効)が含まれます。
必要となるコード
PUNを最大限活用するには、若干のプログラミングが必要です。
このページでは、数件のスニペットを表示しますが、ガイドではなく概要として説明します。
正常に開始するには、「PUN基本チュートリアル」を参照のうえ作業してください。
コンテンツとコールバック
C#
PhotonNetwork.ConnectUsingSettings("v1");
ConnectUsingSettings
はクライアントのゲームバージョンを設定し、その他すべてにPhotonServerSettings
を使用します。これを実行すると、PUNは接続が確立した場合や、ルームに参加した場合などにコールバックを使用して通知します。Unityの「マジックメソッド」と同様に、コールバックメソッド名を調べて実装するだけです。たとえば、OnConnectedToMaster
です。
マッチメイキング
以下のコードスニペットでは、ゲームを開始するか、またはゲームに参加するためのメソッドコールを示しています。
C#
//Join room "someRoom"
PhotonNetwork.JoinRoom("someRoom");
//Fails if there are no open games. Error callback: OnPhotonJoinRoomFailed
C#
//Tries to join any random game:
PhotonNetwork.JoinRandomRoom();
//Fails if there are no open games. Error callback: OnPhotonRandomJoinFailed
C#
//Create this room.
PhotonNetwork.CreateRoom("MyMatch");
// Fails if "MyMatch" room already exists and calls: OnPhotonCreateRoomFailed
フレンド同士が一緒にプレイをしたく、PUN外で通信する方法がある場合(例:Photon Chat、Facebookなど)にはルーム名を作成してJoinOrCreateRoom
を使用できます。他のプレイヤーをこのルームにマッチングしないようにするには、このルームをマッチメイキングでは非表示にします:
C#
RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;
roomOptions.MaxPlayers = 4;
PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);
JoinOrCreateRoom
は、そのルームが存在しない場合にはルームを作成します。このため、誰が最初に作るかは問題ではありません。
もしルームに空きがない場合には、OnPhotonJoinRoomFailed
が呼ばれます(OnPhotonJoinRoomFailed
が実装されている場合)。
マッチメイキングの詳細はガイドを参照してください。
ゲームロジック
GameObjectsは「ネットワーク化されたGameObjects」としてインスタンス化され、これにはPhotonView
コンポーネントがあります。このコンポーネントによって、オブジェクトとオーナー(または管理者)が識別されます。
管理権限のあるプレイヤーは、他のすべてのプレイヤーをアップデートします。PhotonViewのObserved
フィールドにスクリプトを添付すると、継続してアップデートを送信できます。
スクリプトは、以下のようにOnPhotonSerializeView
を実装する必要があります:
C#
// in an "observed" script:
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.isWriting)
{
Vector3 pos = transform.localPosition;
stream.Serialize(ref pos);
}
else
{
Vector3 pos = Vector3.zero;
stream.Serialize(ref pos); // pos gets filled-in. must be used somewhere
}
}
クライアントは、ネットワーク化された特定のオブジェクト上で、発生頻度の低い事柄について [リモートプロシージャコール]を実行できます。
C#
// defining a method that can be called by other clients:
[PunRPC]
public void OnAwakeRPC(byte myParameter)
{
//Debug.Log(string.Format("RPC: 'OnAwakeRPC' Parameter: {0} PhotonView: {1}", myParameter, this.photonView));
}
C#
// calling the RPC somewhere else
photonView.RPC("OnAwakeRPC", PhotonTargets.All, (byte)1);
GameObjectsとは別に、独自のイベントを送信することも可能です:
C#
PhotonNetwork.RaiseEvent(eventCode, eventContent, sendReliable, raiseEventOptions);
PUNのRPCとRaiseEventについては、こちらを参照してください。
デモとチュートリアル
PUNパッケージには、複数のデモと、便利なスクリプトが含まれています。これらは何度でも利用でき、解析や再実行も可能です。
正常に開始するには、「PUNベーシックチュートリアル」を十分に確認したうえでコーディングしてください。
Back to top