イントロダクション
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の構造を気にする必要は特段ありませんが、概要をおさえるために説明します。PUNパッケージは3層のAPIレイヤーでできています。
- 最上層にあたるのはPUNコードで、ネットワークオブジェクトやRPCなどのUnity特定の機能を実装します。
- 真ん中の層にあるのはPhotonサーバと動作しマッチメイキングやコールバックなどを行うロジックです。これはリアルタイムAPIで、単独で使用できます。PUNとリアルタイムAPI(別名ロードバランシングAPI)間のトピックについて多くのオーバーラップが存在しますが、問題ありません。
- 最下層はDLLファイルでできており、このファイルにはシリアライゼーション・デシリアライゼーション、プロトコル等が含まれています。
はじめましょう
PUNを最大限活用するには、若干のプログラミングが必要です。 このページでは、数件のスニペットを表示しますが、ガイドではなく概要として説明します。
問題なく開始するため、PUN基本チュートリアルを参照のうえ作業してください。
接続とコールバック
ConnectUsingSettings
を使うと、直ちにオンラインになります。この機能は PhotonServerSettings
アセットから必要な情報をとり、オンラインにします。
C#
PhotonNetwork.ConnectUsingSettings();
PUNではいつクライアントが接続を確立しルームに参加したかなどを通知するため、コールバックを使用しています。
例: IConnectionCallbacks.OnConnectedToMaster
.
便宜上、PUNには MonoBehaviourPunCallbacks
というMonoBehaviourがあります。これにより重要なコールバックインターフェースが実装されMonoBehaviour自身も自動的に登録されるので、継承して特定のコールバックメソッドを上書きできます。
C#
// ...
public class YourClass : MonoBehaviourPunCallbacks
{
// ...
public override void OnConnectedToMaster()
{
Debug.Log("OnConnectedToMaster() was called by PUN.");
PhotonNetwork.JoinRandomRoom();
}
// ...
}
// ...
代わりにIConnectionCallbacks
をあらゆるクラスに実装しPhotonNetwork.AddCallbackTarget
を介してコールバックのインスタンスを登録します。
マッチメイキング
OnConnectedToMaster
の中で既存のルームに参加するか、独自の作成することもできます。
以下のコードスニペットでは、ゲームを開始するか、またはゲームに参加するためのメソッドコールを示しています。
C#
// Join room "someRoom"
PhotonNetwork.JoinRoom("someRoom");
//Fails if "someRoom" is not existing, closed or full. Error callback: IMatchmakingCallbacks.OnJoinRoomFailed
C#
// Tries to join any random game:
PhotonNetwork.JoinRandomRoom();
//Fails if there are no open games. Error callback: IMatchmakingCallbacks.OnJoinRandomFailed
C#
// Create this room.
PhotonNetwork.CreateRoom("MyMatch");
// Fails if "MyMatch" room already exists and calls: IMatchmakingCallbacks.OnCreateRoomFailed
フレンドと一緒にプレイをするにあたってPUN以外でコミュニケーションできる(例えばPhoton Chat, Facebook)場合、ルーム名を作成してJoinOrCreateRoom
を使用できます。もし、他の誰もそのルームにマッチさせたくない場合にはそのルーム自体をマッチメイキングから不可視にします。以下の手順です。
C#
RoomOptions roomOptions = new RoomOptions();
roomOptions.IsVisible = false;
roomOptions.MaxPlayers = 4;
PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);
JoinOrCreateRoom
を使うと、必要に応じてルームが作成されるので、誰が一番かというのは関係なくなります。
満員であれば、IMatchmakingCallbacks.OnJoinRoomFailed
が呼び出されます。(どこかしらに実装および登録していた場合)
マッチメイキングについて詳細はガイドをご確認ください。
ゲームロジック
GameObjectはPhotonView
コンポーネントで「ネットワークゲームオブジェクト」としてインスタンス化されます。 オブジェクトとオーナー(もしくはコントローラー)を識別します。コントロールしているプレイヤーは他のプレイヤーをアップデートします。
通常はプレハブに PhotonView
を追加し、そのためのObserved
コンポーネントを選択します。そしてインスタンスを作成するためにPhotonNetwork.Instantiate
を使用します。
PhotonView
のobservedコンポーネントはネットワークオブジェクトの状態を一秒間に数回書き込む(および読み込む)のを管理します。これを実現するには、スクリプトはOnPhotonSerializeViewを定義するIPunObservableを実装する必要があります。下記を参照してください。
C#
// used as Observed component in a PhotonView, this only reads/writes the position
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", RpcTarget.All, (byte)1);
GameObjectsとは別に、独自のイベントを送信することも可能です:
C#
PhotonNetwork.RaiseEvent(eventCode, eventContent, raiseEventOptions, SendOptions.SendReliable);
PUNのRPCとRaiseEventについては、こちらを参照してください。
デモとチュートリアル
PUNパッケージには、複数のデモと、便利なスクリプトが含まれています。これらは何度でも利用でき、解析や再実行も可能です。
問題なく開始するために、「PUNベーシックチュートリアル」を十分に確認したうえでコーディングしてください。
Back to top