facebook twitter hatena line google mixi email

Unity/photon/rpc

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

RPCとは

リモートプロシージャコールというらしく、 情報(intやstring)をその部屋にいる、その他のメンバーに送信できます。

サンプル

  1. Roomに入るまでのスクリプトを作成しておく
  2. ヒエラルキーに"RpcView"というGameObjectを作成
  3. RpcViewにPhotonViewをAddComponentする
  4. 以下RpcViewScript.csを作成し、RpcViewにAddComponent登録し実行する
  • RpcViewScript.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RpcViewScript : MonoBehaviour
{
	PhotonView  photonView    = null;
	void Awake() {
		photonView    = GetComponent<PhotonView>();
	}
	void Start() {
		int ownerID = photonView.ownerId;
	}
	void Update() {
		if (Input.GetKeyDown (KeyCode.Space)) {
			SpaceKey ();
		}
		if (Input.GetKeyDown (KeyCode.LeftArrow)) {
			LeftArrowKey ();
		}
	}
	void SpaceKey() {
		photonView.RPC( "CustomMethod", PhotonTargets.All );
	}
	[PunRPC]
	private void CustomMethod() {
		Debug.Log ("CustomMethod");
	}
	void LeftArrowKey() {
		object[] args = new object[]{
			"hoge",
			new string[] {"taro", "jiro", "saburo"}
		};
		photonView.RPC("Custom2Method", PhotonTargets.All, args);
	}
	[PunRPC]
	private void Custom2Method(string str, string[] names) {
		Debug.Log ("CustomMethod " + str);
		foreach (string name in names) {
			Debug.Log ("CustomMethod name=" + name);
		}
	}
}

spaceキーや左矢印を押すと同じ部屋に入っている相手側にもメッセージが表示される

以下 PhotonTargets.All

メソッド実行だけだったり引数を付きでも送ることができる。

ターゲット一覧

  • Photontargets.All // 部屋中の自分含めて全員へ(自分への送信はPhotonサーバを経由しない)
  • Photontargets.Others // 部屋中の自分以外全員へ
  • Photontargets.MasterClient // 部屋のホストにのみ送る
  • Photontargets.AllViaServer // 部屋中の自分含めて全員へ(自分への送信も一旦Photonサーバを経由する)
  • Photontargets.AllBufferedViaServer // 部屋中の自分含めて全員へ(自分への送信も一旦Photonサーバを経由する、後で部屋に入ってきたメンバーにも送られる)
  • Photontargets.AllBuffered // 部屋中の自分含めて全員へ(自分への送信はPhotonサーバを経由しない、後で部屋に入ってきたメンバーにも送られる)
  • Photontargets.OthersBuffered // 部屋中の自分以外全員へ(後で部屋に入ってきたメンバーにも送られる)
  • PhotonPlayer.Find(playerId)

引数型一覧

byte, int, float, string, byte[], int[], float[],string[]
Vecter3, Quaternion

引数タイプについて公式:https://doc.photonengine.com/ja/realtime/current/reference/serialization-in-photon

MasterClientかどうかの確認

PhotonNetwork.isMasterClient