This document is about: PUN 1
SWITCH TO

PUN Classic (v1)、PUN 2、Boltはメンテナンスモードとなっております。Unity2022についてはPUN 2でサポートいたしますが、新機能が追加されることはありません。お客様のPUNプロジェクトおよびBoltプロジェクトが停止することはなく、将来にわたってパフォーマンス性能が落ちることはありません。 今後の新しいプロジェクトについては、Photon FusionまたはQuantumへ切り替えていただくようよろしくお願いいたします。

イントロダクション

はじめに

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、12ヶ月間有効)が含まれます。

PUN PLUS を購入

必要となるコード

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