facebook twitter hatena line email

「Unity/photon/pun1/rpc」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(サンプル)
行1: 行1:
 
==RPCとは==
 
==RPCとは==
 
リモートプロシージャコールというらしく、
 
リモートプロシージャコールというらしく、
情報をその部屋にいる、その他のメンバーに送信できます。
+
情報(intやstring)をその部屋にいる、その他のメンバーに送信できます。
  
 
==サンプル==
 
==サンプル==
行65: 行65:
  
 
==ターゲット一覧==
 
==ターゲット一覧==
*Photontargets.All // 自分含めて全員へ(自分への送信はPhotonサーバを経由しない)
+
*Photontargets.All // 部屋中の自分含めて全員へ(自分への送信はPhotonサーバを経由しない)
*Photontargets.Others // 自分以外全員へ
+
*Photontargets.Others // 部屋中の自分以外全員へ
 
*Photontargets.MasterClient // 部屋のホストにのみ送る
 
*Photontargets.MasterClient // 部屋のホストにのみ送る
*Photontargets.AllViaServer // 自分含めて全員へ(自分への送信も一旦Photonサーバを経由する)
+
*Photontargets.AllViaServer // 部屋中の自分含めて全員へ(自分への送信も一旦Photonサーバを経由する)
*Photontargets.AllBufferedViaServer // 自分含めて全員へ(自分への送信も一旦Photonサーバを経由する、後で部屋に入ってきたメンバーにも送られる)
+
*Photontargets.AllBufferedViaServer // 部屋中の自分含めて全員へ(自分への送信も一旦Photonサーバを経由する、後で部屋に入ってきたメンバーにも送られる)
*Photontargets.AllBuffered // 自分含めて全員へ(自分への送信はPhotonサーバを経由しない、後で部屋に入ってきたメンバーにも送られる)
+
*Photontargets.AllBuffered // 部屋中の自分含めて全員へ(自分への送信はPhotonサーバを経由しない、後で部屋に入ってきたメンバーにも送られる)
*Photontargets.OthersBuffered // 自分以外全員へ(後で部屋に入ってきたメンバーにも送られる)
+
*Photontargets.OthersBuffered // 部屋中の自分以外全員へ(後で部屋に入ってきたメンバーにも送られる)
 
*PhotonPlayer.Find(playerId)
 
*PhotonPlayer.Find(playerId)
  

2017年10月27日 (金) 07:55時点における版

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