PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

イントロダクション

はじめに

Photon Unity Networking(PUN)は、マルチプレイヤーゲーム対応のUnityパッケージです。 柔軟性の高いマッチメイキングによってプレイヤーはルームに入室し、ルーム内のオブジェクトはネットワーク上で同期されます。RPC、カスタムプロパティ、または「低いレベル」のPhotonイベントなどの機能があります。信頼性が高く(オプション)、高速な通信が専用のPhotonサーバーによって実現されます。このため、クライアントは1対1で接続する必要はありません。 PUNはUnity対応の、ほぼすべてのプラットフォームへエクスポート可能です。また、PUNには2つの種類があります:

PUN FREE

PUN FREE 無償パッケージで多数のデモ、あらかじめ作成されたスクリプトやリファレンスドキュメントが含まれています。 ほぼすべてのプラットフォームへエクスポート可能です。

PUN FREE をダウンロード

PUN PLUS

PUN FREE Unity Plugin PUN FREEと同じ内容のほか、Photon Cloudの100CCUプラン(約40,000MAU、60ヶ月間有効)が含まれます。

PUN PLUS を購入

Back To Top

必要となるコード

PUNを最大限活用するには、若干のプログラミングが必要です。 このページでは、数件のスニペットを表示しますが、ガイドではなく概要として説明します。

正常に開始するには、「PUN基本チュートリアル」を参照のうえ作業してください。

Back To Top

コンテンツとコールバック

    PhotonNetwork.ConnectUsingSettings("v1");

ConnectUsingSettingsはクライアントのゲームバージョンを設定し、その他すべてにPhotonServerSettingsを使用します。これを実行すると、PUNは接続が確立した場合や、ルームに参加した場合などにコールバックを使用して通知します。Unityの「マジックメソッド」と同様に、コールバックメソッド名を調べて実装するだけです。たとえば、OnConnectedToMasterです。

Back To Top

マッチメイキング

以下のコードスニペットでは、ゲームを開始するか、またはゲームに参加するためのメソッドコールを示しています。

    //Join room "someRoom"
    PhotonNetwork.JoinRoom("someRoom");
    //Fails if there are no open games. Error callback: OnPhotonJoinRoomFailed
    //Tries to join any random game:
    PhotonNetwork.JoinRandomRoom();
    //Fails if there are no open games. Error callback: OnPhotonRandomJoinFailed
    //Create this room.
    PhotonNetwork.CreateRoom("MyMatch");
    // Fails if "MyMatch" room already exists and calls: OnPhotonCreateRoomFailed

フレンド同士が一緒にプレイをしたく、PUN外で通信する方法がある場合(例:Photon Chat、Facebookなど)にはルーム名を作成してJoinOrCreateRoomを使用できます。他のプレイヤーをこのルームにマッチングしないようにするには、このルームをマッチメイキングでは非表示にします:

    RoomOptions roomOptions = new RoomOptions();
    roomOptions.IsVisible = false;
    roomOptions.MaxPlayers = 4;
    PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);

JoinOrCreateRoomは、そのルームが存在しない場合にはルームを作成します。このため、誰が最初に作るかは問題ではありません。 もしルームに空きがない場合には、OnPhotonJoinRoomFailedが呼ばれます(OnPhotonJoinRoomFailedが実装されている場合)。

マッチメイキングの詳細はガイドを参照してください。

Back To Top

ゲームロジック

GameObjectsは「ネットワーク化されたGameObjects」としてインスタンス化され、これにはPhotonViewコンポーネントがあります。このコンポーネントによって、オブジェクトとオーナー(または管理者)が識別されます。 管理権限のあるプレイヤーは、他のすべてのプレイヤーをアップデートします。PhotonViewのObservedフィールドにスクリプトを添付すると、継続してアップデートを送信できます。 スクリプトは、以下のようにOnPhotonSerializeViewを実装する必要があります:

    // 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
        }
    }

クライアントは、ネットワーク化された特定のオブジェクト上で、発生頻度の低い事柄について [リモートプロシージャコール]を実行できます。

    // 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));
    }
    // calling the RPC somewhere else
    photonView.RPC("OnAwakeRPC", PhotonTargets.All, (byte)1);

GameObjectsとは別に、独自のイベントを送信することも可能です:

    PhotonNetwork.RaiseEvent(eventCode, eventContent, sendReliable, raiseEventOptions);

PUNのRPCとRaiseEventについては、こちらを参照してください。

Back To Top

デモとチュートリアル

PUNパッケージには、複数のデモと、便利なスクリプトが含まれています。これらは何度でも利用でき、解析や再実行も可能です。

正常に開始するには、「PUNベーシックチュートリアル」を十分に確認したうえでコーディングしてください。

To Document Top