【发布时间】:2021-09-29 10:15:51
【问题描述】:
我创建了一个简单的脚本只是为了测试 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 的理解将帮助我进一步创建我的游戏。天呐
【问题讨论】: