Photon Unity Networking イントロ

はじめに

PUNはマルチプレイヤーゲームのUnityパッケージです。PUNは認証オプション、マッチメイキングに加え、Photonバックエンドを利用した高速かつ信頼性の高いゲーム内コミュニケーションを提供します。

PUNはUnityで対応されているほとんどすべてのプラットフォームへエクスポート可能です。また、PUNには二つの種類があります:

PUN FREE

PUN FREE Unity Plugin プラットフォームほぼ全てへエクスポート可能。iOS、Androidの場合は、Unity 4 ProかUnity 5が必要になります。

PUNFREEをダウンロード

PUN PLUS

PUN FREE Unity Plugin どんなUnityライセンスを持っていても、サポートされている全てのプラットフォームへエクスオポートが可能。 100CCUのPhoton Realtime60ヶ月分も含まれています。

PUN PLUSを購入 USD95で利用できます。

注意:Unity 5については、両方のPUNパッケージは同じファイルで構成されています。PUN+を買うことで100 CCU 60ヶ月分を受け取ることが可能ですが、クライアントサイドではPUN Freeを使用します。

PUN、PUN+、Unity Networkingの比較

  PUN PUN+ UN  
価格 無料 $ 95 無料
無期限の無料CCU 20 100
ワールドワイド・ホスティング UNにはマスタサーバが必要
Unity Networkingと互換性あり Old Unity Networking, not UNet
Unity FREE: ウェブ, スタンドアローン
Unity 4FREE: iOS, Android UNはモバイルでパンチスルーの問題あり
Unity 5 FREE: iOS, Android UN needs Relay Service for mobiles
ホストマイグレーション
ルーム、ロビーのサポート
プレイヤーサービス品質(QoS)

記事Photon Unity Networking (PUN) とUnity Networking (UN)の比較 で二つの比較の詳細をご確認ください。

必須コード

2種類の詳細な比較については”Photon Unity Networking (PUN) Compared To Unity Networking (UN) ”を参照して下さい。PUNを最大限に利用するためにはいくつかスクリプトを書く必要があります。このページではスタートするために最も大切な要素を紹介します。

接続

    PhotonNetwork.ConnectUsingSettings("v4.2");

上記のコードでPhotonに接続して機能を利用開始できます。

ConnectUsingSettingsはクライアントのゲームバージョンを設定します。PUN Setup Wizardから書き込むConfigファイルを使用してPhotonServerSettingsに保存されています。

マッチメイキング

次に、既存のルームに入るかルームを作ります。次のコードはゲームスタートまたはゲーム参加の方法です。:

    //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: OnPhotonCreateGameFailed

友人同士は通常一緒にプレイをしたいかと思います。もし彼らがコミュニケーションを取れる場合(例:Photon Chat, Facebook)ルームの名前を決めてJoinOrCreateRoomを使うことが出来ます。彼らはルームの名前を知っているため、ルームを別のプレイヤーに非公開にすることが可能です。

    RoomOptions roomOptions = new RoomOptions() { isVisible = false, maxPlayers = 4 };
    PhotonNetwork.JoinOrCreateRoom(nameEveryFriendKnows, roomOptions, TypedLobby.Default);

まだ存在しないルームの場合、JoinOrCreateRoomでルームが作成されます。ルームが満員の場合、(仮に実装している場合)OnPhotonJoinRoomFailedが呼び出されます。

ゲームプレイ

GameObjectトは「ネットワーク上のゲームオブジェクト」としてインスタンス化することができます。GameObjectには識別するPhotonViewコンポーネントおよび所有者(またはコントローラ)があります。所有者は他の全てのプレイヤーを更新します。PhotonViewObservedフィールドにスクリプトをドラッグすることで、継続的な更新を送信することができます。スクリプトは次のように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("RPC: 'OnAwakeRPC' Parameter: " + myParameter + " PhotonView: " + this.photonView);
    }

    // [...]
    // calling the RPC somewhere else
    photonView.RPC("OnAwakeRPC", PhotonTargets.All, (byte)1);

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

    PhotonNetwork.RaiseEvent((byte)eventCode, (object)eventContent, (bool)sendReliable, (RaiseEventOptions)options)

サポートについて

Photonチーム(通称Photonian)は万全なサポート体制を敷いています。質問やアプリの不具合の解決には次の方法をお試しください:

  • 問題が発生した場合:フォーラムに質問を投稿してください。
  • プライバシーを重視する場合やサポートが必要な場合はdeveloper@photonengine.jpまでご連絡ください。

スピーディーな対応のために

スピーディーに対応できるよう、再現の手順と共に以下の情報を明記してください:

  • Photon Client SDKのバージョン

    • SDK zipファイル名に含まれています。
    • PUNの場合はPhotonNetwork.versionPunの数値をご連絡ください。
  • Photon Cloud

    • Connect*()コールで設定されるゲームバージョンAppId両方ご連絡ください。
    • ルームに関する問題の場合はRoomNameServer Addressをご連絡ください。C#の場合、ルーム内でclient.CurrentServerAddressをログすることで取得可能です。
    • RegionServer Addressをご連絡ください。
  • Photon Server

    • サーバをホスティングしている場合、Server SDK Versionをご連絡ください。これはSDKのzipファイル名に含まれています。
    • ログを添付してください。

ご意見をお聞かせください

特定のドキュメントに関する指摘、デモの要望、FAQの要望等のドキュメントに関するご意見がございましたら是非お聞かせください。developer@photoncloud.jpまでお気軽にご連絡ください。

より詳しくPhotonについて知りたいですか?

まずは 無償プランを試してみよう。
イベント会場で我々に会いにきてください。
MTGの要望はこちらへ。

 ドキュメントのトップへ戻る