UnityでPUNを使ったオンラインマルチプレイの実装 -PunRPC編-


UnityでPUNを使ったオンラインマルチプレイの実装 -PunRPC編-


UnityのネットワークエンジンサービスであるPUN(Photon Unity Networking)について解説していくシリーズ記事です。

<前回までのシリーズ記事一覧>
⇒ UnityでPUNを使ったオンラインマルチプレイの実装 -準備編-
⇒ UnityでPUNを使ったオンラインマルチプレイの実装 -同期編-
⇒ UnityでPUNを使ったオンラインマルチプレイの実装 -ルームオプション編-
⇒ UnityでPUNを使ったオンラインマルチプレイの実装 -カスタムプロパティ編-

今回はシリーズ5回目、PunRPC編です。
RPC(リモートプロシージャコール)とは、関数を相手の環境で実行するように命令を飛ばす機能です。
自身のパラメータをメソッドの引数として渡すことで、同期処理の負荷を減らす目的で使用したりします。

PUNはバージョン1.73を使用しています。

PunRPC


1.PunRPC の設定

PunRPCは、通常のメソッドに [PunRPC] 属性をつけて定義します。

    [PunRPC]
    void DebugNum(int num) {
        Debug.Log(num);
    }

PunRPC属性をつけたメソッドは、対象を選択して実行命令を飛ばすことができます。
ルームに接続しているユーザーに、一斉に同じメソッドを実行させたり、
自分以外のユーザーに自らのステータスを引数として渡して、同期を各々のユーザーの処理に委ねることができます。

命令を飛ばす側は以下のように記述します。

2.PunRPC の実行

    PhotonView photonView = GetComponent<PhotonView>();
    int myNumber= 777;

    if (photonView.isMine) {
        //          実行するメソッド名     対象           引数
        photonView.RPC(“DebugNum", PhotonTargets.All, myNumber);
    }

第1引数に実行したいメソッド名を指定します。(string型)
第2引数にルーム内のターゲットを指定します。
→ PhotonTargets.Allでルーム内の全員を指定できます。
→ PhotonTargets.Otherで自分以外を指定できます。
→ PhotonTargets.MasterClientでルーム管理者を指定できます。
第3引数にメソッドに渡したい引数を渡します。

PhotonView.isMine で命令部分の処理を行うクライアントを自分自身に限定しています。
この分岐がないと、すべてのユーザーの環境で実行命令が飛ばされてしまいますので注意しましょう。

3.結果

あるユーザーが2つ目のスクリプトに記述された実行命令を飛ばすと、ルーム内の全ユーザーが、引数 int num に「777」を受け取ります。
サンプルではログに出力していますが、渡された値は相手の環境のメソッド内で思うように利用できるでしょう。

PunRPC編は以上です。

今月の新着記事

【全部Gitのせい】Unityの Unable to parse YAML file エラーの直し方
【知っておいた方がいい】UnityでWebGLにビルドできないエラーの対処法
【解けないとマズい練習問題】C# 練習問題 9

記事一覧にもどる

  • このエントリーをはてなブックマークに追加

PAGE TOP