如何更正所有客户端的调用 RPC?
How to correct call RPC on all clients?
我创建了简单的脚本只是为了测试 RPC 的工作原理,但有一点不明白。这是我的代码:
public class TestRPC : MonoBehaviour
{
public static TestRPC Instance { get; private set; }
[SerializeField]
public static int Opp = 5;
float timer = 2f;
private void Awake()
{
if (Instance != null) return;
else Instance = this;
}
[PunRPC]
public void AddOpp(int add)
{
Opp += add;
}
void Update()
{
timer -= Time.deltaTime;
if(timer <= 0)
{
Debug.LogError(Opp);
timer = 2f;
}
}
}
我期望的是:场景中有 2 个玩家。在调用 RPC AddOpp 后应该调用两次并且在 Update 方法中将被记录 15.
PhotonView.Get(FindObjectOfType<TestRPC>()).RPC("AddOpp", RpcTarget.All, new object[] { 5 });
我什至尝试使用 IPunObservable 来同步 Opp var,但没有帮助
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
stream.SendNext(Opp);
if (stream.IsReading)
Opp = (int)stream.ReceiveNext();
}
无论如何它记录了 10。那么 - RPC 是如何工作的或者我做错了什么?对 RPC 的理解将帮助我进一步创建我的游戏。发送
你有 2 个玩家,P1 和 P2。
每个玩家控制场景中的一个实例。
P1 有一个 P2 的远程控制实例(由玩家 2 控制)。
P2 有一个 P1 的远程控制实例(由玩家 1 控制)。
P1 使用 RPCTarget.All:
进行 RPC 调用
所有连接的客户端上 P1 的所有远程(和本地)实例都会收到该调用。
在 P1 端,5 的值与 5 的起始值相加得到 10。
在 P2 端,相同的调用发生在 P1 的远程控制实例上,结果相同。
此调用会在控制台中为两个玩家(来自 P1 实例)生成调试输出 10。
P2 使用 RPCTarget.All:
进行 RPC 调用
所有已连接客户端上的所有远程(和本地)P2 实例都会收到该调用。
在 P2 端,5 的值与 5 的起始值相加得到 10。
在P1这边,同样的调用发生在P2的远程控制实例上,结果是一样的。
此调用还会在控制台中为两个玩家(来自 P2 实例)生成调试输出 10。
控制台日志
在每个玩家的控制台中,您应该看到 10
(来自 P1 的 RPC 调用)和 10
(来自 P2 的 RPC 调用)。
我创建了简单的脚本只是为了测试 RPC 的工作原理,但有一点不明白。这是我的代码:
public class TestRPC : MonoBehaviour
{
public static TestRPC Instance { get; private set; }
[SerializeField]
public static int Opp = 5;
float timer = 2f;
private void Awake()
{
if (Instance != null) return;
else Instance = this;
}
[PunRPC]
public void AddOpp(int add)
{
Opp += add;
}
void Update()
{
timer -= Time.deltaTime;
if(timer <= 0)
{
Debug.LogError(Opp);
timer = 2f;
}
}
}
我期望的是:场景中有 2 个玩家。在调用 RPC AddOpp 后应该调用两次并且在 Update 方法中将被记录 15.
PhotonView.Get(FindObjectOfType<TestRPC>()).RPC("AddOpp", RpcTarget.All, new object[] { 5 });
我什至尝试使用 IPunObservable 来同步 Opp var,但没有帮助
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
stream.SendNext(Opp);
if (stream.IsReading)
Opp = (int)stream.ReceiveNext();
}
无论如何它记录了 10。那么 - RPC 是如何工作的或者我做错了什么?对 RPC 的理解将帮助我进一步创建我的游戏。发送
你有 2 个玩家,P1 和 P2。
每个玩家控制场景中的一个实例。
P1 有一个 P2 的远程控制实例(由玩家 2 控制)。
P2 有一个 P1 的远程控制实例(由玩家 1 控制)。
P1 使用 RPCTarget.All:
进行 RPC 调用所有连接的客户端上 P1 的所有远程(和本地)实例都会收到该调用。
在 P1 端,5 的值与 5 的起始值相加得到 10。
在 P2 端,相同的调用发生在 P1 的远程控制实例上,结果相同。
此调用会在控制台中为两个玩家(来自 P1 实例)生成调试输出 10。
P2 使用 RPCTarget.All:
进行 RPC 调用所有已连接客户端上的所有远程(和本地)P2 实例都会收到该调用。
在 P2 端,5 的值与 5 的起始值相加得到 10。
在P1这边,同样的调用发生在P2的远程控制实例上,结果是一样的。
此调用还会在控制台中为两个玩家(来自 P2 实例)生成调试输出 10。
控制台日志
在每个玩家的控制台中,您应该看到 10
(来自 P1 的 RPC 调用)和 10
(来自 P2 的 RPC 调用)。